筆記---H.264里的SEI

給公司的直播推流框架加上了攜帶SEI的功能偏序,做完了記錄一下
這個(gè)東西使用場(chǎng)景挺廣的,比如直播中的動(dòng)畫(huà)效果,直接渲染到畫(huà)面上可能會(huì)引起性能消耗吩案,不如通過(guò)SEI告訴給觀眾,由觀眾端做出UI響應(yīng)帝簇,既能保持直播畫(huà)面和效果同步出現(xiàn)徘郭,又能減少主播端的性能消耗,其次丧肴,對(duì)于音頻視頻文件資源残揉,可以通過(guò)SEI在視頻中埋入版權(quán)等信息。

H264編碼由兩個(gè)部分組成(VCL和NAL)


畫(huà)面幀首先要經(jīng)過(guò) 視頻編碼層面(VCL) 被編碼層切割成宏塊芋浮,這不是本篇記錄的重點(diǎn)抱环,不展開(kāi)講


之后這些塊會(huì)被 網(wǎng)絡(luò)抽象層面(NAL) 分割成多個(gè)NALU塊

NAL NAL NAL NAL ...

這些NAL塊里一部分是裝著上面切割的畫(huà)面數(shù)據(jù),一部分裝著描述這個(gè)視頻的參數(shù)數(shù)據(jù)(輸序列參數(shù)集和圖像參數(shù)集等等)


接著拆
每個(gè)NAL又可以拆成NAL HeaderRBSP

NAL Header RBSP NAL Header RBSP ...

其中NAL Header描述了這個(gè)NAL的類型及攜帶了什么樣的參數(shù)纸巷,RBSP則是這個(gè)NAL攜帶的內(nèi)容

NAL Header的位圖如下

NAL Header 摘自go_str博客

1江醇、F(forbiden):禁止位,占用NAL頭的第一個(gè)位何暇,當(dāng)禁止位值為1時(shí)表示語(yǔ)法錯(cuò)誤陶夜;
2、NRI:參考級(jí)別裆站,占用NAL頭的第二到第三個(gè)位条辟;值越大黔夭,該NAL越重要。
3羽嫡、Type:Nal單元數(shù)據(jù)類型本姥,也就是標(biāo)識(shí)該NAL單元的數(shù)據(jù)類型是哪種,占用NAL頭的第四到第8個(gè)位杭棵;
(摘自go_str博客

其中我們比較關(guān)注的是其中的后5位婚惫,即NAL Type

nal_type 摘自go_str博客

其中Type = 6 表示該NAL攜帶的是輔助增強(qiáng)信息(SEI)

由上面NAL Header的位圖可知,Type=6時(shí)魂爪,NAL Header的 頭是

   00 00 00 01          06 
   ___________          __
NAL起始(start code)   NAL Type

接下來(lái)是SEL的參數(shù)先舷,SEI信息包含幾個(gè)主要要素

· SEI payload type (該SEI遵循的語(yǔ)法)
· SEI payload size (該SEI所攜帶信息的長(zhǎng)度)
這里我們只討論SEI payloadType = 5的情況,即遵循user_data_unregistered()語(yǔ)法的SEI信息

· SEI payload uuid (SEI)
· SEI payload content
以及作為結(jié)尾的
· rbsp trailing bits (0x80)

一個(gè)個(gè)來(lái)講滓侍,首先是SEI payload type
他的解析方式為蒋川,持續(xù)讀取8bit,直到非0xff為止撩笆,然后把讀取的數(shù)值累加捺球,累加值即為SEI payload type。

payload type 摘自金山云

接在SEI payload type 后面的夕冲,即SEI payload size氮兵,讀取SEI payload size和payload type邏輯類似,仍然是讀取到非0xff為止歹鱼,這樣可以支持任意長(zhǎng)度的SEI payload添加泣栈。

那么按照以上邏輯,再拼上start code和NAL Type

   00 00 00 01          06           05              12
   ___________          __           ——              __
NAL起始(start code)   NAL Type  SEIPayloadType  SEIPayloadSize

即 00 00 00 01 06 05
以上就是一個(gè)遵循user_data_unregistered()語(yǔ)法醉冤、payloadContent長(zhǎng)度為18byte的SEI參數(shù)定義


定義好參數(shù)接下來(lái)就是內(nèi)容部分
首先user_data_unregistered()語(yǔ)法要求在SEI payload size之后的16byte作為SEI payload uuid秩霍,該uuid由用戶自定義篙悯,可以作為業(yè)務(wù)的標(biāo)識(shí)參數(shù)

01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04

因?yàn)閡uid固定為16蚁阳,所以SEI payload size的長(zhǎng)度必須大于等于16

然后就是SEI payload content,自由發(fā)揮鸽照,不要超過(guò)(content size - 16)即可螺捐,以0x00作為字符串結(jié)尾,

05 00

因?yàn)樯厦娑x的size = 18 ,所以這里只有2byte作為content

最后再給這條NAL拼上結(jié)束標(biāo)示

80

綜上所致矮燎,該條NAL的完整樣式即為

00 00 00 01 06 05 12 01 

02 03 04 01 02 03 04 01 

02 03 04 01 02 03 04 05 

00 80

到這里本篇的學(xué)習(xí)記錄就結(jié)束了

接下來(lái)要做的事就是把這條NAL在h.264編碼過(guò)程中混進(jìn)碼流里定血,然后塞進(jìn)RTMP,變成Message诞外,再切成Chunk澜沟,發(fā)出去就完事了……

至于接受端如何解析,我司有大佬修改ijkPlayer已經(jīng)實(shí)現(xiàn)了SEI信息的解析峡谊,本人暫時(shí)沒(méi)有研究到(太忙唉……)茫虽,排上日程刊苍,抽時(shí)間去拜讀一下源碼

很久沒(méi)有寫(xiě)文章了,感謝閱讀濒析,歡迎各位交流雅正

參考引用:
1.go_str的博客 入門理解H264編碼
2.金山云的博客 FFmpeg從入門到精通——進(jìn)階篇正什,SEI那些事兒

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市号杏,隨后出現(xiàn)的幾起案子婴氮,更是在濱河造成了極大的恐慌,老刑警劉巖盾致,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件主经,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡绰上,警方通過(guò)查閱死者的電腦和手機(jī)旨怠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蜈块,“玉大人鉴腻,你說(shuō)我怎么就攤上這事“俳遥” “怎么了爽哎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)器一。 經(jīng)常有香客問(wèn)我课锌,道長(zhǎng),這世上最難降的妖魔是什么祈秕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任渺贤,我火速辦了婚禮,結(jié)果婚禮上请毛,老公的妹妹穿的比我還像新娘志鞍。我一直安慰自己,他們只是感情好方仿,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布固棚。 她就那樣靜靜地躺著,像睡著了一般仙蚜。 火紅的嫁衣襯著肌膚如雪此洲。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天委粉,我揣著相機(jī)與錄音呜师,去河邊找鬼。 笑死贾节,一個(gè)胖子當(dāng)著我的面吹牛汁汗,可吹牛的內(nèi)容都是我干的趟紊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼碰酝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼霎匈!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起送爸,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤铛嘱,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后袭厂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體墨吓,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年纹磺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帖烘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡橄杨,死狀恐怖秘症,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情式矫,我是刑警寧澤乡摹,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站采转,受9級(jí)特大地震影響聪廉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜故慈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一板熊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧察绷,春花似錦干签、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)丹泉。三九已至情萤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摹恨,已是汗流浹背筋岛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晒哄,地道東北人睁宰。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓肪获,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親柒傻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子孝赫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345