如何在"MediaStore.ACTION_VIDEO_CAPTURE"中将编解码器设置为H.264



我想录制一段视频并将其发送到服务器。它必须是H.264mp4,因此服务器不必转换它,并且它可以在web上显示。

这就是我目前创建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。

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

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

正如你已经意识到的,在安卓系统中,操作通常可以通过两种方式进行:;简单的";一个是,在这种情况下,通常通过Intent请求默认相机应用程序生成视频;强大的";一个,通常通过API,在本例中为MediaRecorder API。

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

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

如果你的用例非常具体,以至于你总是知道将使用哪个相机应用程序(即你是设备的制造商,或者你的用例只允许一个特定型号和自定义安卓版本的硬件(,并且你碰巧知道你的相机应用程序确实支持通过一些自定义EXTRA值指定视频编解码器,您也可以尝试将其传递到Intent数据中。遗憾的是,我担心这对普通的智能手机目标不起作用(即,你不知道会处理你意图的相机应用程序(。

相关内容

最新更新