android解码的时候,从TCP的socket处获取到了流,
再把流送到解码器去解码,中间有个过程就是要判断
一下流中的I帧,不然播放出来就是花屏了,如何判断I
帧,不多说,上源码:
public class CheckIFrame {
public static boolean isIFrame(byte[] data) {
if( data == null || data.length < 5) {
return false;
}
Log.i("IFrame", "data0:"+toHex(data[0])+"--data[1]:"+toHex(data[1])+"--data[2]:"+toHex(data[2])+
"--data3:"+toHex(data[3])+"--data4:"+toHex(data[4]));
if (data[0] == 0x0
&& data[1] == 0x0
&& data[2] == 0x0
&& data[3] == 0x1
&& data[4] == 0x67) {
Log.d("IFrame", "check I frame data: " + Arrays.toString(Arrays.copyOf(data, 5)));
return true;
}
byte nalu = data[4];
return ((nalu & 0x1F) == 5) ? true : false;
}
public static String toHex(byte b) {
String result = Integer.toHexString(b & 0xFF);
if (result.length() == 1) {
result = '0' + result;
}
return result;
}
}
ToHex方法只是用来打印看看是不是有错误
嗯,就是这样子