2016-10-06 71 views
0

我正在使用libstreaming。需要帮助将高清视频流保存到文件

我想发起两个MediaCodec与不同的设置和比特率(一个低质量 - 这将通过HTTP传输和一个高保存到SDCARD)。

问题似乎是,我无法抓住两个单独的Mediacodec对象具有不同的设置。

高比特率版本被保存为只包含绿色背景*的视频,除非尺寸设置为< 352x288,但低比特率版本已成功(并正确)流式传输到网络。

我真的很希望我做了明显错误的事情,并且有一种简单的方法可以将HD版本的流保存到磁盘。

code block where I initiate the MediaCodecs

回答

1

一般情况下,这应该在大多数设备上工作 - 我做没有对一些设备的问题。

但是有些设备的编码器驱动程序对此有限制 - 特别是一些英特尔设备拒绝创建第二个编码器实例,而其中一个设备处于活动状态。 (三星Galaxy Note 3 10.1让人想起 - 不知道是否所有其他基于英特尔的都有相同的问题,或只有其中一些。)

不幸的是,即使Android CTS测试有测试,以确保硬件编码器工程,没有测试可以确保您可以同时有多个编码器处于活动状态。

只有在第二个编码器上有不同的设置,或者它们的设置相同时,您的情况才会失败吗?

如果一个数据流的分辨率较低,则可以尝试使用SW编码器,而使用高分辨率版本的HW编码器。在Android 6.0上,SW编码器OMX.google.h264.encoder应该是相当不错的,而在旧版本中,它几乎不可用。

+0

非常感谢......会按照您的建议回报。在回答关于案例失败的问题时 - 是的 - 只有在设置不同时才会失败。当分辨率小于某个(相当小)的数字时,本地版本可以正确保存。 –

+0

嗯,对。小心告诉这是什么设备,什么分辨率组合工作,哪些不?它也可能对编码器硬件可用的总内存造成某种限制。例如。如果您在max时可以编码一个1080p的数据流,那么您可以编码720p +低分辨率的数据流,只要它们的总内存使用率均不超过单个1080p数据流的使用量即可。 – mstorsjo