首页 > 解决方案 > 此视频无法阅读:已授予权限,VideoView 和 MediaController 似乎已正确定义和使用

问题描述

目标与背景

我想在我的片段中显示一个 YouTube 视频,在后者启动时启动。

问题

我的应用程序中没有播放视频,而是显示错误:“无法阅读此视频”。给开发者的消息写在 Android Studio 的“运行面板”中。后者如下图所示。

执行

解释

  1. VideoView在片段的布局中创建了一个

  2. 在片段的类中,我膨胀VideoView并设置了视频 URI;我还定义了相关的MediaController;然后我开始VideoView.

  3. 我修改了清单以设置一些权限。

来源

在片段的布局中

<VideoView
    android:id="@+id/videoView"
    android:layout_width="wrap_content"
    android:layout_height="200dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toBottomOf="@id/textView3"
    />

在片段的类中

    final VideoView videoView = inflated.findViewById(R.id.videoView);
    videoView.post(new Runnable() {
        @Override
        public void run() {
            MediaController mc = new MediaController(getContext());
            mc.setAnchorView(videoView);
            mc.setMediaPlayer(videoView);
            videoView.setMediaController(mc);
            videoView.setVideoURI(Uri.parse("https://www.youtube.com/watch?v=CUA_ZvLyVFU"));
            videoView.start();
        }
    });

在清单中

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.xxx.xxx">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"

重现错误

用于测试的视频

以下视频不会用于生产。仅用于测试:https ://www.youtube.com/watch?v= CUA_ZvLyVFU(MD GUNDILL 是举重最重要的理论家之一)。

指示

创建片段的类(活动)及其布局,粘贴上面的代码。不要忘记编辑您的清单(也粘贴上面的代码)。要进行测试,请启动您的片段。

类似问题

  1. 如何在我的 Android 应用程序中显示来自 URL 的视频?

我阅读了这些帖子及其实现我的视频播放器的答案。只有这个答案引起了我的注意:https ://stackoverflow.com/a/24691623/6500085 。但是,它似乎不起作用。我不想尝试其他解决方案,因为我认为它应该正常工作。

问题

如何开始视频?

显示的错误和异常

D/skia:近似值:numPoints=3,lengths[0]=0.000000,totalLength=2.472497,segmentPoints[0]=[0.000000,0.100000] 近似值:近似值[0]=0.000000,近似值[1]=0.000000,近似值[2 ]=0.100000 近似值:numPoints=3,lengths[2]=2.472497,totalLength=2.472497,segmentPoints[2]=[2.000000,0.100000] 近似值:近似值[6]=1.000000,近似值[7]=2.000000,近似值[8] =0.100000 I/MediaPlayer:需要启用上下文感知信息 V/MediaPlayer-JNI:native_setup V/MediaPlayerNative:构造函数 V/MediaPlayerNative:setListener V/MediaPlayer-JNI:get_session_id() W/MediaPlayer:无法打开 https:// www.youtube.com/watch?v=CUA_ZvLyVFU:java.io.FileNotFoundException:没有内容提供者: https ://www.youtube.com/watch?v=CUA_ZvLyVFUD/MediaPlayer:setDataSource IOException | SecurityException 发生:java.io.FileNotFoundException:没有内容提供者:https ://www.youtube.com/watch?v=CUA_ZvLyVFU 0) or=1 D/ViewRootImpl@da487ab[ActivityHandlingFragments]: MSG_WINDOW_FOCUS_CHANGED 0 D/ViewRootImpl@2ef9a30[ActivityHandlingFragments]: ViewPostIme 指针 0 D/ViewRootImpl@2ef9a30[ActivityHandlingFragments]: ViewPostIme 指针 1 D/OpenGLRenderer: eglDestroySurface = 0x76507d20RootViewIme @2ef9a30[ActivityHandlingFragments]: dispatchDetachedFromWindow D/InputEventReceiver: channel '108e92 com.example.xxx.xxx/com.example.xxx.xxx.ActivityHandlingFragments (client)' ~ 处理输入事件接收器。频道“108e92 com.example.xxx.xxx/com.example.xxx.x.ActivityHandlingFragments(客户端)”~NativeInputEventReceiver。D/ViewRootImpl@da487ab[ActivityHandlingFragments]:MSG_WINDOW_FOCUS_CHANGED 1 E/ViewRootImpl:sendUserActionEvent() 返回。V/InputMethodManager:开始输入:tba=android.view。

标签: androidandroid-mediaplayerandroid-videoviewandroid-video-player

解决方案


这种技术阻碍了我们从 YouTube 播放视频而不下载后者并在本地存储它(作为非临时文件)。https://www.youtube.com/watch?v=CUA_ZvLyVFU不指向视频文件,而是指向网页。

为了使它工作,我将使用本地存储的自定义视频。

另一方面,如果我使用 YouTube Developer API,我可以播放这个 YouTube 视频,而无需将其作为非临时文件下载,但必须订阅该应用程序,而我不希望这样。


推荐阅读