91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 18KB
    文件類型: .zip
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2021-05-04
  • 語言: 其他
  • 標簽: RTP??H264??H265??

資源簡介

1、H264的RTP組包和拆包,主要是對于單幀包和FU-A包的處理;
2、H265的RTP組包和拆包,主要是對于單幀包和FU-A包的處理;
3、H264和H265的SPS數(shù)據(jù)解析;

資源截圖

代碼片段和文件信息

#include?“H2645ParseSPS.h“
#include?
#include?
#include?
#include?

typedef?unsigned?char?BYTE;
typedef?int?INT;
typedef?unsigned?int?UINT;

typedef?struct
{
const?BYTE?*data;???//sps數(shù)據(jù)
UINT?size;??????????//sps數(shù)據(jù)大小
UINT?index;?????????//當前計算位所在的位置標記
}?sps_bit_stream;

static?BYTE?*ff_avc_find_startcode_internal(BYTE?*p?BYTE?*end)
{
BYTE?*a?=?p?+?4?-?((long?long)p?&?3);

for?(end?-=?3;?p? {
if?(p[0]?==?0?&&?p[1]?==?0?&&?p[2]?==?1)
return?p;
}

for?(end?-=?3;?p? {
UINT?x?=?*(const?UINT*)p;
//??????if?((x?-?0x01000100)?&?(~x)?&?0x80008000)?//?little?endian
//??????if?((x?-?0x00010001)?&?(~x)?&?0x00800080)?//?big?endian
if?((x?-?0x01010101)?&?(~x)?&?0x80808080)
{?//?generic
if?(p[1]?==?0)
{
if?(p[0]?==?0?&&?p[2]?==?1)
return?p;
if?(p[2]?==?0?&&?p[3]?==?1)
return?p?+?1;
}
if?(p[3]?==?0)
{
if?(p[2]?==?0?&&?p[4]?==?1)
return?p?+?2;
if?(p[4]?==?0?&&?p[5]?==?1)
return?p?+?3;
}
}
}

for?(end?+=?3;?p? {
if?(p[0]?==?0?&&?p[1]?==?0?&&?p[2]?==?1)
return?p;
}

return?end?+?3;
}

static?BYTE?*ff_avc_find_startcode(BYTE?*p?BYTE?*end)
{
BYTE?*out?=?ff_avc_find_startcode_internal(p?end);
if?(p? out--;
return?out;
}




/**
移除H264的NAL防競爭碼(0x03)
@param?data?sps數(shù)據(jù)
@param?dataSize?sps數(shù)據(jù)大小
*/
static?void?del_emulation_prevention(BYTE?*data?UINT?*dataSize)
{
UINT?dataSizeTemp?=?*dataSize;
for?(UINT?i?=?0?j?=?0;?i<(dataSizeTemp?-?2);?i++)?
{
int?val?=?(data[i]?^?0x0)?+?(data[i?+?1]?^?0x0)?+?(data[i?+?2]?^?0x3);????//檢測是否是競爭碼
if?(val?==?0)?
{
for?(j?=?i?+?2;?j {????//移除競爭碼
data[j]?=?data[j?+?1];
}

(*dataSize)--;??????//data?size?減1
}
}
}

static?void?sps_bs_init(sps_bit_stream?*bs?const?BYTE?*data?UINT?size)
{
if?(bs)
{
bs->data?=?data;
bs->size?=?size;
bs->index?=?0;
}
}

/**
是否已經(jīng)到數(shù)據(jù)流最后

@param?bs?sps_bit_stream數(shù)據(jù)
@return?1:yes,0:no
*/
static?INT?eof(sps_bit_stream?*bs)
{
return?(bs->index?>=?bs->size?*?8);????//位偏移已經(jīng)超出數(shù)據(jù)
}

/**
讀取從起始位開始的BitCount個位所表示的值

@param?bs?sps_bit_stream數(shù)據(jù)
@param?bitCount?bit位個數(shù)(從低到高)
@return?value
*/
static?UINT?u(sps_bit_stream?*bs?BYTE?bitCount)
{
UINT?val?=?0;
for?(BYTE?i?=?0;?i {
val?<<=?1;
if?(eof(bs))
{
val?=?0;
break;
}
else?if?(bs->data[bs->index?/?8]?&?(0x80?>>?(bs->index?%?8)))?
{?????//計算index所在的位是否為1
val?|=?1;
}
bs->index++;??//遞增當前起始位(表示該位已經(jīng)被計算,在后面的計算過程中不需要再次去計算所在的起始位索引,缺點:后面每個bit位都需要去位移)
}

return?val;
}

/**
讀取無符號哥倫布編碼值(UE)
#2^LeadingZeroBits?-?1?+?(xxx)
@param?bs?sps_bit_stream數(shù)據(jù)
@return?value
*/
static?UINT?ue(sps_bit_stream?*bs)
{
UINT?zeroNum?=?0;
while?(u(bs?1)?==?0?&&?!eof(bs)?&&?zeroNum? {
zeroNum++;
}

return?(UINT)((1?<}

/**
讀取有符號哥倫布編碼值(SE)
#(-1)^(k+1)?*?Ceil(k/2)

@param?bs?sps_bit_stream數(shù)據(jù)
@re

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-06-19?16:22??rtp解包組包\
?????文件???????19974??2019-03-15?15:04??rtp解包組包\H2645ParseSPS.cpp
?????文件?????????730??2019-03-14?14:40??rtp解包組包\H2645ParseSPS.h
?????文件???????10938??2019-04-02?18:53??rtp解包組包\ParseSPS.cpp
?????文件?????????435??2019-04-02?18:56??rtp解包組包\ParseSPS.h
?????文件????????1984??2019-03-19?14:18??rtp解包組包\RTPProcessor.cpp
?????文件????????1880??2019-04-02?11:36??rtp解包組包\RTPProcessor.h
?????文件???????11221??2019-03-21?20:39??rtp解包組包\RTPRecvProcessor.cpp
?????文件????????1023??2019-03-15?11:27??rtp解包組包\RTPRecvProcessor.h
?????文件????????7668??2019-03-26?11:47??rtp解包組包\RTPSendProcessor.cpp
?????文件????????1007??2019-03-14?10:29??rtp解包組包\RTPSendProcessor.h

評論

共有 條評論