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)注

    5198

    文章

    20404

    瀏覽量

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

    關(guān)注

    2

    文章

    114

    瀏覽量

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

    關(guān)注

    0

    文章

    18

    瀏覽量

    10590

原文標(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)推薦

    LMH1981多格式視頻同步分離器:高性能視頻應(yīng)用的理想之選

    LMH1981多格式視頻同步分離器:高性能視頻應(yīng)用的理想之選 在當(dāng)今的視頻技術(shù)領(lǐng)域,對(duì)于高質(zhì)量同步分離的需求日益增長(zhǎng)。德州儀器(TI)的LMH1981多
    的頭像 發(fā)表于 02-10 09:25 ?414次閱讀

    基于FFmpeg解封裝WMV和M4V格式

    開源鴻蒙具備多格式視頻播放能力,其播放器需依次完成解協(xié)議、解封裝、解碼、渲染四大核心步驟,方可將音視頻內(nèi)容完整呈現(xiàn)給用戶;其中,解封裝作為銜接協(xié)議
    的頭像 發(fā)表于 01-21 12:57 ?300次閱讀

    OPPO 作為被許可方加入 VVC Advance 專利池并續(xù)簽 HEVC Advance 許可

    。 OPPO 是全球最大的智能手機(jī)制造商之一,業(yè)務(wù)遍及 70 多個(gè)國(guó)家,自 2020 年以來一直是 HEVC Advance專利池的重要參與者,2025年也作為許可方加入了 Advance的視頻分發(fā)專利
    的頭像 發(fā)表于 01-09 15:56 ?639次閱讀

    HT1001K光電一體機(jī)詳細(xì)介紹和說明

    運(yùn)行,適配工業(yè)級(jí)與商業(yè)級(jí)不間斷工作需求。 (二)音視頻處理能力 ? 視頻編碼技術(shù):支持H.264、H.265兩種標(biāo)準(zhǔn)編碼
    發(fā)表于 01-06 18:24

    光纖20公里,網(wǎng)線250米,HT1001EK長(zhǎng)距離傳輸無憂

    HDMI 1.4標(biāo)準(zhǔn)與HDCP 1.3高帶寬數(shù)字內(nèi)容保護(hù)技術(shù),支持RTSP/RTP/RTCP/RTMP等主流網(wǎng)絡(luò)協(xié)議,可實(shí)現(xiàn)7×24小時(shí)不間斷穩(wěn)定運(yùn)行,廣泛適配網(wǎng)絡(luò)直播、安防監(jiān)控、視頻
    發(fā)表于 01-05 19:09

    HT1001EK音視頻編碼器——高清傳輸.穩(wěn)定無憂,全場(chǎng)景音視頻解決方案

    輸入輸出 ? 協(xié)議RTMP/RTSP,支持推流拉流 ? 接口:HDMI/光纖/網(wǎng)口/RS232,全能適配 1. 針對(duì)直播機(jī)構(gòu)/傳媒團(tuán)隊(duì) “您做網(wǎng)絡(luò)直播最擔(dān)心高清信號(hào)卡頓、推流延時(shí)吧?咱們
    發(fā)表于 12-30 15:26

    RK3576輕松搭建RTMP視頻推流,基于FFmpeg+Nginx協(xié)同

    延遲+穩(wěn)定推流。推流端負(fù)責(zé)將視頻數(shù)據(jù)通過RTMP流媒體協(xié)議傳輸給RTMP流媒體服務(wù)器;拉流端從流媒體服務(wù)器通過
    的頭像 發(fā)表于 12-11 17:17 ?851次閱讀
    RK3576輕松搭建<b class='flag-5'>RTMP</b><b class='flag-5'>視頻</b>推流,基于FFmpeg+Nginx協(xié)同

    如何給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 ?900次閱讀
    ?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 ?8068次閱讀
    如<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 ?826次閱讀
    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 ?2068次閱讀

    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 ?988次閱讀

    英飛凌邊緣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 ?799次閱讀
    英飛凌邊緣AI平臺(tái)通過Ultralytics YOLO模型<b class='flag-5'>增加對(duì)</b>計(jì)算機(jī)視覺的<b class='flag-5'>支持</b>