chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在RTMP協(xié)議中增加對(duì)HEVC視頻編碼格式的支持

LiveVideoStack ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2018-01-23 09:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

視頻流媒體中視頻數(shù)據(jù)的傳輸占據(jù)了絕大部分的帶寬,如何提升編碼效率、減小帶寬使用、提升畫面質(zhì)量,成為音視頻開發(fā)者努力的重點(diǎn)。HEVC編碼格式的推出為此帶來了突破點(diǎn)。對(duì)于直播而言,大部分推拉流協(xié)議是基于RTMP的,因此本文將主要介紹如何在RTMP協(xié)議中增加對(duì)HEVC視頻編碼格式的支持。

本文來自金山云OBG事業(yè)部投稿,是《FFmpeg從入門到出家》系列的第一篇下半部分,由LiveVideoStack審校整理,希望能讓大家對(duì)FFmpeg有更深入了解。閱讀上半部分內(nèi)容請(qǐng)點(diǎn)擊【閱讀原文】

文 / 施雪梅

4. HEVC在RTMP中的擴(kuò)展

為推進(jìn)HEVC視頻編碼格式在直播方案中的落地,經(jīng)過CDN聯(lián)盟討論,并和主流云服務(wù)廠商達(dá)成一致,規(guī)范了HEVC在RTMP/FLV中的擴(kuò)展,具體修改內(nèi)容見下。

4.1 FLV規(guī)范擴(kuò)展

HEVC為視頻編碼格式,因此對(duì)FLV規(guī)范的擴(kuò)展,只集中在Video Tag,其它部分,無任何改動(dòng)。

4.1.1 支持HEVC的VideoTagHeader

擴(kuò)展后的VideoTagHeader如下圖所示(紅色字體為新增內(nèi)容):

圖9. 支持HEVC的FLVTagHeader

修改點(diǎn)如下:

1.CodecID - 定義HEVC格式的值為12;

2.HEVCPacketType - 當(dāng)CodecID == 12時(shí),AVCPacketType為HEVCPacketType:

  • 如果HEVCPacketType為0,表示HEVCVIDEOPACKET中存放的是HEVC sequence header;

  • 如果HEVCPacketType為1,表示HEVCVIDEOPACKET中存放的是HEVC NALU;

  • 如果HEVCPacketType為2,表示HEVCVIDEPACKET中存放的是HEVC end of sequence,即HEVCDecoderConfigurationRecord;

3.CompositionTime - 當(dāng)CodecID == 12時(shí),同樣需要CompositionTime。

4.1.2 支持HEVC的VideoTagBody

當(dāng)CodecID為12時(shí),VideoTagBody中存放的就是HEVC視頻幀內(nèi)容。

擴(kuò)展后的VideoTagBody如下圖所示(紅色字體為HEVC新增內(nèi)容):

圖10. 支持HEVC的VideoTagBody

4.2 FFmpeg中的修改

我們已在FFmpeg的各個(gè)版本上提供相關(guān)的完整修改,具體參見:https://github.com/ksvc/FFmpeg,完整patch獲取及相關(guān)說明見:https://github.com/ksvc/FFmpeg/wiki。

由第二章節(jié)的闡述可知,F(xiàn)LV的解復(fù)用和復(fù)用功能代碼分別在libavformt/flvdec.c和libavformat/flvenc.c中,擴(kuò)展后的修改也都集中在這兩個(gè)文件。本節(jié)將在FFmpeg3.3的基礎(chǔ)上,說明修改的關(guān)鍵點(diǎn)。

4.2.1 編碼類型定義

libavformat/flv.h中按照VideoTagHeader中的CodecID定義了一組視頻編碼格式的枚舉值,擴(kuò)展后的枚舉定義如下:


	

enum { FLV_CODECID_H263 = 2, FLV_CODECID_SCREEN = 3, FLV_CODECID_VP6 = 4, FLV_CODECID_VP6A = 5, FLV_CODECID_SCREEN2 = 6, FLV_CODECID_H264 = 7, FLV_CODECID_REALH263= 8, FLV_CODECID_MPEG4 = 9, FLV_CODECID_HEVC = 12,};

4.2.2 FLV demux

在解復(fù)用過程中,flv_read_packet方法是整個(gè)過程的核心,它里面完成了對(duì)每個(gè)Tag的讀取和解析。

4.1.1中提到,如果HEVCPacketType為0時(shí),表示HEVCVIDEOPACKET中存放的是HEVC sequence header,也就是HEVCDecoderConfigurationRecord,解碼時(shí)需設(shè)置HEVCDecoderConfigurationRecord方能正確解碼。

HEVC與AVC視頻幀在FLV中的存放格式相同,所以只需在讀取Video Tag的地方增加AV_CODEC_ID_HEVC的判斷條件即可,調(diào)整后的代碼如下:


	

if (st->codecpar->codec_id == AV_CODEC_ID_AAC || st->codecpar->codec_id == AV_CODEC_ID_H264 || st->codecpar->codec_id == AV_CODEC_ID_HEVC || st->codecpar->codec_id == AV_CODEC_ID_MPEG4) { int type = avio_r8(s->pb); size--; if (st->codecpar->codec_id == AV_CODEC_ID_H264 || st->codecpar->codec_id == AV_CODEC_ID_HEVC || st->codecpar->codec_id == AV_CODEC_ID_MPEG4) { // sign extension int32_t cts = (avio_rb24(s->pb) + 0xff800000) ^ 0xff800000; pts = dts + cts; if (cts< 0) { // dts might be wrong if (!flv->wrong_dts) av_log(s, AV_LOG_WARNING, "Negative cts, previous timestamps might be wrong.\n"); flv->wrong_dts = 1; } else if (FFABS(dts - pts) > 1000*60*15) { av_log(s, AV_LOG_WARNING, "invalid timestamps %"PRId64" %"PRId64"\n", dts, pts); dts = pts = AV_NOPTS_VALUE; } } if (type == 0 &&(!st->codecpar->extradata || st->codecpar->codec_id == AV_CODEC_ID_AAC || st->codecpar->codec_id == AV_CODEC_ID_HEVC || st->codecpar->codec_id == AV_CODEC_ID_H264)) { AVDictionaryEntry *t; if (st->codecpar->extradata) { if ((ret = flv_queue_extradata(flv, s->pb, stream_type, size)) < 0) return ret; ret = FFERROR_REDO; goto leave; } if ((ret = flv_get_extradata(s, st, size)) < 0) return ret; …… }}

AVCDecoderConfigurationRecord和HEVCDecoderConfigurationRecord都是存放在AVStream->AVCodecParameter->extradata中。

4.2.3 FLV mux

FLV mux的修改相對(duì)較多、header、packet、trailer中均有涉及。

4.2.3.1 write header

flv_write_header中主要完成了以下工作:

  1. 寫入FLV Header;

  2. 寫入Metadata;

  3. 如果音頻編碼格式為AAC,則寫入第一個(gè)Audio Tag,其AudioTagBody中存放的是AAC sequence header;

  4. 如果視頻編碼格式為AVC,則寫入第一個(gè)Video Tag,其中VideoTagBody中存放的是AVC sequence header。

同樣,當(dāng)視頻編碼格式HEVC時(shí),也要寫入第一個(gè)VideoTag,其中VideoTagBody中存放的是HEVCDecoderConfigurationRecord,修改點(diǎn)如下:


	

avio_w8(pb, par->codec_tag | FLV_FRAME_KEY); // flagsavio_w8(pb, 0); // AVC sequence headeravio_wb24(pb, 0); // composition timeif (par->codec_id == AV_CODEC_ID_HEVC) ff_isom_write_hvcc(pb, par->extradata, par->extradata_size, 0);else ff_isom_write_avcc(pb, par->extradata, par->extradata_size);

ff_isom_write_hvcc的作用是將extradata轉(zhuǎn)為HEVCDecoderConfigurationRecord結(jié)構(gòu)并寫入。

4.2.3.2 write packet

flv_write_packet的作用是寫入音視頻幀,其中有關(guān)寫入video數(shù)據(jù)的地方,都需要加上AV_CODEC_ID_HEVC的判斷條件,修改內(nèi)容如下:


	

else if (par->codec_id == AV_CODEC_ID_HEVC ){ if (par->extradata_size> 0 && *(uint8_t*)par->extradata != 1) if ((ret = ff_hevc_annexb2mp4_buf(pkt->data, &data, &size, 0, NULL)) < 0) return ret; }

ff_hevc_annexb2mp4_buf方法的作用是將Annex-B格式的HEVC視頻幀轉(zhuǎn)為HVCC格式。

AnnexB與AVCC/HVCC(ISO/IEC14496-15中所定義,通常也稱為MPEG-4格式)的區(qū)別在于參數(shù)集與幀格式,AnnexB的參數(shù)集sps、pps以NAL的形式存在碼流中(帶內(nèi)傳輸),以startcode分割NAL。而HVCC 的參數(shù)集存儲(chǔ)在extradata中(帶外傳輸),使用NALU長(zhǎng)度(固定字節(jié),通常為4字節(jié),從extradata中解析)分隔NAL。

4.2.3.3 write trailer

結(jié)束時(shí)需要寫入HEVC end of sequence,其格式與AVC end of sequence相同,直接復(fù)用即可,flv_write_trailer的修改內(nèi)容如下:


	

if (par->codec_type == AVMEDIA_TYPE_VIDEO && (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_HEVC || par->codec_id == AV_CODEC_ID_MPEG4)) put_avc_eos_tag(pb, sc->last_ts);?

5. 結(jié)束語

本文簡(jiǎn)單介紹了如何在FFmpeg中擴(kuò)展rtmp協(xié)議對(duì)HEVC編碼格式的支持,而要將HEVC應(yīng)用于直播整體方案,除推流端和播放端要提供相應(yīng)能力外,源站、CDN、轉(zhuǎn)碼服務(wù)同樣都需要提供這種能力。金山云的所有視頻服務(wù)中,已完全支持HEVC視頻編碼格式,歡迎大家使用。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5186

    文章

    20149

    瀏覽量

    328844
  • 視頻編碼
    +關(guān)注

    關(guān)注

    2

    文章

    114

    瀏覽量

    21511
  • 視頻流
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    10567

原文標(biāo)題:FFmpeg代碼導(dǎo)讀——HEVC在RTMP中的擴(kuò)展

文章出處:【微信號(hào):livevideostack,微信公眾號(hào):LiveVideoStack】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一臺(tái)就夠了! 4K/8K編解碼器THEIA T1 MINI:NDI HX3/WebRTC低延遲互聯(lián),四路解碼全面解鎖

    編碼、4解碼或2編2解等工作模式。 本次升級(jí)特別優(yōu)化了解碼能力——從原先僅第一路支持AVC 1080p解碼,升級(jí)為四路視頻通道均支持格式。
    發(fā)表于 12-04 13:14

    如何給rt-thread studio 2.2.8 ide工具安裝支持其他字符編碼,如gb2312等?

    目前使用的rt-thread studio版本為2.2.8,當(dāng)前支持的字符集編碼如下 由于移植的工程,之前的文件編碼格式為gb2312的,因此在此ide
    發(fā)表于 09-29 07:41

    ?LMH1981多格式視頻同步分離器技術(shù)文檔總結(jié)

    三電平同步,輸出提供CMOS邏輯的所有關(guān)鍵定時(shí)信號(hào),其中 從軌道到軌道的擺動(dòng) (V~CC~和 GND),包括復(fù)合、水平和 垂直同步、連拍/后廊定時(shí)、奇數(shù)/偶數(shù)場(chǎng)和視頻格式輸出。HSync 功能 其前緣(下降)沿的抖動(dòng)非常低,最大限度地減少了清潔和清潔所需的外部電路。
    的頭像 發(fā)表于 09-19 10:18 ?580次閱讀
    ?LMH1981多<b class='flag-5'>格式</b><b class='flag-5'>視頻</b>同步分離器技術(shù)文檔總結(jié)

    視耀T1 MINI-4路4K編解碼器丨端到端超低延時(shí)賦能4K超清視界

    ,通過FPGA硬件加速與碼控技術(shù),設(shè)備極大提升了編碼效率,端到端延時(shí)壓縮至300ms以內(nèi),滿足廣播級(jí)專業(yè)音視頻傳輸應(yīng)用。其12G-SDI、Quad-Link 3G-SDI、HDMI 2.1多接口設(shè)計(jì)支持
    發(fā)表于 08-28 13:43

    何在充電樁端支持 OCPP 協(xié)議 —— 網(wǎng)關(guān)方案解析

    。對(duì)于充電樁運(yùn)營(yíng)商和制造商來說,要想實(shí)現(xiàn)充電樁出口海外,在充電樁端有效支持OCPP協(xié)議至關(guān)重要,而采用深圳惠志科技的OCPP協(xié)議4g網(wǎng)關(guān),往往是實(shí)現(xiàn)這一目標(biāo)的最優(yōu)選擇
    的頭像 發(fā)表于 07-24 09:37 ?7137次閱讀
    如<b class='flag-5'>何在</b>充電樁端<b class='flag-5'>支持</b> OCPP <b class='flag-5'>協(xié)議</b> —— 網(wǎng)關(guān)方案解析

    LVDS轉(zhuǎn)USB3.0視頻采集模塊編碼控制板

    USB3.0視頻采集模塊通過LVDS接口連接機(jī)芯,自動(dòng)識(shí)別機(jī)芯高清視頻格式。支持720P,1080I,1080P各種幀率,讓SONY FCB一體化攝像機(jī)芯所拍攝圖像即刻顯示在電腦屏幕
    的頭像 發(fā)表于 07-09 10:22 ?620次閱讀
    LVDS轉(zhuǎn)USB3.0<b class='flag-5'>視頻</b>采集模塊<b class='flag-5'>編碼</b>控制板

    工業(yè)數(shù)據(jù)采集網(wǎng)關(guān)支持哪些工業(yè)協(xié)議?

    :用于串行通信,適合于多個(gè)從設(shè)備與一個(gè)主設(shè)備的通信。 ModbusTCP/IP:基于以太網(wǎng)的Modbus協(xié)議,適用于工業(yè)網(wǎng)絡(luò)的設(shè)備通信。 ModbusASCII:一種文本格式的Modbus協(xié)
    的頭像 發(fā)表于 06-08 10:10 ?1760次閱讀

    HIPERFACE DSL編碼器通信協(xié)議介紹

    在工業(yè)自動(dòng)化和智能制造快速發(fā)展的今天,編碼器在各類設(shè)備扮演著關(guān)鍵角色,精準(zhǔn)的位置和速度反饋是確保系統(tǒng)高效、穩(wěn)定運(yùn)行的基礎(chǔ)。HIPERFACE DSL作為一種先進(jìn)的編碼器通信協(xié)議,正逐
    的頭像 發(fā)表于 05-23 14:16 ?1645次閱讀
    HIPERFACE DSL<b class='flag-5'>編碼</b>器通信<b class='flag-5'>協(xié)議</b>介紹

    GM7121-D視頻編碼芯片技術(shù)解析與應(yīng)用指南

    信號(hào)處理、色差內(nèi)插濾波、行場(chǎng)同步控制及PAL制式編碼輸出,適用于安防監(jiān)控、醫(yī)療成像設(shè)備、工業(yè)視覺等領(lǐng)域。 ? --- #### 二、關(guān)鍵特性 ? 1. **視頻處理能力** ? ? - 支持亮度/色差信號(hào)分離處理,內(nèi)置6.75M
    的頭像 發(fā)表于 04-23 15:27 ?703次閱讀

    英飛凌邊緣AI平臺(tái)通過Ultralytics YOLO模型增加對(duì)計(jì)算機(jī)視覺的支持

    【2025年3月7日, 德國(guó)慕尼黑訊】全球功率系統(tǒng)、汽車和物聯(lián)網(wǎng)領(lǐng)域的半導(dǎo)體領(lǐng)導(dǎo)者英飛凌科技股份公司(FSE代碼:IFX / OTCQX代碼:IFNNY)在DEEPCRAFT Studio增加
    的頭像 發(fā)表于 03-11 15:11 ?656次閱讀
    英飛凌邊緣AI平臺(tái)通過Ultralytics YOLO模型<b class='flag-5'>增加對(duì)</b>計(jì)算機(jī)視覺的<b class='flag-5'>支持</b>

    請(qǐng)問tvp5150a支持EIA/CCIR格式嗎?

    的話,Ti有沒有支持格式視頻解碼的芯片功能性能跟5150差不多的。 我試驗(yàn)連接連接相機(jī)到采集電路上試了一下,確實(shí)踩不出圖像,但不知是不是5150寄存器設(shè)置的問題,還是5150就是不
    發(fā)表于 02-08 08:08

    何在Windows中使用MTP協(xié)議

    、圖片等)的通信協(xié)議,它被廣泛用于Android設(shè)備。以下是如何在Windows中使用MTP協(xié)議的詳細(xì)步驟: 1. 確保設(shè)備支持MTP 首先,你需要確認(rèn)你的設(shè)備
    的頭像 發(fā)表于 01-03 10:26 ?4414次閱讀

    【飛凌嵌入式OK3588J-C開發(fā)板體驗(yàn)】OK3588J-C開發(fā)板的HDMI輸入轉(zhuǎn)RTMP直播

    在上一篇報(bào)告,我們已經(jīng)可以將RTSP轉(zhuǎn)成RTMP進(jìn)行直播了,這次我們要將HDMI輸入也要轉(zhuǎn)成RTMP進(jìn)行直播。 我們需要在上一篇的基礎(chǔ)上再增加一個(gè)HDMI直播按鈕。 頭文件 #ifn
    發(fā)表于 12-29 13:59

    何在播放視頻過程插入音頻

    ZDP14x0是一款基于開源GUI引擎的圖像顯示專用驅(qū)動(dòng)芯片,可以通過串口或者SPI與其他芯片通信,且能播放視頻。本文將介紹如何在播放視頻過程插入音頻。
    的頭像 發(fā)表于 12-26 11:13 ?1957次閱讀
    如<b class='flag-5'>何在</b>播放<b class='flag-5'>視頻</b>過程<b class='flag-5'>中</b>插入音頻

    百問MQTT協(xié)議分析 - MQTT簡(jiǎn)述及協(xié)議報(bào)文格式組成

    )1字節(jié)固定報(bào)頭,2字節(jié)心跳報(bào)文,報(bào)文結(jié)構(gòu)緊湊 e)消息QoS支持,可靠傳輸保證 16.1.3 應(yīng)用 ?MQTT協(xié)議廣泛應(yīng)用于物聯(lián)網(wǎng)、移動(dòng)互聯(lián)網(wǎng)、智能硬件、車聯(lián)網(wǎng)、電力能源等領(lǐng)域。 a)物聯(lián)網(wǎng)M2M通信
    發(fā)表于 12-13 09:29