【问题标题】:How to play a video from Content Provider如何从 Content Provider 播放视频
【发布时间】:2015-02-16 18:42:47
【问题描述】:

我可能使用了错误的搜索标签,但它就是这样。 在我正在开发的应用程序中,用户可以上传图片和视频。

这通过录音或画廊。我目前正在尝试显示用户刚刚录制的视频。在使用 MediaStore.ACTION_VIDEO_CAPTURE 的意图后,我从 Intent.getData() 获取 Uri。

公开

 void getCameraVideo() {
        Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
        if (takeVideoIntent.resolveActivity(ctx.getPackageManager()) != null) {
                ctx.startActivityForResult(takeVideoIntent, FETCHER_VIDEOCAMERA);
        } else {
            Toast.makeText(ctx, Language.translate("error_phone_has_no_camera_app"), Toast.LENGTH_LONG).show();
            ErrorClass.log("Tried to take video, but phone has no camera.");
        }
    }

所以我的视频中有这个内容 Uri,现在我应该如何在 VideoView 中播放这个视频?我似乎找不到任何合适的解决方案来解决这个问题。

我只是在显示视频的活动中尝试了这个,但它只会导致黑色的 VideoView。

view = new VideoView(activity);
((VideoView) view).setVideoURI(uri);
((VideoView) view).start();

我确定有人已经解决了这个问题,但我似乎找不到它。

【问题讨论】:

  • 添加更多代码...
  • 为什么不使用与 Intent 相同的 uri 开始重新编码?
  • 我正在使用 uri 我得到结果,我没有传递任何 uri。
  • 我看到您在我发布解决方案后修改了问题并添加了 start() 方法。很高兴知道你在我发布答案后添加了这个:)
  • 没错,但那是我忘记添加的内容。但不是我询问反馈的问题。

标签: android video android-contentprovider android-videoview


【解决方案1】:

一次尝试如下

view.setVideoURI(Uri.parse(path));
view.requestFocus();
view.setOnPreparedListener(new OnPreparedListener() {

        @Override
        public void onPrepared(MediaPlayer mp) {
         //start playing here
         mp.start();
        }
}

希望对你有帮助。

【讨论】:

  • 这似乎是我的解决方案。可能是因为在我的情况下,视图还没有从一开始就出现在舞台上。
  • 是的,只需阅读 VideoView 文档,它会指定以下内容: [OnPreparedListener] 注册一个回调,以便在媒体文件加载并准备就绪时调用。这解释了你之前的声明,你说你在一分钟前看到了视频。视频一定是在某个时候加载得更快了。
【解决方案2】:

提供一个代码 sn-p 将帮助我们找出您的问题,但这里就是这样。

由于您在 Activity 中实现此功能,因此您应该能够从布局中访问 VideoView。因此我假设你应该能够做这样的事情......

String video_url = "some_url";
VideoView videoView = (VideoView)findViewById(R.id.video_view_id);
MediaController controls = new MediaController(YourActivityClassName.this);
videoView.setMediaController(controls);
videoView.setVideoURI(Uri.parse(video_url));
videoView.start();

希望这对您有所帮助。如果没有,请告诉我们,我们可以为您提供进一步的帮助。

附:查看 android 文档以获取有关 videoview 的更多信息: http://developer.android.com/reference/android/widget/VideoView.html

【讨论】:

  • 仅供参考,我确实声明我从意图中获得了内容 Uri,我没有链接到远程或本地视频文件的此类字符串。我对 VideoView 的理解没有问题,只是不知道如何正确加载该视频。
  • 嗯,您从意图中检索的 Uri 对象中的原始数据是什么?也许这可以帮助缩小问题范围。
  • 我不太确定,但就在一分钟前,我真的看到了一个视频。但总的来说是黑色的。我很困惑。我会告诉你的;)
【解决方案3】:

您可能需要调用 videoView.play() 来查看您的 uri 是否正确。

【讨论】:

  • VideoView 没有 play() 方法。就像我在上面的答案中提到的那样,它被称为 start()
猜你喜欢
  • 2021-08-08
  • 2020-05-02
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多