日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

ffmpeg基础库编程开发 读书笔记

發(fā)布時(shí)間:2024/2/28 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ffmpeg基础库编程开发 读书笔记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第一章

1.6 容器和協(xié)議

1. 媒體文件和編碼的區(qū)別

文件是既包括視頻又包括音頻、甚至還帶有腳本的一個(gè)集合,也可以叫做容器;

文件當(dāng)中的視頻和音頻的壓縮算法才是具體的編碼。

2. 兩大標(biāo)準(zhǔn)指定組織

兩大組織分別是國(guó)際標(biāo)準(zhǔn)化組織(iso) 和國(guó)際電信聯(lián)盟(itu)

在音視頻壓縮標(biāo)準(zhǔn)方面,mpeg系列的協(xié)議是iso 制定的標(biāo)準(zhǔn),而h 系列的協(xié)議則是itu 制定的標(biāo)準(zhǔn)

3. h.264

h.264 單看名字,感覺是itu組織制定的,其實(shí)它還有一個(gè)名字叫mpeg-4 part 10, 這是因?yàn)閔.264是iso 和itu組織共同制定的,版權(quán)共享。

?

1.7 常用概念介紹

1. 軟解和硬解

軟解就是通過軟件讓CPU進(jìn)行視頻解碼處理;

硬解是指不依賴于CPU, 通過專門的設(shè)備(子卡)單獨(dú)完成視頻解碼,目前常用的是GPU。

?

1.7.2 IBP幀

1. 幀

幀就是影像動(dòng)畫中最小單位的單幅影像畫面,相當(dāng)于電影膠片上的每一格鏡頭

I frame : 幀內(nèi)編碼幀 又稱 intra picture, I 幀通常是每個(gè)GOP的第一幀, 經(jīng)過適度地壓縮,作為隨機(jī)訪問的參考點(diǎn),可以當(dāng)成圖像。I幀可以看成是一個(gè)圖像經(jīng)過壓縮后的產(chǎn)物。

P frame : 前向預(yù)測(cè)編碼幀,又稱predictive-frame, 通過充分將低于圖像序列中前面已編碼幀的時(shí)間冗余信息來壓縮傳輸數(shù)據(jù)量的編碼圖像,也叫預(yù)測(cè)幀。

B frame : 雙向預(yù)測(cè)內(nèi)插編碼幀, 又稱bi-directional interpolated prediction frame, 既考慮與源圖像序列前面已編碼幀,也顧及源圖像序列后面已編碼幀之間的時(shí)間冗余信息來壓縮傳輸數(shù)據(jù)量的編碼圖像,也叫雙向預(yù)測(cè)幀。

PTS: Presentation Time Stamp。 pts 主要用于度量解碼后的視頻幀什么時(shí)候被顯示出來

DTS : Decode Time Stamp. dts 主要是標(biāo)識(shí)讀入內(nèi)存中的bit 流在什么時(shí)候開始送入解碼器中進(jìn)行解碼。

ps, 在沒有B幀存在的情況下,dts 的順序和pts 的順序應(yīng)該是一樣的。

2. I幀特點(diǎn):

1. 它是一個(gè)全幀壓縮編碼幀,它將全幀圖像信息進(jìn)行JPEG壓縮編碼及傳輸

2. 解碼時(shí)僅用I幀的數(shù)據(jù)就可以重構(gòu)完整圖像;

3. I幀描述了圖像背景和運(yùn)動(dòng)主體的詳情;

4. I幀不需要參考其他畫面而生成;

5. I幀是P幀和B幀的參考幀(其質(zhì)量直接影響到同組中以后各幀的質(zhì)量);

6. I幀是幀組GOP的基礎(chǔ)幀(第一幀), 在一組中只有一個(gè)I幀;

7. I幀不需要考慮運(yùn)動(dòng)矢量;

8. I幀所占數(shù)據(jù)的信息量比較大。

3. P幀: 前向預(yù)測(cè)編碼幀

P幀的預(yù)測(cè)與重構(gòu):P幀是以I幀為參考幀,在I幀中找出P幀“某點(diǎn)”的預(yù)測(cè)值和運(yùn)動(dòng)矢量,取預(yù)測(cè)差值和運(yùn)動(dòng)矢量一起傳送。在接收端根據(jù)運(yùn)動(dòng)矢量從I幀中找出P幀“某點(diǎn)”的預(yù)測(cè)值并與差值相加得到P幀“某點(diǎn)”樣值,從而得到完整的P幀。

P幀特點(diǎn):

1. P幀是I幀后面相隔1~2幀的編碼幀;

2. P幀采用運(yùn)動(dòng)補(bǔ)償?shù)姆椒▊魉退c前面的I幀或P幀的差值及運(yùn)動(dòng)矢量(預(yù)測(cè)誤差);

3. 解碼時(shí)必須將I幀中的預(yù)測(cè)值與預(yù)測(cè)誤差求和后才能重構(gòu)完整的P幀圖像;

4. P幀屬于前向預(yù)測(cè)的幀間編碼。它只參考前面最靠近它的I幀或P幀;

5. P幀可以是其后面P幀的參考幀,也可以是其前后B幀的參考幀;

6. 由于P幀也是參考幀,它可能造成解碼錯(cuò)誤的擴(kuò)散;

7. 由于是差值傳送,P幀的壓縮比較高。

4. B幀: 雙向預(yù)測(cè)內(nèi)插編碼幀

B幀以前面的I或P幀和戶名的P幀為參考幀,找出B幀某點(diǎn)的預(yù)測(cè)值和兩個(gè)運(yùn)動(dòng)矢量,并取預(yù)測(cè)差值和運(yùn)動(dòng)矢量傳送。接收端根據(jù)運(yùn)動(dòng)矢量在兩個(gè)參考幀中算出預(yù)測(cè)值并與差值求和,得到B幀某點(diǎn)樣值,從而得到完整的B幀。

B幀特點(diǎn):

1. B幀是從前面的I幀或P幀和后面的P幀來進(jìn)行預(yù)測(cè)的;

2. B幀傳送的是它與前面的I幀或P幀和后面的P幀之間的預(yù)測(cè)誤差及運(yùn)動(dòng)矢量;

3. B幀是雙向預(yù)測(cè)幀;

4. B幀壓縮比最高,因?yàn)樗环从硡⒖紟娺\(yùn)動(dòng)主體的變化情況,預(yù)測(cè)比較準(zhǔn)確;

5. B幀不是參考幀,不會(huì)造成解碼錯(cuò)誤的擴(kuò)散。

注意:I、P、B幀是根據(jù)壓縮算法需要,是認(rèn)為定義的,它們是實(shí)實(shí)在在的物理幀,至于圖像中的哪一幀是I幀,是隨機(jī)的。

一般平均來說,I的壓縮率是7, P是20, B可以達(dá)到50;

5. GOP

group of pictures 畫面組

gop 策略影響編碼質(zhì)量,所謂gop, 意思是畫面組,一個(gè)gop 就是一組連續(xù)的畫面。

MPEG-2 壓縮的幀結(jié)構(gòu)有兩個(gè)參數(shù),一個(gè)是GOP圖像組的長(zhǎng)度,一般可按編碼方式從1-15;另一個(gè)是I幀和P幀直接的B幀的數(shù)量,一般是1-2個(gè)。

?

1.7.5 碼率

一般用kbps(千比特/秒)或者mbps(兆比特/秒)來表示

?

1.7.6 幀率

FPS (幀/秒),就是視頻畫面刷新的速度。作為參考,國(guó)內(nèi)電視機(jī)一般是25FPS, 電影標(biāo)準(zhǔn)為24FPS。

?

1.7.7 RGB和YUV

RGB指的就是紅綠藍(lán);而yuv主要指亮度和兩個(gè)色差信號(hào),被稱為luminance 和chrominance。我們視頻里面基本上都是用yuv格式。

視頻壓縮用到的是yuv420

?

1.7.8 實(shí)時(shí)和非實(shí)時(shí)

實(shí)時(shí)與非實(shí)時(shí),主要用來形容編碼器,它含有兩個(gè)意思,一個(gè)是要保證幀率,也就是每秒25幀,另一個(gè)是live, 意味著直播。

?

第二章 FFmpeg框架

2.1 ffmpeg概述

open-source multimedia library, 遵從GPL/LGPL協(xié)議,ffmpeg只是一個(gè)商標(biāo),它的所有權(quán)屬于ffmpeg org.

項(xiàng)目的名稱來自MPEG視頻編碼標(biāo)準(zhǔn),前面的FF代表Fast Forward

FFmpeg 是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序。

FFmpeg有非常強(qiáng)大的功能,包括視頻采集功能、視頻格式轉(zhuǎn)換、視頻抓圖、給視頻加水印等。

2.1.3 模塊組成

1. libavformat : 用于各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以及生成解碼上下文結(jié)構(gòu)和讀取音視頻幀等功能;音視頻的格式解析協(xié)議,為livavcodec分析碼流提供獨(dú)立的音頻或視頻碼流源。

2. libavcodec : 用于各種類型聲音/圖像編解碼;該庫(kù)是音視頻編解碼核心,實(shí)現(xiàn)了市面上大部分解碼器的功能,libavcodec庫(kù)被其他各大解碼器ffdshow、Mplayer等所包含或應(yīng)用;

3. libavdevice : 硬件采集、加速、顯示。

4. libavfilter: filter(FileIO、FPS、DrawText)音視頻濾波器的開發(fā),如寬高比、裁剪、格式化、非格式化伸縮。

5. libavutil : 包含一些公共的工具函數(shù)的使用庫(kù),包括算數(shù)運(yùn)算、字符運(yùn)算

6. libavresample : 音視頻封裝編解碼格式預(yù)設(shè)等

7. libswresample : 原始音頻格式轉(zhuǎn)換

8. libpostproc : (同步、時(shí)間計(jì)算的簡(jiǎn)單算法)用于后期效果處理;

9. ffmpeg: 該項(xiàng)目提供的一個(gè)工具,用于格式轉(zhuǎn)換、解碼或即時(shí)編碼等

10. ffserver : 一個(gè)http 多媒體即時(shí)廣播串流服務(wù)器

11. ffplay : 簡(jiǎn)單播放器

2.2 媒體播放器三大底層框架

大體來說業(yè)界主要有3大架構(gòu): MPC、Mplayer、VLC。

?

第三章 編譯及簡(jiǎn)單應(yīng)用

1. 安裝mingw

下載地址:https://sourceforge.net/projects/mingw/

執(zhí)行mingw-get-setup.exe, 一步一步安裝

2. yasm : 匯編編譯器

3. 這個(gè)文檔是在windows下面編譯安裝ffmpeg的,所以后面的安裝庫(kù)就不記了。

?

3.2 流媒體數(shù)據(jù)流程講解

?

ffmpeg.c 文件中 main()---av_register_all()

?av_register_all(), 初始化libavcodec 庫(kù),并注冊(cè)所有的編解碼器和格式。

3.5 ffmpeg程序的使用

1. ffmpeg是用于轉(zhuǎn)碼的應(yīng)用程序,詳細(xì)說明文檔:http://ffmpeg.org/ffmpeg.html

2. ffplay 是用于播放的應(yīng)用程序,詳細(xì)說明文檔:http://ffmpeg.org/ffplay.html

3. ffprobe 是用于查看文件格式的應(yīng)用程序,詳細(xì)說明文檔 :http://ffmpeg.org/ffprobe.html

?

第五章 重要模塊

5.1 libavutil 公共模塊

1. common.h? : 基本上是一些宏定義和內(nèi)聯(lián)函數(shù),?common internal and external API header;

2. bswap.h :?byte swapping routines, 字節(jié)順序交換,和CPU大小端有關(guān);

? ? 常見的cpu 中,Intel X86 序列及其兼容序列只能是小端, ARM大端小端都支持,但默認(rèn)小端。

3. rational.h :?Utilties for rational number calculation, 有理數(shù)計(jì)算

4. mathematics.h :?Mathematical utilities for working with timestamp and time base.

5. avutil.h : Convenience header that includes @ref lavu "libavutil"'s core.

總體來說,avutil 模塊主要有如下功能:

  • 數(shù)學(xué)函數(shù)
  • 字符串操作
  • 內(nèi)存管理相關(guān)
  • 數(shù)據(jù)結(jié)構(gòu)相關(guān)
  • 錯(cuò)誤碼及錯(cuò)誤處理
  • 日志輸出
  • 其他輔助信息,比如密鑰、哈希值、宏、庫(kù)版本、常量等
  • 5.2 libavcodec 編解碼模塊

    1. avcodec.h :?Encoding/Decoding Library

    ? ?主要定義編解碼庫(kù)使用到的宏、數(shù)據(jù)結(jié)構(gòu)和函數(shù)。通常這些宏、數(shù)據(jù)結(jié)構(gòu)和函數(shù)在這個(gè)模塊內(nèi)相對(duì)全局有效。

    ? ?AV_CODEC_ID_H265 AV_CODEC_ID_HEVC 就是在這個(gè)頭文件中定義的。

    2. allcodec.c :?Provide registration of all codecs, parsers and bitstream filters for libavcodec.

    簡(jiǎn)單的注冊(cè)、初始化函數(shù),把編解碼器用相應(yīng)的鏈表串起來便于查找識(shí)別。

    avcodec_register_all()函數(shù)中注冊(cè)所有的編解碼器。

    ?

    ?

    5.3 libavformat 容器模塊

    1. avformat.h :?Main libavformat public API header

    定義識(shí)別文件格式和媒體類型庫(kù)使用的宏、數(shù)據(jù)結(jié)構(gòu)和函數(shù)。這些宏、數(shù)據(jù)結(jié)構(gòu)和函數(shù)在這個(gè)模塊內(nèi)基本都是全局的。

    2. allformat.c :?簡(jiǎn)單的注冊(cè)、初始化函數(shù),把編解碼器用相應(yīng)的鏈表串起來便于查找識(shí)別。

    av_register_all()函數(shù)中注冊(cè)所有的編解碼器。

    3. file.c : ffmpeg 把file當(dāng)做類似于rtsp/rtp/tcp 等協(xié)議的一種協(xié)議,用file: 前綴標(biāo)示file 協(xié)議

    4. avio.h 文件:?Buffered I/O operations

    文件讀寫模塊定義的數(shù)據(jù)結(jié)構(gòu)和函數(shù)聲明。

    5.4 libswscale : 視頻色彩空間轉(zhuǎn)換

    5.5 libswresample : 音頻重采樣

    5.6 libavfilter : 音視頻濾波器

    5.7 libavdevice : 設(shè)備輸入輸出容器

    5.8 libpostproc : 視頻后期處理

    ?

    第八章 關(guān)鍵函數(shù)介紹

    8.1 avformat_open_input :

    ffmpeg 打開媒體的過程開始于avformat_open_input, 該函數(shù)有兩個(gè)功能:

    1. 輸入輸出結(jié)構(gòu)體AVIOContext的初始化;

    2. 輸入數(shù)據(jù)的協(xié)議(如RTMP,file)的識(shí)別,通過一套評(píng)分機(jī)制:1. 判斷文件名的后綴;2. 讀取文件頭的數(shù)據(jù)進(jìn)行比對(duì)

    ?每個(gè)具體的輸入?yún)f(xié)議都有自己對(duì)應(yīng)的URLProtocol,比如說rtmp 協(xié)議

    URLProtocol ff_rtmp_protocol = { .name = "rtmp", .url_open = rtmp_open, .url_read = rtmp_read, .url_write = rtmp_write, .url_close = rtmp_close, .url_read_pause = rtmp_read_pause, .url_read_seek = rtmp_read_seek, .url_get_file_handle = rtmp_get_file_handle, .priv_data_size = sizeof(RTMP), .flags = URL_PROTOCOL_FLAG_NETWORK, };

    8.2 avcodec_register_all

    ffmpeg注冊(cè)復(fù)用器、編碼器等的函數(shù)av_register_all, 該函數(shù)在所有基于ffmpeg的應(yīng)用程序中幾乎都是第一個(gè)被調(diào)用的。只有調(diào)用了該函數(shù),才能使用復(fù)用器,編碼器等。

    8.3 av_read_frame

    ffmpeg中的av_read_frame的作用是讀取碼流中的音頻若干幀或者視頻一幀;

    解碼視頻的時(shí)候,每解碼一個(gè)視頻幀,需要先調(diào)用av_read_frame獲得一幀視頻的壓縮數(shù)據(jù),然后才能對(duì)該數(shù)據(jù)進(jìn)行解碼(例如H.264中一幀壓縮數(shù)據(jù)通常對(duì)于一個(gè)NAL)

    ?

    第九章 ffmpeg相關(guān)工程

    9.1 ffdshow?

    ffdshow是基于ffmpeg的解碼器類庫(kù)libavcodec的directshow filter.

    ffdshow 是一個(gè)非常強(qiáng)大的DirectShow 解碼器,封裝了ffmpeg,libmpeg2 等解碼庫(kù)。它也提供了豐富的加工處理選
    項(xiàng),可以銳化畫面,調(diào)節(jié)畫面的亮度等等。不止是視頻,FFDShow 現(xiàn)在同樣可以解碼音頻,AC3、MP3 等音頻格
    式都可支持。并且可以外掛winamp 的DSP 插件,來改善聽覺效果。一個(gè)詞形容:強(qiáng)大。

    9.2?LAV filters

    LAV Filter 是基于ffmpeg 的解碼器類庫(kù)libavcodec,以及解封裝器類庫(kù)libavformat 的DirectShow Filter。廣泛安裝在
    PC 上。

    9.3 MPlayer

    MPlayer 是一個(gè)LINUX 下的視頻播放器,它支持相當(dāng)多的媒體格式,無論在音頻播放還是在視頻播放方面,可以說
    它支持的格式是相當(dāng)全面的。
    視頻格式支持:MPEG、AVI、ASF 與WMV、QuickTime 與OGG/OGM、SDP、PVA、GIF。
    音頻格式支持:MP3、WAV、OGG/OGM 文件(Vorbis)、WMA 與ASF、MP4、CD 音頻、XMMS。

    ?

    第十一章 mp4 文件封裝協(xié)議分析

    11. 概述

    MP4文件格式中,所有的內(nèi)容存在一個(gè)稱為movie的容器中, 一個(gè)movie可以由多個(gè)trak組成。 每個(gè)trak就是一個(gè)隨時(shí)間變化的媒體序列。

    注意:一幀音頻可以分解成多個(gè)音頻sample, 所有音頻一般用sample作為單位,而不用幀。

    MP4文件格式定義里面,用sample這個(gè)單詞表示一個(gè)時(shí)間幀或者數(shù)據(jù)單元。

    每個(gè)trak會(huì)有一個(gè)或者多個(gè)sample descriptions

    MP4文件中所有的數(shù)據(jù)都封裝在一些box中,以前叫atom

    ?

    11.2? mp4 的物理結(jié)構(gòu)

    一個(gè)trak的連續(xù)幾個(gè)sample組成的單元就被稱為chunk

    ?

    11.4 mp4 的時(shí)間結(jié)構(gòu)

    關(guān)鍵詞:

    1.?trak 表示一些sample的集合,對(duì)于媒體數(shù)據(jù)來說,track表示一個(gè)視頻或音頻序列

    2.?sample video sample即為一幀視頻,或一組連續(xù)視頻幀,audio sample即為一段連續(xù)的壓縮音頻,它們統(tǒng)稱
    sample

    3.?chunk 一個(gè)trak的幾個(gè)sample組成的單元;

    4.?box box 由header 和body 組成,其中header 統(tǒng)一指明box 的大小和類型,body 根據(jù)類型有不同的意義和格
    式。標(biāo)準(zhǔn)的box 開頭的4 個(gè)字節(jié)(32 位)為box size,該大小包括box header 和box body 整個(gè)box 的大小,這樣我
    們就可以在文件中定位各個(gè)box。size 后面緊跟的32 位為box type,一般是4 個(gè)字符,如“ftyp”、“moov”等,這
    些box type 都是已經(jīng)預(yù)定義好的,分別表示固定的意義

    ?MP4 文件的結(jié)構(gòu)樹:

    ?11.5 文件結(jié)構(gòu)分析

    1. File type box (ftyp)

    該box 有且只有一個(gè),并且只能被包含在文件層,而不能被其他box包含。該box應(yīng)該被放在文件的最開始,指示該MP4文件應(yīng)用的相關(guān)信息。

    2. Movie Box (moov)

    該box包含了文件媒體的metadata 信息, “moov”是一個(gè)container box, 具體內(nèi)容信息由子box 詮釋。同file type box 一樣,該box 有且只有一個(gè),且只被包含在文件層。一般情況下,moov會(huì)緊隨ftyp 出現(xiàn)

    一般情況下,moov中會(huì)包含一個(gè)mvhd和若干個(gè)trak, 其中mvhd 為header? box, 一般作為moov的第一個(gè)子box 出現(xiàn)。

    3.? Movie Header Box (mvhd)

    mvhd定義了整個(gè)movie的特性,例如time scale 和duration, 它的atom 類型是mvhd

    4. Track box (trak)

    主數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),一部movie可以包含一個(gè)或多個(gè)tracks, 它們之間相互獨(dú)立,各自有各自的時(shí)間和空間信息,每個(gè)trak atom 都有與之關(guān)聯(lián)的media atom

    trak atoms 的atom 類型都是trak, trak atom 要求必須有一個(gè)trak header atom(tkhd) 和一個(gè)media atom(mdia).

    5. Media box(mdia)

    mdia 也是一個(gè)container box , 其子box 的結(jié)構(gòu)和種類還是比較復(fù)雜的。樹結(jié)構(gòu)如下:

    總體來說,mdia 定義了trak媒體類型以及sample數(shù)據(jù),描述sample信息。

    一般mdia 包含一個(gè)mdhd, 一個(gè)hdlr,一個(gè)minf,其中mdhd 為media head box, hdlr 為handler reference box, minf 為media information box .

    6. Sample Table Box (stbl)

    stbl 包含了關(guān)于trak 中sample所有時(shí)間和位置的信息,以及sample的編解碼等信息。利用這個(gè)表,可以解釋sample的實(shí)現(xiàn)、類型、大小和在各自存儲(chǔ)容器中的位置。stbl 是一個(gè)container box, 其子box 包括stsd, stts, stsz, stsc , stco, ctts, stss等

    ?

    第十二章 flv 文件格式分析

    12.1 概要

    FLV視頻格式是Adobe 公司設(shè)計(jì)開發(fā)的一種流媒體的封裝格式,總體上看,FLV包括文件頭(FLV Header)和文件體(FLV body)兩部分,其中文件體由一系列的Tag 及Tag Size 對(duì)組成。

    Tag 又可以分為三類:audio 、video、script

    12.2 文件總體結(jié)構(gòu)

    ?12.3 文件結(jié)構(gòu)分析

    1. flv 文件頭的結(jié)構(gòu)

    在ffmpeg 進(jìn)行格式識(shí)別的時(shí)候,是以頭部的前3 個(gè)字節(jié)進(jìn)行探測(cè),識(shí)別到'F' 'L' 'V'即可認(rèn)定該格式為flv 格式。

    2. body 主體結(jié)構(gòu)

    Tag 包括Tag Header 和Tag Data 兩部分。

    3. 如果SoundFormat 是10 (AAC),TagDataHeader 后緊隨著一個(gè)1 個(gè)字節(jié)的數(shù)據(jù)AACPacketType,這個(gè)字段來表
    示AACAUDIODATA 的類型:0 = AAC sequence header,1 = AAC raw。在flv 中一般情況下,帶有該AACPacketType
    的Tag 只會(huì)在第一個(gè)audio Tag 中出現(xiàn)一次,因?yàn)閍ac 格式的音頻需要在每幀AAC ES 流前邊添加7 個(gè)字節(jié)ADST
    頭(相當(dāng)于幀頭),就是AAC 的純ES 流要打包成ADST 格式的AAC 文件,解碼器才能正常播放.特別對(duì)于RTSP,RTP
    等實(shí)時(shí)傳輸流,ADST 必須存在,否則傳輸過來的流不知道該怎么播放。

    4.?SCRIPT Tag。該類型Tag 又通常被稱為Metadata Tag

    通常該類型Tag 會(huì)跟在File Header 后面作為第一個(gè)Tag 出現(xiàn),而且只有一個(gè)

    一般來說,該Tag Data 結(jié)構(gòu)包含兩個(gè)AMF 包。AMF(Action Message Format)是Adobe 設(shè)計(jì)的一種通用數(shù)據(jù)
    封裝格式,在Adobe 的很多產(chǎn)品中應(yīng)用,簡(jiǎn)單來說,AMF 不區(qū)分根節(jié)點(diǎn)與子節(jié)點(diǎn),將不同類型的數(shù)據(jù)用統(tǒng)一的格
    式來描述。第一個(gè)AMF 包封裝字符串類型數(shù)據(jù),即:“02” type+string length+“onMetaData”。第二個(gè)AMF 包封裝
    一個(gè)數(shù)組類型,這個(gè)數(shù)組中包含了音視頻信息項(xiàng)的名稱和值。

    ?

    超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

    總結(jié)

    以上是生活随笔為你收集整理的ffmpeg基础库编程开发 读书笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。