【问题标题】:Android - Save video internal storage and playbackAndroid - 保存视频内部存储和播放
【发布时间】:2017-02-23 00:29:32
【问题描述】:

我已将示例 mp4 视频保存在 android 内部存储中的文件中,但是当尝试通过将文件路径解析为 uri 从文件中读取并在 android videoview 中播放时,出现无法播放此视频错误。我检查了很多链接但没有用,我该如何实现?

final String mFileName = "sample.mp4";
try{
        FileOutputStream mFileOutputStream = openFileOutput(mFileName, Context.MODE_PRIVATE );
        mFileOutputStream.write(getResources().getAssets().open("sample_video.mp4").read());
        mFileOutputStream.close();
        Log.v(TAG, "Success");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
  MediaController mediaController = new MediaController(this);
    mediaController.setAnchorView(mVideoView);
    mVideoView.setMediaController(mediaController);
    mVideoView.setVideoPath(getFilesDir().getAbsolutePath()+"/sample.mp4");
    mVideoView.start();

【问题讨论】:

    标签: android


    【解决方案1】:

    只是你不能。 VideoView 内部使用MediaPlayer,它明确地requires a file to be world-readable(应用程序的目录不是)。正如 doc 所说,绕过此限制的唯一方法是传递文件描述符而不是文件路径。

    很遗憾VideoView没有setDataSource(FileDescriptor)这样的方法,所以你有两种方法:

    1. 访问VideoViewMediaPlayerthrough reflection并调用setDataSource(FileDescriptor)。不确定这是否可行,因为调用VideoView.setVideoPath时会实例化内部媒体播放器,但不应该调用它……总之,评估它,但它可能是死路一条。
    2. 使用MediaPlayerset a surface holder 播放视频并将FileDescriptor 直接传递给MediaPlayer(imo 这第二种解决方案更简洁)。

    【讨论】:

    • 是否可以使用内容提供者..?
    • 应该可以,通过传递内容 URI (VideoView.setVideoURI())。只是不要传递诸如file:// 之类的uri,如果是这样,内部MediaPlayer 将简单地调用setDataSource(String filepath)
    • 你能详细说明一下吗,我如何在 ContentProvider 中放置文件路径以及如何为 videoview 传递 uri
    • 请阅读FileProviders,了解如何创建内容提供程序来提供文件。不难,但解释很长,关于这个论点的文档做得很好:developer.android.com/reference/android/support/v4/content/…
    • 但在创建内容提供程序之前,我建议您尝试其他解决方案,例如 ExoMedia 库,它在内部使用 ExoPlayer 而不是 MediaPlayer。 github.com/brianwernick/ExoMedia
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    相关资源
    最近更新 更多