Android 4.3 jelly bean 输入为表面的媒体编解码器API不适用于H264编码器(bigflake示例代码)
我正在尝试运行4.3版本中带有H264编码器的媒体编解码器API的示例代码,在下面的bigflake链接中进行了解释 我面临以下问题。 ->在H264编码器代码中,颜色格式、高度和宽度没有得到更新,因为getpatameter实现中存在问题。所以我应用了这个补丁()。 ->应用补丁后,编码器也不编码 ->我见过这样的观察 D/CameraToMpegTest(3421):编码器输出格式更改:{csd-1=java.nio.ByteArrayBuffer[position=0,limit=8,capacity=8],height=144,mime=video/avc,csd-0=java.nio.ByteArrayBuffer[position=0,limit=12,capacity=12],what=1869968451,width=176} 所以为什么这个值会改变,不知道。。。 之后,我们总是看到编码器将queueOutputBuffer的状态作为INFO\u重试\u稍后。 因此,它创建了文件,但没有对任何内容进行编码,它会停止 I/MPEG4Writer(3421):接收的总长度为/0(0/0)的缓冲区和编码的0帧。-录像带 D/MPEG4Writer(3421):停止视频曲目 D/MPEG4Writer(3421):停止视频曲目源 D/MPEG4Writer(3421):视频曲目已停止 D/MPEG4Writer(3421):停止写入线程 D/MPEG4Writer(3421):在最后一批中写入了0个块 D/MPEG4Writer(3421):写入线程已停止 所以,在我的理解,它应该工作,但看起来仍然编码器没有得到正确配置 请在这方面提供指导。。。 谢谢 Nehal在Android 4.3中,“编码器输出格式更改”消息是正常的。这就是编码器如何为您提供带有csd-0/csd-1键的Android 4.3 jelly bean 输入为表面的媒体编解码器API不适用于H264编码器(bigflake示例代码),android-4.3-jelly-bean,android-mediacodec,muxer,Android 4.3 Jelly Bean,Android Mediacodec,Muxer,我正在尝试运行4.3版本中带有H264编码器的媒体编解码器API的示例代码,在下面的bigflake链接中进行了解释 我面临以下问题。 ->在H264编码器代码中,颜色格式、高度和宽度没有得到更新,因为getpatameter实现中存在问题。所以我应用了这个补丁()。 ->应用补丁后,编码器也不编码 ->我见过这样的观察 D/CameraToMpegTest(3421):编码器输出格式更改:{csd-1=java.nio.ByteArrayBuffer[position=0,limit=8,c
MediaFormat
,这是MediaMuxer#addTrack()
所需的
Bug 58834用于VP8软件编码器;硬件AVC编解码器不需要这些补丁
INFO\u请稍后再试
最常见的原因是缺少输入。编码器可能会在生成任何输出之前将相当数量的输入帧排队,因此您不能只提交一帧,然后等待输出出现。打开VERBOSE
标志,确保正在提交帧。在Android 4.3中,“编码器输出格式已更改”消息是正常的。这就是编码器如何为您提供带有csd-0/csd-1键的MediaFormat
,这是MediaMuxer#addTrack()
所需的
Bug 58834用于VP8软件编码器;硬件AVC编解码器不需要这些补丁
INFO\u请稍后再试
最常见的原因是缺少输入。编码器可能会在生成任何输出之前将相当数量的输入帧排队,因此您不能只提交一帧,然后等待输出出现。打开VERBOSE
标志,确保正在提交帧。我已尝试在Android 4.3 emulator上运行CameraToMpegTest示例。正如您现在已经意识到的,它不会像现在这样工作,需要一些修复
我已经尝试在Android 4.3模拟器上运行CameraToMpegTest示例。正如您现在已经意识到的,它不会像现在这样工作,需要一些修复
作为代码片段,您应该删除
th.join()代码>
它对我很有用。作为代码片段,您应该删除th.join()代码>
这对我来说很好。谢谢你提供的信息。然而,csd-0/csd-1消息显示的是衍射高度、宽度和比特率,而不是我们设置的。在这里,我也尝试软件AVC,所以你知道任何其他修复需要。关于帧队列,我将检查并向您通报。如果您有媒体编解码器的工作示例代码可以共享,那也太好了。bigflake.com上的代码是我的。编码器的大小和颜色格式在格式传递到configure()
时设置;在该点之后更改MediaFormat
对象不会产生任何效果。如果在调用MediaCodec#configure()
之前立即记录格式,您将看到与稍后看到的相同的维度。您好,Fadeen,我正在Emulator上尝试此示例。在此,我粘贴了我的代码。我已经更改了egl参数,因为它不能直接在emulator上工作。但是,我可以看到来自摄影机的帧,但是onfrmaeavailable没有被调用…如果忽略这个事实,假设编码器有空帧可用,但它仍然没有编码…请查找下面的代码。我强烈建议使用物理设备处理媒体内容。我已经对EGL配置进行了更改。我还没有在模拟器上尝试过任何示例。谢谢您提供的信息。然而,惩教署
/** Entry point. */
public static void runTest(CameraToMpegTest obj) throws Throwable {
CameraToMpegWrapper wrapper = new CameraToMpegWrapper(obj);
Thread th = new Thread(wrapper, "codec test");
th.start();
// th.join();
if (wrapper.mThrowable != null) {
throw wrapper.mThrowable;
}
}