Android MediaCodec格式分辨率更改中期

Android MediaCodec格式分辨率更改中期,第1张

概述我正在通过MediaCodec处理实时流,并遇到MediaFormat在中间流更改的情况(即:正在解码的视频的分辨率发生变化).假设我将解码器附加到Surface上以在检测到输入流的分辨率变化后立即对其进行渲染,则在向其提供新的分辨率缓冲区(为它提供适当的新MediaFormat)之前,我会重新创建解码器.

我正在通过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格式/分辨率更改中期所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1079994.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存