【问题标题】:How to set codec to H.264 in `MediaStore.ACTION_VIDEO_CAPTURE` ? ( Android )如何在 `MediaStore.ACTION_VIDEO_CAPTURE` 中将编解码器设置为 H.264? ( 安卓 )
【发布时间】:2020-10-19 08:52:58
【问题描述】:

我想录制视频并将其发送到服务器。必须是H.264mp4,所以服务器不用转换,可以在网页上显示。

这是我目前创建 Intent 的方式:

Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
    startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
}

可以,但是我不知道如何将编解码器设置为H.264,或者如何检测默认编解码器。我能够找到MediaRecorder 的解决方案,但我想避免使用它,因为这对我的需求来说太复杂了,我不想为此构建一个录像机 gui。 MediaStore.ACTION_VIDEO_CAPTURE 将是完美的,因为用户可以录制/重播视频,取消或重试录制,而无需从我的网站进行任何额外的编程(和可能的错误),我只需在 onActivityResult 中取回视频 uri。

【问题讨论】:

    标签: java android android-camera mediastore


    【解决方案1】:

    不幸的是,似乎没有指定要使用的编解码器的方法。从https://developer.android.com/reference/android/provider/MediaStore#ACTION_VIDEO_CAPTURE 可以看到,支持的EXTRA 与输出Uri、持续时间和大小限制以及简单的质量值(0 低质量,1 高质量)有关。

    这是故意的;发送 Intent 将导致启动一个未知的(在编译时)应用程序,该应用程序可能支持也可能不支持所需的所有功能。此外,由于涉及到外部应用程序,因此必须建立的参数值范围越少,实现起来就越容易。

    正如您已经意识到的那样,在 Android 中操作通常可以通过两种方式执行:一种“简单”,在这种情况下要求默认相机应用生成视频,通常通过 Intent 的方式,以及“强大”一种,通常通过 API,在本例中是 MediaRecorder API。

    恐怕如果你不能成功地使用简单的方法,你将不得不走艰难的路;通常一些样板代码可以很容易地在网上找到。

    不过,对于您的具体情况,我会让外部应用程序完成捕获视频文件的繁重工作,然后检查 H.264 是否是已使用的编解码器(很可能是,恕我直言)。如果不是,您可以解决这个问题:根据您的用例,请用户(如果他/她足够了解)尝试更改录制应用程序中的设置,或者您可以通过第三方在您的应用程序中实现某种形式的视频转码-派对图书馆。

    如果您的用例非常具体,以至于您始终知道将使用哪个相机应用程序(即您是设备制造商,或者您的用例仅允许使用一种特定型号和自定义 android 版本的硬件),并且您碰巧知道您的相机应用程序确实支持通过一些自定义 EXTRA 值指定视频编解码器,您也可以尝试在 Intent 数据中传递它。唉,恐怕这不适用于通用智能手机目标(即您不知道会碰巧处理您的意图的相机应用程序)。

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多