抗誤碼技術

抗誤碼技術:

?????? 視頻傳輸過程中的錯誤是不可避免的,抗誤碼技術歷來都足視頻領域一個研究的熱點。H264標準繼承r以前視頻編碼標準中某些優秀的錯誤恢復工具,同時也改進和創新了多種錯誤恢復丁具。這些錯誤恢復的工具主要有:參數集、數據分割、FMO、冗余片、幀內編碼等。

參數集

?????? 參數集是H264標準的個新概念,是種通過改進視頻碼流的結構增強錯誤恢復能力的方法。其所包含的信息極為重要,它的受損將影響到大量的VCL和NAL單元,且被影響的單元即使能正確接收到也不能被正確解碼,在H.264標準中共使用了兩種類型的參數集。


(1)序列參數集(SPS),包括與圖像序列(定義為兩個IDR圖像間的所有圖像)有關的所有信息,應用于已編碼視頻序列。
(2)圖像參數集(PPS),包括所有屬于該圖像的片的相關信息,用于解碼已編碼視頻序列中的1個或多個獨立的圖像。

??????? 圖像參數集本身也要使用和參考序列參數集中的參數。多個不同的參數集存儲在解碼器中,解碼器通過參考每個已解碼片的片頭來選擇使用恰當的參數集。參數集的靈活使用大大增強了H.264抗誤碼的性能。在有誤碼傾向環境下,使用參數集的關鍵是,在相應的VCL與NAL單元到達解碼器時,確保參數集已及時可靠地到達解碼器。參數集具體實現的方法主要有:

1、通過帶外傳輸,這種方式要求參數集通過可靠的協議,在首個片解碼之前傳輸到解碼器;2、通過帶內傳輸,這需要為參數集提供更高級別的保護,例如發送復制多個分組來保證至少有一個到達目標。由于第一種方法需要額外的一個信道,以及可靠的傳輸機制,如果條件許可,應用這種傳輸方式能增強編解碼器的抗誤碼能力,但限于網絡資源的現狀,采用第二種方式似乎更為合理一些。

數據分割

??????? 由于碼流中的各語法元素的重要性各不相同,因此可以依據各語法元素的重要性使用不對等保護(UEP)技術來提高解碼端的解碼效果。在H.264中,一個片最多可以被分為3部分,分別屬于A、B和C三類,每部分被單獨封裝為一個NAL單元。

?????? 其中,數據A主要包含頭信息,比如宏塊類型、量化參數以及運動矢量等,這些參數具有最高級別的重要性。數據B主要包含幀內編碼塊的編碼模式以及幀內編碼塊的變換系數。這部分數據的丟失將會嚴重影響其后續幀的解碼質量。數據C主要包括幀間編碼塊的編碼模式以及幀間編碼塊的變換系數。與數據A和數據B相比,這部分數據的重要性最差,然而它卻是碼流數據的最大組成部分。
??????

?????? 可以看出,數據B和數據C都要依賴于數據A的正確接收才有效,而這兩部分在語法上是獨立的。由于數據A重要性最強,同時其數據量也最小,因此可以使用更可靠的信道來傳輸或是使用糾錯能力更強的碼字來保護。事實上,在碼流無法完全到達接收端時,數據A的重要性也可以體現在解碼端錯誤掩藏的運用上,這是由于運動矢量在進行時域錯誤掩藏上是非常重要的,且一般能取得非常好的效果,同時具有很低的運算量。

靈活的宏塊排序(FMo)

??????? 靈活的宏塊排序FMO是H.264的一大特色,適用于H.264的基本檔次和擴展檔次的應用。H.264標準允許以各種方式將宏塊組成片,這樣做法的好處是:(1)減小幀內誤差傳播。由于標準禁止幀內預測在不同片之間進行,這樣可以避免一個包錯誤引起的錯誤傳播至下一個片。(2)有利于解碼端錯誤掩藏的實施。當丟失塊以棋盤格或行交織的形式出現(如圖2.1l所示)時,解碼端采用錯誤掩藏技術可以取得非常好的重建圖像。這是因為在對丟失塊進行錯誤掩藏時主要利用塊之間的平滑性來恢復,因此當丟失塊周圍的塊都完好時可以取得不錯的效果。在本文后面的試驗過程中,正是采用FMO中的棋盤格模式,使得丟失塊周圍有盡可能多的可參考宏塊用于錯誤恢復。

??????? 靈活的宏塊排序(FMO)可以看成是做片交織技術的一般形式,它可以任意定義片的形狀,其主要目的就是將錯誤均勻的分散到整幀而不是某個局部區域。圖2.11顯示的棋盤格和行交織式的FMO形式。當使用FMO時,參數集中將增加一個宏塊分配表(MBA.Map),且幀中的每個塊都將按照空間光柵掃描順序依次映射在宏塊分配表中,該塊在表中的數字代表了塊屬的片,在圖2.11中,“O"代表白色塊,“1"代表灰色塊。實際上,宏塊分配表支持任意形狀的宏塊組織方式:矩形、棋盤格式、交織行等。FMO的使用,雖然提高了抗誤碼性能,卻是以犧牲編碼效率為代價的。因為它打破了原先非鄰居MB之間的預測,這在高度優化的環境中,有比較高的延遲。

冗余片(Redundant Slice)

??????? 冗余片技術,簡單地講就是,在同一個比特流中,編碼器除了片自身中已編碼地宏塊放置其中外,同一宏塊地1個或多個冗余地表示也同時被放置其中,通過利用宏塊的1個或多個冗余表示來克服誤碼造成的不可用片對重構圖像的影響。需要注意的是,這些冗余片的編碼參數與非冗余片的編碼參數不同,例如主片可用低QP(高質量)來編碼,而冗余片信息可以用高QP(低質量)的方式編碼,這樣質量粗糙一些但碼率更低。解碼器在重構時,首先使用主片,如果它可用就拋棄冗余片;而如主片丟失(比如因為分組丟失)冗余片也能被用于重構。

??????? 從上面的說明可以看出,這種冗余片技術與基于冗余的傳輸,如包復制有著本質的區別。在包復制冗余傳輸中,被復制的包和復制包一摸一樣,而冗余片技術由于其編碼參數的選擇,具有較低的碼率。因此,這種技術是在花銷較小比特數的情況下,最大限度地保證重構圖像的質量,尤其是在有誤碼傾向的移動信道或IP信道環境下,采用冗余片技術可以顯著提高重構圖像的主客觀質量。

幀內編碼

??????? 幀間編碼由于充分利用了連續序列的幀間高度相關性,具有很高的編碼效率,但是同時也對誤碼非常敏感,且錯誤會在幀間迅速傳播,使圖像質量急劇惡化。與之相比,幀內編碼不以任何重建幀為參考,可以有效防止錯誤擴散問題。因此,H.264也采用幀內編碼宏塊作為一種抗誤碼的手段,并較之前標準做了改進。在H.264中,存在兩種完全由Intra編碼宏塊組成的片:傳統的幀內編碼Slice和IDR幀的Slice。IDR幀的片在進行幀內編碼時將完全清空短期參考幀緩存(Short-Term Reference FrameBuffer)內的數據,因此它可以完全去除解碼前面幀所帶來的積累誤差。對于傳統的幀內編碼Slice,僅可以去除前面解碼幀誤差對于本幀的影響,這是因為它沒有清空短期參考幀緩存,因此在此后幀解碼時仍將參考此Intra幀前面的已解碼幀,導致誤差或錯誤將向后傳播。從這個角度來說,這種Intra幀的同步性要弱于同為Intra編碼的IDR幀。

??????? 如果在視頻序列的編碼過程中,在一定時間間隔內插入IDR幀,不僅能改善解碼端的視頻重建質量,也能起到抑制誤碼擴散的作用。當然這是以犧牲編碼效率為代價的,多幀參考相對于單幀參考能較好的提高編碼效率。同時,幀內編碼相對于幀間編碼方式,其編碼效率也大大降低。H.264通過引入幀內編碼特別是IDR幀)的方式來提升碼流的錯誤恢復能力是以編碼效率為代價的。

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

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

相關文章

Linux統計文件行數、字數、字節數

2019獨角獸企業重金招聘Python工程師標準>>> 語法:wc [選項] 文件 說明:該命令統計給定文件中的字節數、字數、行數。如果沒有給出文件名,則從標準輸入讀取。wc同時也給出所有指定文件的總統計數。字是由空格字符區分開的最大字符…

tkinter中鼠標與鍵盤事件

tkinter中鼠標與鍵盤事件(十五) 本文轉自Tynam Yang的博客園 import tkinterwuya tkinter.Tk() wuya.title("wuya") wuya.geometry("300x2001020")bt tkinter.Button(wuya,text鼠標進入打印) bt.pack()def func(event):print(鼠…

html解析のBeautifulSoup

引子: 使用python爬蟲對爬取網頁進行解析的時候,如果使用正則表達式,有很多局限,比如標簽中出現換行,或者標簽的格式不規范,都有可能出現取不到數據,BeautifulSoup作為一個專門處理html格式的py…

【Tensorflow】人臉128個關鍵點識別基于卷積神經網絡實現

引言: 卷積神經網絡 卷積神經網絡最早是為了解決圖像識別的問題,現在也用在時間序列數據和文本數據處理當中,卷積神經網絡對于數據特征的提取不用額外進行,在對網絡的訓練的過程當中,網絡會自動提取主要的特征.卷積神經網絡直接用原始圖像的全部像素作為輸入,但是內…

python 爬蟲 包_python爬蟲學習之路-抓包分析

利用瀏覽器抓包,是爬蟲中的很實用的技能。在爬蟲編程之前,我們要對抓取的目標頁面有所了解,比如瀏覽器的這個請求這個頁面中間都經歷了什么,數據是怎么發送和返回的。 抓包的作用 我把抓包分析的作用簡單列一下: 分析請…

幀間EC原理和過程

出錯的宏塊(圖中灰色表示)根據上、下、左、右四個方向相鄰宏塊的不同分割情況及預測類型進行插值。將最后的結果中進行比較,選取邊界像素差值之和最小者為最優的EC方案。其步驟為: 1、判斷相鄰宏塊左上角8*8塊的預測模式是否大于R…

Maven依賴的是本地工程還是倉庫jar包?

相信大家都碰見過maven配置的依賴或者是jar包或者是工程,在開發的過程當中,我們當然需要引入的是工程,這樣查看maven依賴的文件的時候,就能直接查看到源碼。 一、本地工程依賴 舉個例子,其架構如下所示(以下…

關于django新版本無法使用MySQL數據庫的問題

關于django新版本無法使用MySQL數據庫的問題 參考這里 稍微記錄下Django2.2使用MariaDB和MySQL遇到的坑 現在演示一下整個流程吧 1.創建項目和應用 PS:你也可以使用PyCharm直接創建項目 2.注冊應用 先把剛剛創建的應用添加進去 3.配置MySQL或者MariaDB 4.PyMySQL替…

[轉]Spring事務tx:annotation-driven/

在使用SpringMVC的時候&#xff0c;配置文件中我們經常看到 annotation-driven 這樣的注解&#xff0c;其含義就是支持注解&#xff0c;一般根據前綴 tx、mvc 等也能很直白的理解出來分別的作用。<tx:annotation-driven/> 就是支持事務注解的&#xff08;Transactional&a…

【自動化測試】整理各種測試開發工具!持續更新

收集和整理各種測試工具&#xff0c;自動化測試工具&#xff0c;自動化測試框架&#xff0c;覺得有幫助記得三連一下。歡迎提交各類測試工具到本博客。 通用測試框架 JUnit: 最著名的xUnit類的單元測試框架&#xff0c;但是不僅僅可以做單元測試。TestNG: 更強大的Java測試框架…

python連接sql數據庫_python連接sql server數據庫實現增刪改查

簡述 python連接微軟的sql server數據庫用的第三方模塊叫做pymssql&#xff08;document&#xff1a;http://www.pymssql.org/en/stable/index.html&#xff09;。在官方文檔可以看到&#xff0c;pymssql是基于_mssql模塊做的封裝&#xff0c;是為了遵守python的DBAPI規范接口.…

es5.0 安裝head插件

es5.0的安裝和之前的版本有些區別,我的電腦用plugin install 沒成功, 查了一下資料,說是可以用grunt進行安裝,啟動; 1,先安裝grunt: grunt是一個很方便的構建工具&#xff0c;可以進行打包壓縮、測試、執行等等的工作&#xff0c;5.0里的head插件就是通過grunt啟動的。 npm ins…

Django后臺項目之用戶管理功能開發流程

項目功能開發流程 1 先寫列表頁&#xff08;加載出來數據就行&#xff09; ob User_vip.objects.filter(is_del004001).order_by(-cts)2 寫添加功能 2.1 創建addOrDoadd視圖方法 2.2 添加訪問addOrDoadd的路由 2.3 在index.html頁面吧添加的按鈕的鏈接不全 <a style&…

套接字 資料查閱

(3)套接字(socket) 一個完整的網絡應用程序包括客戶端和服務器兩個部分。網間通信進程需要由兩個進程組成&#xff0c;并且只能用同一種協議。也就是說&#xff0c;不能在通信的一端使用TCP協議&#xff0c;而另一端則用UDP協議。一個完整的網絡通信需要一個五元組來標識…

linux mysql安裝_Linux下安裝mysql服務(超詳細)

Mysql數據庫的安裝對于開發者來說&#xff0c;是我們必然會面對的問題&#xff0c;它的安裝過程其實并不復雜&#xff0c;并且網絡上的安裝教程也非常多&#xff0c;但是對于新手來說&#xff0c;各種不同形式的安裝教程&#xff0c;又給新手們帶來了要選擇哪種方式進行安裝的難…

dash 和 bash 切換

#先看看是用的哪個 shellls -al /bin/sh #如果是dash&#xff0c;切換到bashsudo ln -fs /bin/bash /bin/sh轉載于:https://www.cnblogs.com/abolide/p/6874265.html

Django中使用ajax技術概述

ajax 1.什么是ajax ajax就是在不刷新整個頁面的情況下&#xff0c;去更新局部頁面的內容&#xff08;無刷新技術&#xff09; 2.ajax有什么優點 最大的一點是頁面無刷新&#xff0c;在頁面內與服務器通信&#xff0c;給用戶的體驗非常好。 使用異步方式與服務器通信&#x…

IE、FF腳本兼容性問題

1.window.event IE有這個對象&#xff1b;FF沒有&#xff0c;FF通過參數傳遞 2.獲取事件源 IE&#xff1a;srcElement FF&#xff1a;target 3.添加與去除事件 IE&#xff1a;element.attachEvent("onclick", function(){}) element.detachEvent("onclick"…

ARM MOV和 LDR指令關系

ARM是RISC結構&#xff0c;數據從內存到CPU之間的移動只能通過L/S指令來完成&#xff0c;也就是ldr/str指令。比如想把數據從內存中某處讀取到寄存器中&#xff0c;只能使用ldr比如&#xff1a;ldr r0, 0x12345678就是把0x12345678這個地址中的值存放到r0中。而mov不能干這個活…

day2 操作系統

一.為何要有操作系統 程序員無法把所有的硬件操作細節都了解到&#xff0c;管理這些硬件并且加以優化使用是非常繁瑣的工作&#xff0c;這個繁瑣的工作就是操作系統來干的&#xff0c;有了他&#xff0c;程序員就從這些繁瑣的工作中解脫了出來&#xff0c;只需要考慮自己的應用…