日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

H264 推流到RTMP服务器

發布時間:2024/5/14 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 H264 推流到RTMP服务器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這段時間在搗騰基于?RTMP?協議的流媒體直播框架,其間參考了眾多博主的文章,剩下一些細節問題自行琢磨也算摸索出個門道,現將自己認為比較惱人的?AAC?音頻幀的推送和解析、H264?碼流的推送和解析以及網上沒說清楚的地方分享給各位。

????????RTMP?協議棧的實現,Bill?直接使用的?libRTMP,關于?libRTMP?的編譯、基本使用方法,以及簡單的流媒體直播框架,請參見博文[C++實現RTMP協議發送H.264編碼及AAC編碼的音視頻],言簡意賅,故不再贅述。

????????言歸正傳,我們首先來看看?AAC?以及?H264?的推送。

? ? ? ? 不論向?RTMP?服務器推送音頻還是視頻,都需要按照?FLV?的格式進行封包。因此,在我們向服務器推送第一個?AAC?或?H264?數據包之前,需要首先推送一個音頻?Tag?[AAC Sequence Header]?以下簡稱“音頻同步包”,或者視頻?Tag?[AVC Sequence Header]?以下簡稱“視頻同步包”。

?

AAC 音頻幀的推送 ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

????????我們首先來看看音頻?Tag,根據?FLV?標準?Audio Tags?一節的描述:

?

? ? ? ? 我們可以將其簡化并得到?AAC?音頻同步包的格式如下:

?

?

?

?

?

?

?

?

? ? ? ? 音頻同步包大小固定為?4?個字節。前兩個字節被稱為?[AACDecoderSpecificInfo],用于描述這個音頻包應當如何被解析。后兩個字節稱為?[AudioSpecificConfig],更加詳細的指定了音頻格式。

? ? ? ??[AACDecoderSpecificInfo]?倆字節可以直接使用?FAAC?庫的?faacEncGetDecoderSpecificInfo?函數來獲取,也可以根據自己的音頻源進行計算。一般情況下,雙聲道,44kHz?采樣率的?AAC?音頻,其值為?0xAF00,示例代碼:

?

?

?

????????根據?FLV?標準?不難得知,[AACDecoderSpecificInfo]?第?1?個字節高?4?位?|1010|?代表音頻數據編碼類型為?AAC,接下來?2?位?|11|?表示采樣率為?44kHz,接下來?1?位?|1|?表示采樣點位數?16bit,最低?1?位?|1|?表示雙聲道。其第二個字節表示數據包類型,0?則為?AAC?音頻同步包,1?則為普通?AAC?數據包。

? ? ? ? 音頻同步包的后兩個字節?[AudioSpecificConfig]?的結構,援引其他博主圖如下:

?

? ? ? ? 我們只需參照上述結構計算出對應的值即可。至此,4?個字節的音頻同步包組裝完畢,便可推送至?RTMP?服務器,示例代碼如下:

?

?

?

?

????????網上有博主說音頻采樣率小于等于?44100?時?SamplingFrequencyIndex?應當選擇?3(48kHz),Bill?測試發現采樣率等于?44100?時設置標記為?3?或?4?均能正常推送并在客戶端播放,不過我們還是應當按照標準規定的行事,故此處的?SamplingFrequencyIndex?選?4。

? ? ? ? 完成音頻同步包的推送后,我們便可向服務器推送普通的?AAC?數據包,推送數據包時,[AACDecoderSpecificInfo]?則變為?0xAF01,向服務器說明這個包是普通?AAC?數據包。后面的數據為?AAC?原始數據去掉前?7?個字節(若存在?CRC?校驗,則去掉前?9?個字節),我們同樣以一張簡化的表格加以闡釋:

?

?

?

?

? ? ? ? 推送普通?AAC?數據包的示例代碼:

?

?

?

?

????????至此,我們便完成了?AAC?音頻的推送流程。此時可嘗試使用?VLC?或其他支持?RTMP?協議的播放器連接到服務器測試正在直播的?AAC?音頻流。??? ?

?

?

H264 碼流的推送? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

????????前面提到過,向?RTMP?服務器發送?H264?碼流,需要按照?FLV?格式進行封包,并且首先需要發送視頻同步包?[AVC Sequence Header]。我們依舊先閱讀?FLV?標準?Video Tags?一節:

????????由于視頻同步包前半部分比較簡單易懂,仔細閱讀上述標準便可明白如何操作,故?Bill?不另作圖闡釋。由上圖可知,我們的視頻同步包?FrameType == 1,CodecID == 7,VideoData == AVCVIDEOPACKET,繼續展開?AVCVIDEOPACKET,我們可以得到?AVCPacketType == 0x00,CompositionTime == 0x000000,Data == AVCDecoderConfigurationRecord。

????????因此構造視頻同步包的關鍵點便是構造?AVCDecoderConfigurationRecord。同樣,我們援引其他博主的圖片來闡釋這個結構的細節:

????????其中需要額外計算的是?H264?碼流的?Sps?以及?Pps,這兩個關鍵數據可以在開始編碼?H264?的時候提取出來并加以保存,在需要時直接使用即可。具體做法請讀者自行?Google?或參見?參考博文[2],在此不再贅述。

????????當我們得到本次?H264?碼流的?Sps?以及?Pps?的相關信息后,我們便可以完成視頻同步包的組裝,示例代碼如下:

?

?

?

?

?

? ? ? ? 至此,視頻同步包便構造完畢并推送給?RTMP?服務器。接下來只需要將普通?H264?碼流稍加封裝便可實現?H264?直播,下面我們來看一下普通視頻包的組裝過程。

????????回顧?FLV?標準?的?Video Tags?一節,我們可以得到?H264?普通數據包的封包信息,FrameType ==?(H264 I?幀?? 1 : 2),CodecID == 7,VideoData == AVCVIDEOPACKET,繼續展開,我們可以得到 ?AVCPacketType == 0x01,CompositionTime?此處仍然設置為?0x000000,具體原因?TODO(billhoo),Data == H264 NALU Size + NALU Raw Data。

????????構造視頻數據包的示例代碼如下:

?

????????至此?H264?碼流的整個推送流程便已完成,我們可以使用?VLC?或其他支持?RTMP?協議的播放器進行測試。

?

關于 AAC 音頻幀及 H264 碼流的時間戳? ? ? ? ?

????????通過前文的步驟我們已經能夠將?AAC?音頻幀以及?H264?碼流正常推送到?RTMP?直播服務器,并能夠使用相關播放器進行播放。但播放的效果如何還取決于時間戳的設定。

????????在網絡良好的情況下,自己最開始使用的音頻流時間戳為?AAC?編碼器剛輸出一幀的時間,視頻流時間戳為?H264?編碼器剛編碼出來一幀的時間,VLC?播放端就頻繁報異常,要么是重新緩沖,要么直接沒聲音或花屏。在排除了推送步驟實現有誤的問題后,Bill?發現問題出在時間戳上。

????????之后有網友說直播流的時間戳不論音頻還是視頻,在整體時間線上應當呈現遞增趨勢。由于?Bill?最開始的時間戳計算方法是按照音視頻分開計算,而音頻時戳和視頻時戳并不是在一條時間線上,這就有可能出現音頻時戳在某一個時間點比對應的視頻時戳小, 在某一個時間點又跳變到比對應的視頻時戳大,導致播放端無法對齊。

????????目前采用的時間戳為底層發送?RTMP?包的時間,不區分音頻流還是視頻流,統一使用即將發送?RTMP?包的系統時間作為該包的時間戳。目前局域網測試播放效果良好,音視頻同步且流暢。

總結

以上是生活随笔為你收集整理的H264 推流到RTMP服务器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲制服无码 | 香蕉影院在线 | 一区精品视频在线观看 | 黑人巨大精品欧美一区免费视频 | 男人靠女人免费视频网站 | 6080午夜伦理 | 亚洲精品一线二线三线 | 国产精品一线二线三线 | 男女日批 | eeuss日韩| 东京热毛片 | 欧洲精品久久一区二区 | 亚洲尹人| 久久天堂影院 | 午夜国产在线视频 | 成年人午夜网站 | 钻石午夜影院 | 少妇精品视频一区二区 | 丁香花高清视频完整电影 | 寻找身体恐怖电影免费播放 | 都市激情国产精品 | 亚洲国产午夜 | 日本久久片 | 综合久久99 | 艳妇臀荡乳欲伦交换在线播放 | 四虎激情 | 日本啪啪啪一区二区 | 亚洲性生活网站 | 不卡av片 | 一区二区欧美在线 | 国产另类自拍 | 欧美视频一级 | www三级 | 善良的少妇伦理bd中字 | h毛片| 国产在线观看精品 | 五月激情在线 | 一区二区男女 | 亚洲v日本 | 久久爱综合网 | 欧美日韩中文字幕在线播放 | 日b在线观看| 黄色一级大片在线观看 | 婷婷6月天 | www.欧美| 91av爱爱| av国语| 免费看黄色三级 | 波多野结衣网址 | 看一级黄色| 日本韩国毛片 | 国产chinese | a片在线免费观看 | 综合国产精品 | 三级黄色在线视频 | 精品视频在线一区二区 | 国产视频xxx | 二区在线播放 | 欧美一级二级三级视频 | 精品人妻码一区二区三区红楼视频 | 日本久久综合 | 亚洲欧洲成人 | 森泽佳奈作品在线观看 | 亚洲免费国产 | 午夜久久电影 | 真实新婚偷拍xxxxx | 人体一级片 | 黄色一级播放 | 亚洲天堂久久久 | 精品国产av色一区二区深夜久久 | 天堂在线视频免费观看 | 免费观看成年人网站 | 婷婷玖玖 | 艳妇臀荡乳欲伦交换gif | 日批黄色片| 日韩三区在线 | 国产亚洲欧美日韩高清 | 久草免费在线观看视频 | 国产女人与zoxxxx另类 | 精品久久久无码中文字幕边打电话 | 国产精品成人一区二区网站软件 | 成人wwwww免费观看 | 国产三级日本三级在线播放 | 日韩精品一区中文字幕 | 亚洲区久久 | 天天5g天天看| 自拍视频一区二区 | 99产精品成人啪免费网站 | 免费观看污视频 | 98视频在线 | av五十路| 中文字幕在线观看视频网站 | 一级肉体全黄毛片 | 成年人网站在线 | 欧亚在线视频 | 亚洲熟妇无码乱子av电影 | 91午夜交换视频 | 爱综合网| 色黄网站在线观看 |