我正在使用
然而,在使用新格式和相同的
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...
video/avc
)不支持它(至少在我测试的设备上不支持)。但知道这样的 API 存在还是很好的。 - Roberto Andrade