Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在“MediaStore.ACTION\u VIDEO\u CAPTURE”中将编解码器设置为H.264?(安卓)_Java_Android_Android Camera_Mediastore - Fatal编程技术网

Java 如何在“MediaStore.ACTION\u VIDEO\u CAPTURE”中将编解码器设置为H.264?(安卓)

Java 如何在“MediaStore.ACTION\u VIDEO\u CAPTURE”中将编解码器设置为H.264?(安卓),java,android,android-camera,mediastore,Java,Android,Android Camera,Mediastore,我想录制一段视频并将其发送到服务器。它必须是H.264mp4,因此服务器不必转换它,它可以显示在web上 这就是我目前创建意图的方式: Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); if (takeVideoIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takeVideoIntent,

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

这就是我目前创建意图的方式:

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

它可以工作,但我不知道如何将编解码器设置为
H.264
,或者如何检测默认编解码器。我能够为找到解决方案,但我希望避免使用它,因为这对于我的需求来说太复杂了,我不想为此构建一个录像机gui。
MediaStore.ACTION\u VIDEO\u CAPTURE
将是完美的,因为用户可以录制/重播视频、取消或重试录制,而无需从我的网站进行任何额外编程(以及可能的bug),我只是在ActivityResult中返回视频uri,不幸的是,似乎没有指定要使用的编解码器的方法。从中可以看到,支持的附加项与输出Uri、持续时间和大小限制以及简单的质量值(0低质量,1高质量)相关

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

正如您已经意识到的,在Android中,操作通常可以通过两种方式执行:一种是“简单”的,在本例中要求默认的摄像头应用程序生成视频,通常是通过意图;另一种是“强大”的,通常是通过API,在本例中是MediaRecorder API

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

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

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