android解码判断H264的I帧

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方法只是用来打印看看是不是有错误

嗯,就是这样子

猜你喜欢

转载自blog.csdn.net/qq_26617627/article/details/52786001