RTP 海康

RTMP/RTP/RTSP/RTCP的区别

ps流提取H264并解码播放

从海康7816的ps流里获取数据h264数据

对海康28181摄像头PS流解码的支持(三)

解析海康摄像机推送的PS流(节目流)

RTP协议全解析(H264码流和PS流)

海康PS流提取数据:000001ba 视频流包头 000001e0视频数据包 000001c0音频数据包

bool GetH246FromPS(IN BYTE* pBuffer, IN int nBufLenth, BYTE** pH264, int& nH264Lenth, BOOL& bVideo,BOOL& bAudio)
{
    if (!pBuffer || nBufLenth <= 0)
    {
        return FALSE;
    }
 
    BYTE* pH264Buffer = NULL;
    int nHerderLen = 0;
 
    if (pBuffer
        && pBuffer[0] == 0x00
        && pBuffer[1] == 0x00
        && pBuffer[2] == 0x01
        && pBuffer[3] == 0xE0)//E==视频数据(此处E0标识为视频)
    {
        bVideo = TRUE;
        bAudio = FALSE;
        nHerderLen = 9 + (int)pBuffer[8];//9个为固定的数据包头长度,pBuffer[8]为填充头部分的长度
        pH264Buffer = pBuffer + nHerderLen;
        if (*pH264 == NULL)
        {
            *pH264 = new BYTE[nBufLenth];
        }
        if (*pH264&&pH264Buffer && (nBufLenth - nHerderLen)>0)
        {
            memcpy(*pH264, pH264Buffer, (nBufLenth - nHerderLen));
        }
        nH264Lenth = nBufLenth - nHerderLen;
        return TRUE;
    }
    else if (pBuffer
        && pBuffer[0] == 0x00
        && pBuffer[1] == 0x00
        && pBuffer[2] == 0x01
        && pBuffer[3] == 0xC0) //C==音频数据?
    {
        *pH264 = NULL;
        nH264Lenth = 0;
        bVideo = FALSE;
        bAudio = TRUE;
        //BYTE * pOutBuffer = NULL;
        nHerderLen = 9 + (int)pBuffer[8];//9个为固定的数据包头长度,pBuffer[8]为填充头部分的长度
        pH264Buffer = pBuffer + nHerderLen;
        if (*pH264 == NULL)
        {
            *pH264 = new BYTE[nBufLenth];
        }
        if (*pH264&&pH264Buffer && (nBufLenth - nHerderLen)>0)
        {
            memcpy(*pH264, pH264Buffer, (nBufLenth - nHerderLen));
        }
        nH264Lenth = nBufLenth - nHerderLen;
        return TRUE;
    }
    else if (pBuffer
        && pBuffer[0] == 0x00
        && pBuffer[1] == 0x00
        && pBuffer[2] == 0x01
        && pBuffer[3] == 0xBA)//视频流数据包 包头
    {
        bVideo = TRUE;
        *pH264 = NULL;
        nH264Lenth = 0;
        return FALSE;
    }
    return FALSE;
}

ffmpeg处理海康ps流


rtsp sdp解释:

用实例分析H264 RTP payload

当 packetization-mode 的值为 0 时或不存在时, 必须使用单一 NALU 单元模式.
当 packetization-mode 的值为 1 时必须使用非交错(non-interleaved)封包模式.

当 packetization-mode 的值为 2 时必须使用交错(interleaved)封包模式.

每个打包方式允许的NAL单元类型总结(yes = 允许, no = 不允许, ig = 忽略)
      Type   Packet    Single NAL    Non-Interleaved    Interleaved
                       Unit Mode           Mode             Mode
      -------------------------------------------------------------

      0      undefined     ig               ig               ig
      1-23   NAL unit     yes              yes               no
      24     STAP-A        no              yes               no
      25     STAP-B        no               no              yes
      26     MTAP16        no               no              yes
      27     MTAP24        no               no              yes
      28     FU-A          no              yes              yes
      29     FU-B          no               no              yes
      30-31  undefined     ig               ig               ig

这个参数不可以取其他的值.

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值