Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.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
Android Mediacodec用于在线视频编码_Android_Android Mediacodec_Mediamuxer - Fatal编程技术网

Android Mediacodec用于在线视频编码

Android Mediacodec用于在线视频编码,android,android-mediacodec,mediamuxer,Android,Android Mediacodec,Mediamuxer,我能够实现一个基于grafika的CameraCaptureActivity录制视频的代码。现在我可以记录自己从1数到10,但当我去看录制的视频时,我说的是1,3,8,9,也就是说我错过了一些要录制的帧。曲面已配置为: private static int VIDEO_WIDTH = 720; // dimensions for 720p video private static int VIDEO_HEIGHT = 1280; private static int DESIRED_PREVI

我能够实现一个基于grafika的CameraCaptureActivity录制视频的代码。现在我可以记录自己从1数到10,但当我去看录制的视频时,我说的是1,3,8,9,也就是说我错过了一些要录制的帧。曲面已配置为:

private static int VIDEO_WIDTH = 720;  // dimensions for 720p video
private static int VIDEO_HEIGHT = 1280;
private static int DESIRED_PREVIEW_FPS = 30; 
还有编码器

format.SetInteger(MediaFormat.KeyColorFormat, (int)MediaCodecCapabilities.Formatsurface);
format.SetInteger(MediaFormat.KeyBitRate, 100000);
format.SetInteger(MediaFormat.KeyFrameRate, 30);
format.SetInteger(MediaFormat.KeyIFrameInterval, 5);
宽度:310,高度:310

我的问题是比特率吗?我应该设置哪些值,以便接收编码器记录的我显示的每个帧?
谢谢。

我见过MediaMuxer在向磁盘写入数据时暂停1秒以上,但通常不会以较低的比特率(Grafika使用的1Mbps比特率应该可以),而且它们通常相隔几秒。所以我不确定这是否是你面临的问题

这里有一篇关于MediaMuxer问题的博文:。简而言之,MediaMuxer写入暂停,因此没有帧从MediaCodec编码器中拉出。最终,MediaCodec耗尽缓冲区,无法再接收任何输入,因此相机开始丢弃帧

用标签包装MediaMuxer调用将有助于缩小范围。我们的想法是将编码设置中所有“有趣”的调用括在
beginstation()
/
endSection()
调用中,并使用
--app
标记()收集systrace输出。查看systrace输出将向您显示每个函数需要多长时间,显示每个函数运行在哪些线程上,并帮助您确定调用阻塞和其他线程不足的区域


完全有可能发生了其他事情,但这是一个很好的开始。

我看到MediaMuxer在向磁盘写入数据时暂停了1秒以上,但通常不会以较低的比特率(Grafika使用的1Mbps比特率应该可以),而且它们通常相隔几秒。所以我不确定这是否是你面临的问题

这里有一篇关于MediaMuxer问题的博文:。简而言之,MediaMuxer写入暂停,因此没有帧从MediaCodec编码器中拉出。最终,MediaCodec耗尽缓冲区,无法再接收任何输入,因此相机开始丢弃帧

用标签包装MediaMuxer调用将有助于缩小范围。我们的想法是将编码设置中所有“有趣”的调用括在
beginstation()
/
endSection()
调用中,并使用
--app
标记()收集systrace输出。查看systrace输出将向您显示每个函数需要多长时间,显示每个函数运行在哪些线程上,并帮助您确定调用阻塞和其他线程不足的区域


完全有可能发生了其他事情,但这是一个很好的开始。

文章不错。我来看看!谢谢法登!好文章。我来看看!谢谢法登!