RTP Payload Format for H.264 Vide(1)

摘要::

本備忘錄描述了一種用于 ITU-T H.264 視頻編碼標準(與 ISO/IEC 國際標準 14496-10 技術上相同)的 RTP 負載格式,但不包括可伸縮視頻編碼(SVC)擴展和多視角視頻編碼(MVC)擴展,這兩種擴展的 RTP 負載格式在其他文檔中有定義。該 RTP 負載格式允許在每個 RTP 負載中封裝一個或多個由 H.264 視頻編碼器產生的網絡抽象層單元(NALU)。這種負載格式具有廣泛的適用性,支持從簡單的低比特率會話應用,到帶有交錯傳輸的互聯網視頻流,再到高比特率的視頻點播等多種應用場景。

The H.264 Codec:

H.264 視頻編碼器具有非常廣泛的應用范圍,涵蓋了各種形式的數字壓縮視頻,從低比特率的互聯網流媒體應用,到高清電視(HDTV)廣播和幾乎無損編碼的數字電影應用。與當前的技術水平相比,H.264 在整體性能方面表現優異,據報道其比特率節省可達到 50% 甚至更多。例如,據稱數字衛星電視的畫質可在 1.5 Mbit/s 的比特率下實現,而當前 MPEG-2 視頻的典型比特率大約為 3.5 Mbit/s ?。

編碼規范在概念上將視頻編碼層(VCL)和網絡抽象層(NAL)區分開來。VCL 包含編解碼器的信號處理功能,包括變換、量化、運動補償預測等機制,以及環路濾波器。它遵循當今大多數視頻編解碼器的一般概念:基于宏塊的編碼器,采用帶有運動補償的幀間預測和殘差信號的變換編碼。VCL 編碼器輸出的是切片(slice):即包含若干個宏塊數據的比特串,以及切片頭的信息(其中包含該切片中第一個宏塊的空間地址、初始量化參數以及其他相關信息)。除非通過切片組(slice groups)的語法另作指定,否則切片中的宏塊按掃描順序排列。幀內預測僅在切片內部使用。更多信息可參考文獻 。

NAL 編碼器會將 VCL(視頻編碼層)編碼器輸出的切片封裝成網絡抽象層單元(NALU),以便適用于在分組網絡中傳輸,或者用于面向分組的復用環境。H.264 標準的附錄 B 定義了一種用于字節流導向網絡(比如本地存儲、串行傳輸等)上傳輸這些 NALU 的封裝方法。但在本備忘錄(即該 RTP 負載格式規范)的討論范圍內,附錄 B 的內容并不適用或相關,因為 RTP 是基于分組的傳輸方式,而不是字節流方式。

在內部,NAL(網絡抽象層)使用的是 NAL 單元。每個 NAL 單元由一個字節的頭部和有效負載字節流組成。

每個 NAL 單元包含兩個部分:

● 一個字節的頭部(header):這個頭部指出了 NAL 單元的類型(比如是幀、SPS、PPS 等),是否可能存在比特錯誤或語法錯誤,以及這個單元在解碼過程中有多重要。

● 有效負載部分(payload):也就是實際的數據內容,比如一幀圖像的數據.

頭部指示該 NAL 單元的類型、有效負載中是否可能存在比特錯誤或語法違規,以及該 NAL 單元在解碼過程中相對的重要性。本 RTP 負載規范在設計時并不關心 NAL 單元有效負載中的比特流內容。

H.264 的一個主要特點是:切片(slice)和圖像的傳輸時間、解碼時間以及采樣或顯示時間是完全解耦的。H.264 中規定的解碼過程與時間無關,H.264 語法中也不攜帶類似于早期視頻壓縮標準中“時間參考(Temporal Reference)”那樣表示跳幀數量的信息。此外,還有一些 NAL 單元會影響多幀圖像,因此本質上不具備時間屬性。因此,在處理 RTP 時間戳時,對于那些采樣時間或顯示時間未定義或在傳輸時尚未知的 NAL 單元,需要進行特別的處理和考慮。

Parameter Set Concept:

H.264 的一個非常基礎的設計理念是生成自包含的分組,從而使諸如 RFC 4629 [11] 中的頭部重復機制,或 MPEG-4 Visual 的頭部擴展碼(HEC)等機制變得不再必要。

這是通過將涉及多個切片的信息從媒體流中解耦來實現的。 這些高層的元信息應當以可靠的、異步的、提前的方式發送,與包含切片數據的 RTP 數據流分開進行傳輸。

(對于沒有合適的帶外傳輸通道的應用,也提供了帶內發送該信息的機制。) 這一類高層參數的組合被稱為參數集(parameter set)。H.264 規范中定義了兩種參數集:

● 序列參數集(Sequence Parameter Set, SPS)

● 圖像參數集(Picture Parameter Set, PPS)

一個活動的序列參數集在整個編碼視頻序列期間保持不變, 一個活動的圖像參數集在一個編碼圖像內保持不變。

這些參數集結構中包含了如下信息:

● 圖像大小

● 所使用的可選編碼模式

● 宏塊與切片組之間的映射關系等。

為了能夠在無需與切片數據流同步傳輸參數集的情況下更改圖像參數(例如圖像大小),編碼器和解碼器可以各自維護一個包含多個序列和圖像參數集的列表。每個切片頭中都會包含一個碼字,用于標識應該使用哪個序列參數集和圖像參數集。這種機制允許將參數集的傳輸與視頻數據包的傳輸分離,并可以通過外部手段進行傳輸(例如作為能力交換的一部分),或者通過可靠或不可靠的控制協議來發送。甚至在某些情況下,這些參數集可以完全不通過網絡傳輸,而是在應用設計規范中預設并固定。

H.264 通過把編碼參數信息(如分辨率、編碼方式)從圖像數據中剝離出來,形成獨立的參數集,從而實現了數據包的自包含和高效傳輸。這些參數集不依賴 RTP 流,可以通過其他方式靈活傳輸或預設,大大增強了系統的適應性和效率。

Network Abstraction Layer Unit Types:

所有NAL單元都由一個單獨的NAL單元類型字節組成,該字節同時也作為本RTP載荷格式的載荷頭(payload header)。隨后是對NAL單元載荷的描述。

NAL單元類型字節的語法和語義在h264官方文檔中進行了規定,但其基本屬性在下文中簡要總結。NAL單元類型字節的格式如下:

+---------------+|0|1|2|3|4|5|6|7|+-+-+-+-+-+-+-+-+|F| NRI | Type ?|+---------------+

根據H.264標準,對NAL單元類型字節各組成部分的語義簡要說明如下:

● F:1位

forbidden_zero_bit。H.264標準中規定該位為1即為語法違規。

● NRI:2位

nal_ref_idc。值為 00 表示該NAL單元的內容不會用于重建參考圖像,因此可以被丟棄而不會影響參考圖像的完整性。值大于 00 表示該NAL單元的解碼對保持參考圖像的完整性是必要的。

● Type:5位

nal_unit_type。該字段表示NAL單元載荷的類型。

Definitions::

● 訪問單元(access unit):一組NAL單元,總是包含一個主編碼圖像(primary coded picture)。除了主編碼圖像之外,訪問單元還可以包含一個或多個冗余編碼圖像,或其他不包含片(slice)或編碼圖像的切片數據分區的NAL單元。訪問單元的解碼始終會產生一個解碼圖像。

● 編碼視頻序列(coded video sequence):按解碼順序排列的訪問單元序列,由一個瞬時解碼刷新(IDR)訪問單元開始,后面跟著零個或多個非IDR訪問單元,直到下一個IDR訪問單元(不包括該IDR單元)為止。

● IDR訪問單元(IDR access unit):其主編碼圖像是IDR圖像的訪問單元。

● IDR圖像(IDR picture):僅包含I或SI片類型的編碼圖像,該圖像會觸發解碼過程的“重置”。解碼IDR圖像之后,其后的所有編碼圖像都可以在無需對IDR圖像之前的圖像進行幀間預測的情況下完成解碼。

● 主編碼圖像(primary coded picture):H.264標準中用于解碼處理的圖像編碼表示。主編碼圖像包含圖像的所有宏塊(macroblock)。

● 冗余編碼圖像(redundant coded picture):圖像或圖像部分的編碼表示。對于符合H.264標準的碼流,解碼過程不會使用冗余編碼圖像的內容。但在存在錯誤或丟包的碼流中,冗余編碼圖像的內容可用于解碼處理。

● VCL NAL單元(VCL NAL unit):用于統稱編碼片(coded slice)和編碼數據分區(coded data partition)類型的NAL單元。

此外,以下定義也適用:

● 解碼順序號(decoding order number, DON):RTP負載結構中的一個字段,或一個表示NAL單元解碼順序的派生變量。DON的取值范圍為0到65535。當達到最大值后,會回繞至0。

● NAL單元解碼順序(NAL unit decoding order):符合文獻 [1] 第7.4.1.2節所述順序約束的NAL單元順序。

● NALU時間(NALU-time):如果NAL單元被傳輸在其獨立的RTP包中,該值表示RTP時間戳應取的值。

● 傳輸順序(transmission order):按RTP序列號升序排列的數據包順序(按模算術處理)。在聚合包中,NAL單元的傳輸順序與其在包中出現的順序一致。

● 媒體感知網絡元素(media-aware network element, MANE):如中間設備或應用層網關這類網絡元素,能夠解析RTP載荷頭或RTP載荷的某些部分,并對內容做出反應。

說明性注釋:MANE的概念超越了普通路由器或網關,因為MANE需要了解信令(例如,獲取媒體流的負載類型映射信息),并且在使用安全實時傳輸協議(SRTP)時需要被信任。使用MANE的好處是可以根據媒體編碼的需要丟棄數據包。例如,在某個鏈路上因擁塞而必須丟包時,MANE可以識別并丟棄對用戶體驗影響最小的數據包。

● 靜態宏塊(static macroblock):視頻流中某些宏塊可被定義為靜態塊,詳見文獻 [3] 第8.3.2.8節。靜態宏塊可釋放出額外的處理資源用于非靜態宏塊處理。在一定視頻處理資源和分辨率條件下,靜態宏塊數量越多,幀率越高。

● 默認子配置(default sub-profile):編碼工具的子集,可以是一個profile的全部編碼工具,也可以是多個profile共有的編碼工具子集,由 profile-level-id 參數指示。

● 默認等級(default level):由 profile-level-id 參數指示的等級,由三個字節組成:profile_idc、profile-iop 和 level_idc。默認情況下,level_idc 表示等級,在某些情況下還需結合 profile-iop 一起判斷。

Abbreviations:

● DON:解碼順序號(Decoding Order Number)

● DONB:解碼順序號基值(Decoding Order Number Base)

● DOND:解碼順序號差值(Decoding Order Number Difference)

● FEC:前向糾錯(Forward Error Correction)

● FU:分片單元(Fragmentation Unit)

● IDR:瞬時解碼刷新(Instantaneous Decoding Refresh)

● IEC:國際電工委員會(International Electrotechnical Commission)

● ISO:國際標準化組織(International Organization for Standardization)

● ITU-T:國際電信聯盟 電信標準化部門(International Telecommunication Union, Telecommunication Standardization Sector)

● MANE:媒體感知網絡元素(Media-Aware Network Element)

● MTAP:多時間聚合包(Multi-Time Aggregation Packet)

● MTAP16:帶有16位時間戳偏移的MTAP(MTAP with 16-bit timestamp offset)

● MTAP24:帶有24位時間戳偏移的MTAP(MTAP with 24-bit timestamp offset)

● NAL:網絡提取層(Network Abstraction Layer)

● NALU:NAL單元(NAL Unit)

● SAR:采樣寬高比(Sample Aspect Ratio)

● SEI:補充增強信息(Supplemental Enhancement Information)

● STAP:單時間聚合包(Single-Time Aggregation Packet)

● STAP-A:STAP類型A

● STAP-B:STAP類型B

● TS:時間戳(Timestamp)

● VCL:視頻編碼層(Video Coding Layer)

● VUI:視頻可用性信息(Video Usability Information)

參考來源:

https://www.yuque.com/u2132176/yfiyal/kbobkofh66aldrg7

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75950.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75950.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75950.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

論文翻譯:2024-arxiv How to Steer LLM Latents for Hallucination Detection?

總目錄 大模型安全相關研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 How to Steer LLM Latents for Hallucination Detection? https://arxiv.org/pdf/2503.01917 https://www.doubao.com/chat/2818934852496130 其它資料: https://blog.csdn.net/we…

第四篇:[特殊字符] 深入理解MyBatis[特殊字符] 掌握MyBatis Generator ——入門與實戰

引言 什么是 MyBatis Generator? MyBatis Generator (MBG) 是一個代碼生成工具,專為 MyBatis 框架設計。它可以根據數據庫表結構自動生成 Java 實體類、Mapper 接口、Mapper XML 文件以及 Example 類。通過使用 MBG,開發者可以顯著減少編寫…

利用純JS開發瀏覽器小窗口移動廣告小功能

效果展示 直接上代碼 如果要用到vue項目里面&#xff0c;直接按照vue的寫法改動就行&#xff0c;一般沒有多大的問題&#xff0c;頂部的占位是我項目需求&#xff0c;你可以按照要求改動。 <!DOCTYPE html> <html> <head><meta charset"utf-8"…

React 更新 state 中的數組

更新 state 中的數組 數組是另外一種可以存儲在 state 中的 JavaScript 對象&#xff0c;它雖然是可變的&#xff0c;但是卻應該被視為不可變。同對象一樣&#xff0c;當你想要更新存儲于 state 中的數組時&#xff0c;你需要創建一個新的數組&#xff08;或者創建一份已有數組…

java -jar與java -cp的區別

java -jar與java -cp 1、情景描述2、情景分析3、兩者區別 通常情況下&#xff0c;我們會看到以下兩種命令啟動的Java程序&#xff1a; java -jar xxx.jar [args] java -cp xxx.jar mainclass [args]這兩種用法有什么區別呢&#xff1f; 1、情景描述 1&#xff09;Java打包單個…

【Java】面向對象程序三板斧——如何優雅設計包、封裝數據與優化代碼塊?

&#x1f381;個人主頁&#xff1a;User_芊芊君子 &#x1f389;歡迎大家點贊&#x1f44d;評論&#x1f4dd;收藏?文章 &#x1f50d;系列專欄&#xff1a;【Java】內容概括 【前言】 在Java編程中&#xff0c;類和對象是面向對象編程的核心概念。而包&#xff08;Package&am…

玩轉Docker | 使用Docker搭建Blog微博系統

玩轉Docker | 使用Docker搭建Blog微博系統 前言一、Blog介紹項目簡介主要特點二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署Blog服務下載鏡像創建容器檢查容器狀態設置權限檢查服務端口安全設置四、訪問Blog系統訪問Blog首頁登錄Blog五、總結前言 在數字…

用Java NIO模擬HTTPS

HTTPS流程 名詞解釋&#xff1a; R1:隨機數1 R2:隨機數2 R3:隨機數3 publicKey:公鑰 privateKey:私鑰 要提供https服務&#xff0c;服務端需要安裝數字證書&#xff0c;在&#xff08;TCP建立連接之后&#xff09;TLS握手時發給客戶端&#xff0c;客戶端驗證證書&#x…

樹莓派_利用Ubuntu搭建gitlab

樹莓派_利用Ubuntu搭建gitlab 一、給樹莓派3A搭建基本系統 1、下載系統鏡像 https://cdimage.ubuntu.com/ubuntu/releases/18.04/release/ 2、準備系統SD卡 二、給樹莓派設備聯網 1、串口后臺登錄 使用串口登錄后臺是最便捷的&#xff0c;因為前期網絡可能不好直接成功 默…

Hook_Unfinished

#include <windows.h>// 假設這兩個函數是存在的 void DoRD() {} void 改堆棧cal1() {} void 改回堆棧cal1() {}__declspec(naked) void HOOKcall() {__asm{pushadnop}__asm{popadmov eax, dword ptr [esi 8]sub eax, ecxretn} }int main() {// 第一個 Hook 操作DWORD H…

數據結構(六)——紅黑樹及模擬實現

目錄 前言 紅黑樹的概念及性質 紅黑樹的效率 紅黑樹的結構 紅黑樹的插入 變色不旋轉 單旋變色 雙旋變色 插入代碼如下所示&#xff1a; 紅黑樹的查找 紅黑樹的驗證 紅黑樹代碼如下所示&#xff1a; 小結 前言 在前面的文章我們介紹了AVL這一棵完全二叉搜索樹&…

c# 數據結構 鏈表篇 有關雙向鏈表的一切

本人能力有限,如有不足還請斧正 目錄 0.雙向鏈表的好處 1.雙向鏈表的分類 2.不帶頭節點的標準雙向鏈表 節點類:有頭有尾 鏈表類:也可以有頭有尾 也可以只有頭 增 頭插 尾插 刪 查 改 遍歷 全部代碼 3.循環雙向鏈表 節點類 鏈表類 增 頭插 尾插 刪 查 遍歷…

Numba 從零基礎到實戰:解鎖 Python 性能新境界

Numba 從零基礎到實戰&#xff1a;解鎖 Python 性能新境界 一、引言 在 Python 的世界里&#xff0c;性能一直是一個備受關注的話題。Python 以其簡潔易讀的語法和豐富的庫生態&#xff0c;深受開發者喜愛&#xff0c;但在處理一些計算密集型任務時&#xff0c;其執行速度往往…

單位門戶網站被攻擊后的安全防護策略

政府網站安全現狀與挑戰 近年來&#xff0c;隨著數字化進程的加速&#xff0c;政府門戶網站已成為政務公開和服務公眾的重要窗口。然而&#xff0c;網絡安全形勢卻日益嚴峻。國家互聯網應急中心的數據顯示&#xff0c;政府網站已成為黑客攻擊的重點目標&#xff0c;被篡改和被…

Spring Boot 項目三種打印日志的方法詳解。Logger,log,logger 解讀。

目錄 一. 打印日志的常見三種方法&#xff1f; 1.1 手動創建 Logger 對象&#xff08;基于SLF4J API&#xff09; 1.2 使用 Lombok 插件的 Slf4j 注解 1.3 使用 Spring 的 Log 接口&#xff08;使用頻率較低&#xff09; 二. 常見的 Logger&#xff0c;logger&#xff0c;…

NI的LABVIEW工具安裝及卸載步驟說明

一.介紹 最近接到個轉交的項目&#xff0c;項目主要作為上位機工具開發&#xff0c;在對接下位機時&#xff0c;有用到NI的labview工具。labview軟件是由美國國家儀器&#xff08;NI&#xff09;公司研制開發的一種程序開發環境&#xff0c;主要用于汽車測試、數據采集、芯片測…

cmd 終端輸出亂碼問題 |Visual Studio 控制臺輸出中文亂碼解決

在網上下載&#xff0c;或者移植別人的代碼到自己的電腦&#xff0c;使用VS運行后&#xff0c;控制臺輸出中文可能出現亂碼。這是因為源代碼的編碼格式和控制臺的編碼格式不一致。 文章目錄 查看源代碼文件編碼格式查看輸出控制臺編碼格式修改編碼格式修改終端代碼頁 補充總結 …

A009-基于pytest的網易云自動化測試

題 目 :基于pytest的網易云自動化測試 主要內容 綜合應用所學的軟件測試理論和方法,實現網易云的功能自動化測試。 (1)自動化測試介紹; (2)自動化功能測試框架介紹; (3)設計功能測試用例 (4)書寫自動化測試腳本; (5)測試評價與結論。 任務要求 (1)能…

LVGL Video控件和Radiobtn控件詳解

LVGL Video控件和Radiobtn控件詳解 一、 Video控件詳解1. 概述2. 創建和初始化3. 基本屬性設置4. 視頻控制5. 回調函數6. 高級功能7. 注意事項 二、Radiobtn控件詳解1. 概述2. 創建和初始化3. 屬性設置4. 狀態控制5. 組管理6. 事件處理7. 樣式設置8. 注意事項 三、效果展示四、…

AbortController:讓異步操作隨時說停就停

AbortController&#xff1a;讓異步操作隨時說停就停 一、什么是 AbortController&#xff1f; AbortController 是 JavaScript 在瀏覽器和部分 Node.js 環境中提供的全局類&#xff0c;用來中止正在進行或待完成的異步操作&#xff08;如 fetch() 請求、事件監聽、可寫流、數…