【发布时间】:2021-03-16 23:52:32
【问题描述】:
我正在使用异步 Android MediaCodec 解码通过 websocket 接收的 H.264 视频数据。
我的问题是当没有新的编码数据要解码时如何处理输入缓冲区?
目前,当没有来自 websocket 的新编码数据时,我将没有任何数据的输入缓冲区排队:
override fun onInputBufferAvailable(codec: MediaCodec, index: Int) {
if (videoFrames.isNotEmpty()) {
val inputBuffer = codec.getInputBuffer(index)
inputBuffer?.put(videoFrames.removeFirst())
codec.queueInputBuffer(index, 0, currentFrame.size, 0, 0)
} else {
codec.queueInputBuffer(index, 0, 0, 0, 0)
}
}
其中videoFrames 是带有编码视频数据的帧列表。
我这样做是因为如果我删除 else 子句并且不对空输入缓冲区进行排队,则输入缓冲区将永远不会再次可用。
是否有不同的处理方式?对空输入缓冲区进行排队对我来说感觉不对。
【问题讨论】:
标签: android android-mediacodec