当前位置: 代码迷 >> 综合 >> 全网首发:为什么解码器长时间没有画面?如何解决?
  详细解决方案

全网首发:为什么解码器长时间没有画面?如何解决?

热度:48   发布时间:2024-01-30 04:41:52.0

  吾手机进入FreeSwitch,经常长时间没有画面。吾于是经常频繁退出、进入,试图出现画面。很难出现。

  今天在外面爬山时,然后想起这事。之所以没画面,跟关键帧有关。之前为了解决终端互通问题,吾使用了一个多次发关键帧的办法。那么进会议室能不能如此呢?

  • 会议室多次发关键帧。这个改起来比较麻烦。
  • 终端收到关键帧再干活。这个比较方便。

  吾首先在终端这边进行了处理,效果非常好。进入会议室后,终端的画面马上就解码成功。代码大家可以参考一下:

	private Surface videoSurface;private AndroidVideoDecoder videoDecoder;private MediaCodecData mInputData;private MediaCodecData mOutputData;private byte[] dataBuffer;private byte[] dataBufferKeyFrame;private void decodeData(final byte[] data, final int dataSize){mInputData.setData(data, dataSize);int result = videoDecoder.process(mInputData, mOutputData);if (result != -1){mWidth = videoDecoder.getWidth();mHeight= videoDecoder.getHeight();}}private void onDataReceived(final byte[] dataBuffer, final int dataSize){if ((dataBuffer[4]&0x1F) == 0x07){if (videoSurface == null){dataBufferKeyFrame = new byte[dataSize];System.arraycopy(dataBuffer, 0, dataBufferKeyFrame, 0, dataSize);return;}}else{if (videoDecoder == null){return;}}if (videoDecoder == null){videoDecoder = new AndroidVideoDecoder(videoSurface, mWidth, mHeight);mInputData   = new MediaCodecData(mWidth, mHeight);mOutputData  = new MediaCodecData(mWidth, mHeight);if (dataBufferKeyFrame != null){decodeData(dataBufferKeyFrame, dataBufferKeyFrame.length);dataBufferKeyFrame = null;}}decodeData(dataBuffer, dataSize);}

 

  相关解决方案