我正在通过MediaCodec处理实时流,并遇到MediaFormat在中间流更改的情况(即:正在解码的视频的分辨率发生变化).假设我将解码器附加到Surface上以在检测到输入流的分辨率变化后立即对其进行渲染,则在向其提供新的分辨率缓冲区(为它提供适当的新MediaFormat)之前,我会重新创建解码器.
我遇到了一些奇怪的错误,这些错误并没有给我太多有关可能出什么问题的信息,即在使用新格式和相同的Surface调用MediaCodec.configure时:
androID.media.MediaCodec$CodecException: Error 0xffffffea at androID.media.MediaCodec.native_configure(Native Method) at androID.media.MediaCodec.configure(MediaCodec.java:577)
在获取CodecException.getDiagnosticInfo时,它什么都没显示出我可以真正用来理解失败原因的东西:androID.media.MediaCodec.error_neg_22
我还注意到了日志中的以下内容,并找到了一些相关信息,并且想知道是否需要针对Surface本身做一些事情(例如将其与解码器的旧实例分离,将其交给新的).
07-09 15:00:17.217 E/BufferQueueProducer( 139): [SurfaceVIEw] connect(P): already connected (cur=3 req=3)07-09 15:00:17.217 E/MediaCodec( 5388): native_window_API_connect returned an error: InvalID argument (-22)07-09 15:00:17.218 E/MediaCodec( 5388): configure Failed with err 0xffffffea, resetting...
解决方法:
看起来像调用stop()和release()以及重新初始化我对getinputBuffers()和getoutputBuffers()的所有引用都可以达到目的.至少我没有收到消息/异常了.现在,我只需要弄清楚Surface参考零件,因为调整大小的流(当分辨率更改时)似乎仍然适合原始曲面尺寸,而不是针对新的分辨率调整Surface.
总结以上是内存溢出为你收集整理的Android MediaCodec格式/分辨率更改中期全部内容,希望文章能够帮你解决Android MediaCodec格式/分辨率更改中期所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)