国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FFmpeg 解碼 H.264 視頻出現(xiàn)花屏和馬賽克的解決辦法

這篇具有很好參考價值的文章主要介紹了FFmpeg 解碼 H.264 視頻出現(xiàn)花屏和馬賽克的解決辦法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

FFmpeg 解碼 H.264 視頻出現(xiàn)花屏和馬賽克的解決辦法

四個可能的原因

  1. 發(fā)送數(shù)據(jù)包太大,超過了 FFmpeg 的默認最大值。
  2. 網(wǎng)絡(luò)情況較差時,因網(wǎng)絡(luò)狀況出現(xiàn)的丟包。
  3. 解碼出錯。
  4. 包亂序。

原因一的解決方法

一種方法是控制播放源的發(fā)送數(shù)據(jù)大小,但這極大浪費了當前的網(wǎng)絡(luò)帶寬,非優(yōu)選方案。

更好的做法是擴大接收端的接收緩沖區(qū),其修改方法為:

在 FFmpeg 的源碼中,找到 udp.c 文件并修改 UDP_MAX_PKT_SIZE 默認值。

ffmpeg 推流花屏,音視頻,面試,ffmpeg,h.264,音視頻

這里將 UDP_MAX_PKT_SIZE × 10,將緩沖區(qū)擴大了10倍。

原因二的解決方法

排查方法:

  1. 設(shè)全局變量:在丟包時將全局變量置為不同的值,最后在使用的地方根據(jù)全局變量的值來判斷該幀是否完整,全局變量可在 FFmpeg 任意的頭文件中設(shè)置(比如 avcodec.h)。
  2. 修改rtpdec.c文件包含 missed %d package 的地方,這里出現(xiàn)丟包,需修改代碼,對幀序號作標記。

在接收端根據(jù)RTP包的SeqNumber來判斷是否丟包,如果丟包就標記一下。在mark為1或時間戳改變的時候,說明一幀結(jié)束了,此時如果標記為丟包了,就扔掉數(shù)據(jù),沒有丟包就給解碼器。如果丟包的幀為I幀,則不僅丟掉當前I幀,此I幀之后的P幀也要丟掉,也就是說在下一個I幀到來之前,所有過來的包都丟掉,然后開始判斷收到的RTP包是不是I幀。

判斷函數(shù):

static bool isH264iFrame(byte[] paket)
{
	int RTPHeaderBytes = 0;

	int fragment_type = paket[RTPHeaderBytes + 0] & 0x1F;
	int nal_type = paket[RTPHeaderBytes + 1] & 0x1F;
	int start_bit = paket[RTPHeaderBytes + 1] & 0x80;

	if (((fragment_type == 28 || fragment_type == 29) && nal_type == 5 && start_bit == 128) ||
		fragment_type == 5 || fragment_type == 7 || fragment_type == 8)
	{
		return true;
	}

	return false;
}

原因三的解決方法

排查方法:

  1. 設(shè)全局變量:在解碼出錯時將全局變量置為不同的值,最后在使用的地方根據(jù)全局變量的值來判斷該幀是否完整,全局變量可在 FFmpeg 任意的頭文件中設(shè)置(比如 avcodec.h)。
  2. 修改error_resilience.c文件 包含concealing %d DC, %d AC, %d MV errors in %c frame的地方。這里出現(xiàn)解包錯誤,需標記。
  3. 修改h264_cavlc.c文件中包含 Invalid level prefix處 這里出錯,需標記。
    修改h264_cavlc.c文件中包含dquant out of range處,出錯,需標記。
    修改h264_cavlc.c文件中包含corrupted macroblock處,出錯,需標記。
    修改h264_cavlc.c文件中包含negative number of zero coeffs at處,出錯,需標記。
    修改h264_cavlc.c文件中包含mb_type %d in %c slice too large at %d %d處,出錯,需標記。
    修改h264_cavlc.c文件中包含cbp too large處,出錯,需標記。
  4. 修改error_resilience.c文件中包含Cannot use previous picture in error concealment處,出錯,需標記。
    修改error_resilience.c文件中包含Cannot use next picture in error concealment處,出錯,需標記。
  5. 修改h264.c文件中包含out of range intra chroma pred mode at處,出錯,需標記。
    修改h264.c文件中包含top block unavailable for requested intra mode at處,出錯,需標記。
    修改h264.c文件中包含left block unavailable for requested intra mode at處,出錯,需標記。
  6. 修改h264_slice.c文件中包含error while decoding MB處,出錯,需標記。
  7. 修改svq3.c文件中包含error while decoding MB處,出錯,需標記。

當我們從網(wǎng)絡(luò)中接收到RTP包,去了包頭,拿到Payload數(shù)據(jù)之后一般就會送去解碼,但是如果直接送去解碼器解碼,很可能會出現(xiàn)花屏。這個問題我很早就遇到過,當時查閱過資料,發(fā)現(xiàn)送給H264解碼器的必須是一個NALU單元,或者是完整的一幀數(shù)據(jù)(包含H264 StartCode),也就是說我們拿到Payload數(shù)據(jù)之后,還要將分片的數(shù)據(jù)組成一個NALU或完整的一幀之后才送給解碼器。

原因四的解決方法

打印RTP包的SeqNumber看有沒有不連續(xù)或亂序的問題,如果是用UDP傳輸,則RTP包容易發(fā)生亂序,需要對包按順序進行重組再解碼。文章來源地址http://www.zghlxwxcb.cn/news/detail-859026.html

參考

  1. https://blog.csdn.net/zhoubotong2012/article/details/103002257
  2. https://blog.csdn.net/c_base_jin/article/details/106772949
  3. https://blog.csdn.net/sz76211822/article/details/87797475
  4. https://www.ebaina.com/articles/140000016765

到了這里,關(guān)于FFmpeg 解碼 H.264 視頻出現(xiàn)花屏和馬賽克的解決辦法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 馬賽克處理

    馬賽克處理

    去取馬賽克的網(wǎng)址: Redact ? Photo - Free And Private Image Redaction In The Browser https://redact.photo/ REDACT.PHOTO ?(照片馬賽克處理在線工具)簡介 REDACT.PHOTO是一個照片馬賽克處理在線工具,能夠幫助我們非常方便的為照片搭上馬賽克,并且完全免費,而且該在線工具采用的馬賽克是隨機

    2024年02月05日
    瀏覽(25)
  • 圖像處理: 馬賽克藝術(shù)

    圖像處理: 馬賽克藝術(shù)

    ?馬賽克 ? ? ??藝術(shù)中的一種表面裝飾,由緊密排列的、通常顏色各異的小塊材料(如石頭、礦物、玻璃、

    2024年02月07日
    瀏覽(19)
  • Pooling與馬賽克的秘密

    Pooling與馬賽克的秘密

    ??說到Pooling,相信學(xué)習(xí)過CNN的朋友們都不會感到陌生。Pooling在中文當中的意思是“池化”,在神經(jīng)網(wǎng)絡(luò)當中非常常見,通常用的比較多的一種是Max Pooling,具體操作如下圖: ?? 結(jié)合圖像理解,相信你也會大概明白其中的本意。不過Pooling并不是只可以選取2x2的窗口大小,

    2024年02月05日
    瀏覽(29)
  • ps導(dǎo)出bmp|jpg馬賽克

    ps導(dǎo)入圖片-濾鏡-像素化-馬賽克 圖像-模式-索引顏色-確定合并 文件-存儲為-導(dǎo)出bmp格式 備注: 封面來源于免費素材網(wǎng)2.8 million+ Stunning Free Images to Use Anywhere - Pixabay - Pixabay ai馬賽克網(wǎng)站PixelMe : Convert your photo into pixelart. (pixel-me.tokyo))

    2024年02月12日
    瀏覽(21)
  • ArcGIS三體陰影(影像三維)顯示馬賽克?

    ArcGIS三體陰影(影像三維)顯示馬賽克?

    我們經(jīng)?;贏rcGIS通過DEM來做山體陰影 但是有時候你一放大就會出現(xiàn)很強的馬賽克的效果 還有我們在利用ArcScene建三維場景 即使數(shù)據(jù)分辨率很高也會出現(xiàn)馬賽克效果 那怎么來解決這個問題呢 讓我們的山體陰影顯示更加細膩 三維沒有馬賽克的效果呢? 右鍵圖層選擇如下顯示

    2024年02月01日
    瀏覽(25)
  • AI 繪畫 | Stable Diffusion 去除照片馬賽克

    AI 繪畫 | Stable Diffusion 去除照片馬賽克

    本篇文章教會你如何讓幾秒鐘去除圖片中的馬賽克,還是依托于Stable Diffusion WEB UI的強大擴展插件ControlNet,快來學(xué)起來吧,如果有問題請在評論區(qū)留言。 首先在圖生圖,選擇一個寫實風(fēng)格的大模型(我這里選擇是majicMIX realistic 麥橘寫實_v7.safetensors,你也可以到 https://www.libli

    2024年02月03日
    瀏覽(31)
  • 【Unity ShaderGraph】| 如何快速制作一個 馬賽克效果 實戰(zhàn)

    【Unity ShaderGraph】| 如何快速制作一個 馬賽克效果 實戰(zhàn)

    前言 本文將使用Unity 的ShaderGraph制作一個 馬賽克 的效果,可以直接拿到項目中使用。 對ShaderGraph還不了解的小伙伴可以參考這篇文章:【Unity ShaderGraph】| Shader Graph入門介紹 | 簡介 | 配置環(huán)境 | 窗口介紹 | 簡單案例 下面就開始看一下具體的制作流程,然后自己動手制作一個吧

    2024年02月08日
    瀏覽(22)
  • 通過Python的PIL庫給圖片添加馬賽克

    通過Python的PIL庫給圖片添加馬賽克

    大家好,我是空空star,本篇給大家分享一下通過Python的PIL庫給圖片添加馬賽克。 Pillow是一個Python圖像處理庫,它是Python Imaging Library(PIL)的一個分支。Pillow提供了廣泛的圖像處理功能,包括圖像格式轉(zhuǎn)換、圖像增強、圖像濾波、圖像調(diào)整、圖像合成等。使用Pillow,開發(fā)人員

    2024年02月06日
    瀏覽(28)
  • OpenCV輕松入門(六)——簡單圖片處理【馬賽克、毛玻璃、浮雕效果】

    OpenCV輕松入門(六)——簡單圖片處理【馬賽克、毛玻璃、浮雕效果】

    馬賽克效果 馬賽克指現(xiàn)行廣為使用的一種圖像(視頻)處理手段,此手段將影像特定區(qū)域的色階細節(jié)劣化并造成色塊打亂的效果,因為這種模糊看上去有一個個的小格子組成,便形象的稱這種畫面為馬賽克。其目的通常是使之無法辨認。 下面,我們來介紹一下實現(xiàn)馬賽克的思

    2024年04月14日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包