關鍵幀 關于decode_one_frame函數

田克平(94338047) 16:57:34
能自己設置某幀為關鍵幀嗎?
抱柱者(86311414) 16:57:59
to 田克平
可以
田克平(94338047) 17:00:00
呵呵,把丟包后的下一幀設置為I幀可以嗎?來處理丟幀現象
☆雪天/kf☆(279373002) 17:00:42
這個難度大了
田克平(94338047) 17:01:15
難度在哪?
抱柱者(86311414) 17:01:53
如果1to1那應該可行,但是要是傳到多點那可能比較麻煩
田克平(94338047) 17:03:54
謝謝
抱柱者(86311414) 17:04:05
比如傳至A、B兩點,到A的丟包很少,而到B丟包較多,那A也要因為B點而經常接受關鍵幀
抱柱者(86311414) 17:04:29
不過你也可以現象折中的方法
抱柱者(86311414) 17:04:38
不過你也可以想想折中的方法
田克平(94338047) 17:04:48
就1to1的話、、、
田克平(94338047) 17:05:11
怎么做
抱柱者(86311414) 17:05:22
就像你說的做啊
抱柱者(86311414) 17:05:50
丟包了就通知編碼端,下一幀編為關鍵幀
田克平(94338047) 17:06:07
好的,謝謝
☆雪天/kf☆(279373002) 17:06:16
田克平(94338047) 17:00:00
呵呵,把丟包后的下一幀設置為I幀可以嗎?來處理丟幀現象

編碼的時候你怎么會知道哪一幀會丟?


☆雪天/kf☆(279373002) 17:07:55
除非你有反饋通道
抱柱者(86311414) 17:08:58
肯定是反饋啊,正常可能是丟包了就通知編碼端重發,現在改為通知編碼端設置關鍵幀
傻子更聰明(120928606) 17:09:43
這樣好象實時性比較差啊,也難免不會再被丟。
呵呵(369873095) 17:10:11
網絡的來回時間考慮了嗎(RTT)
☆雪天/kf☆(279373002) 17:10:15
這樣效率很低呀
☆雪天/kf☆(279373002) 17:10:25
你編碼器一直要等在那里
抱柱者(86311414) 17:11:07
他是設置下一幀為關鍵幀,而不是處理丟了的那一幀,所以實時性應該沒有問題
田克平(94338047) 17:11:09
丟包了不通知嗎
☆雪天/kf☆(279373002) 17:11:21
兩次傳輸路徑時間+解碼器處理時間 編碼器無法并行
☆雪天/kf☆(279373002) 17:12:25
就是說你反饋回來的時候 編碼器已經編到后面去了 丟的哪一幀后面的一幀 早編完了
抱柱者(86311414) 17:12:57
編碼器為什么要等?
編碼器就按正常的編碼,如果解碼器反饋丟包了,應用程序就修改編碼參數設置關鍵幀,與并行扯不上關系
田克平(94338047) 17:12:58
好像是這樣啊
傻子更聰明(120928606) 17:14:09
網絡UDP不可靠傳輸,多少秒來一個關鍵幀比較合適?
抱柱者(86311414) 17:14:16
為什么要局限于下一幀,下兩幀也沒關系啊
抱柱者(86311414) 17:14:35
反正只是要盡快出現一個關鍵幀就行了
☆雪天/kf☆(279373002) 17:15:13
你說的沒錯 但是一個反饋的時間編碼器可能已經編碼了好多幀了
☆雪天/kf☆(279373002) 17:15:56
所以只能說是一接到反饋就立即置I幀
☆雪天/kf☆(279373002) 17:22:06
可以結合周期插入I幀一起來用 周期可以大一點

田克平(94338047) 17:23:10
關鍵幀間隔是定好的、、、
抱柱者(86311414) 17:23:15
肯定是會有固定關鍵幀周期的
傻子更聰明(120928606) 17:23:48
這種方法是在關鍵幀間隔比較大的情況下可以用。
田克平(94338047) 17:24:42
2s間隔有什么問題
傻子更聰明(120928606) 17:25:06
而且非關鍵幀丟失后怎么處理?會有花屏之類的。
傻子更聰明(120928606) 17:25:39
把導致花屏的幀丟掉后,圖象會有停頓。
田克平(94338047) 17:25:52
間隔很小的話當然是作用不大
☆雪天/kf☆(279373002) 17:25:58
那也沒有辦法 只能跳到下一個I幀
呵呵(369873095) 17:26:24
在碼率大的時候,一幀的數據都是由幾十個包承載的,多個包里掉一個包(幾個包)是否反饋要求I幀
☆雪天/kf☆(279373002) 17:27:21
那倒不用 使用EC足夠應付了
傻子更聰明(120928606) 17:27:22
網絡傳輸應該不用I幀吧?把I幀全變為IDR幀,這樣才有意義。
sunj(39310543) 17:28:42
這個問題有rfc來定義的
傻子更聰明(120928606) 17:28:42
錯誤掩藏,解碼器不支持的話,怎么整。也需要編碼器支持吧?。
sunj(39310543) 17:28:52
消息已經標準化了
☆雪天/kf☆(279373002) 17:29:34
簡單的塊copy就可以搞定這個了 不需要編碼器做什么
傻子更聰明(120928606) 17:31:12
這樣子,也是會引起連續的失真。。

☆雪天/kf☆(279373002) 17:22:06
可以結合周期插入I幀一起來用 周期可以大一點

田克平(94338047) 17:23:10
關鍵幀間隔是定好的、、、
抱柱者(86311414) 17:23:15
肯定是會有固定關鍵幀周期的
傻子更聰明(120928606) 17:23:48
這種方法是在關鍵幀間隔比較大的情況下可以用。
田克平(94338047) 17:24:42
2s間隔有什么問題
傻子更聰明(120928606) 17:25:06
而且非關鍵幀丟失后怎么處理?會有花屏之類的。
傻子更聰明(120928606) 17:25:39
把導致花屏的幀丟掉后,圖象會有停頓。
田克平(94338047) 17:25:52
間隔很小的話當然是作用不大
☆雪天/kf☆(279373002) 17:25:58
那也沒有辦法 只能跳到下一個I幀
呵呵(369873095) 17:26:24
在碼率大的時候,一幀的數據都是由幾十個包承載的,多個包里掉一個包(幾個包)是否反饋要求I幀
☆雪天/kf☆(279373002) 17:27:21
那倒不用 使用EC足夠應付了
傻子更聰明(120928606) 17:27:22
網絡傳輸應該不用I幀吧?把I幀全變為IDR幀,這樣才有意義。
sunj(39310543) 17:28:42
這個問題有rfc來定義的
傻子更聰明(120928606) 17:28:42
錯誤掩藏,解碼器不支持的話,怎么整。也需要編碼器支持吧?。
sunj(39310543) 17:28:52
消息已經標準化了
☆雪天/kf☆(279373002) 17:29:34
簡單的塊copy就可以搞定這個了 不需要編碼器做什么
傻子更聰明(120928606) 17:31:12
這樣子,也是會引起連續的失真。。

?

?

main()
{
...
???? while (decode_one_frame(img, input, snr) != EOS);
...
}

然后在decode_one_frame()

{
???? ...
??? currSlice->next_header = -8888;
??? .....
???? while ((currSlice->next_header != EOS && currSlice->next_header != SOP))
???? {
??????????? current_header = read_new_slice();
??????????? if (current_header == EOS)
??????????? {
????????????????? exit_picture();
????????????????? return EOS;
???????????? }
??????????? decode_slice(img, inp, current_header);
???????????????? ...
?????? }
???? ...
???? exit_picture();
???? return (SOP);
}

按照上面的代碼,經過跟蹤發現,currSlice->next_header 一直不變,那么decode_one_frame()中的while循環永遠不會因為條件的不滿足而跳出循環,只會因為current_header == EOS條件的滿足而推出該函數。
因此 decode_one_frame()函數只可能返回EOS,而不會是SOP;那么main()中的while循環將只會執行一次。而且在代碼跟蹤的過程中發現,輸入碼流的所有序列是在decode_one_frame()函數中全部解出,然后才推出該函數。
請教各位,jm為什么要這樣呢?還是我什么地方沒注意到?謝謝了

A:再次仔細跟蹤了一下代碼發現,jm整個解碼的結構是這樣的:
1。在main中調用while (decode_one_frame(img, input, snr) != EOS);
但實際上,這個while只會循環一次,因為decode_one_frame()只可能返回EOS(下面講為什么?)
2。在decode_one_frame()中通過調用
??? while ((currSlice->next_header != EOS && currSlice->next_header != SOP))
??? {
?? ?? ?? current_header = read_new_slice();
?? ?? ?? if (current_header == EOS)
?? ?? ?? {
?? ?? ?? ?? ?? exit_picture();
?? ?? ?? ?? ?? return EOS;
?? ?? ?? }
?? ?? ?? decode_slice(img, inp, current_header);
?? ?? ?? ?? ??? ...
?? }
解碼所有幀。如上所述,currSlice->next_header根本沒有起到任何作用,因為沒有其他地方為 其賦值,為什么呢?
因為如果要想知道next_header必須要將下一個slice碼流讀進來,再進行解析,既然已經讀進來,不管判斷的是一個新的pic,還是同一個pic中的新的slice,都必須立刻進行解碼,也就沒有必要再回到main()中的while循環了。
實際上起作用的是current_header,即通過read_new_slice()來獲得,(sop or sos):
?? ??? if(is_new_picture())
?? ??? {
?? ?? init_picture(img, input);

?? ?? current_header = SOP;//start of pic
?? ??? }
?? ??? else
?? ?? current_header = SOS;//start of slice

如果current_header=sop,那么將會調用init_picture(),這個函數主要實現兩個功能:首先,通過exit_picture()把上一次解碼的圖像及相關信息進行保存等處理 然后,再為當前slice(新的一幀)的解碼做好準備。如果current_header=sos,那么將不會調用init_picture(),直接利用當前pic的準備信息進行解碼。如果在read_new_slice()中發現已經到碼流的結尾了,那么將返回EOS.


這時在decode_one_frame()中,一旦current_header==EOS,那么將退出解碼,返回到main()中來。值得注意的是,返回之前,它還是調用了exit_picture(),從而將最后一個解碼幀進行保存。

大概流程應該就是這樣,如果有漏掉或錯誤的地方還請高手補充指正。總之jm中的有些函數的內容并不一定與其函數名稱相吻合,這可能也是他們開發到后期沒有辦法的事情。不知道x264或其他的解碼器是不是如此復雜?

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

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

相關文章

不出現php version網頁_php冷知識 - 從命令行參數列表中獲取選項

分享一個php的冷知識 - ,從命令行參數列表中獲取選項用到的函數是getopt 說明函數簽名是這樣的getopt ( string $options [, array $longopts [, int &$optind ]] ) : array|bool false解析傳入腳本的選項,成功返回數組,解析失敗返回fals…

【機器學習】opencv-攝像頭中的人臉采集

本次在視頻識別的程度上增添了攝像頭實時識別, 區別在于: # v cv2.VideoCapture(./dzd2.mp4) v cv2.VideoCapture(0) import numpy as npimport cv2face_detector cv2.CascadeClassifier(./haarcascade_frontalface_alt2.xml) # v cv2.VideoCapt…

[計算機視覺][神經網絡與深度學習]Faster R-CNN配置及其訓練教程2

faster-rcnn分為matlab版本和python版本,首先記錄弄python版本的環境搭建過程.matlab版本見另一篇:faster-rcnn(testing): ubuntu14.04caffecuda7.5cudnn5.1.3opencv3.0matlabR2014a環境搭建記錄 首先,進入官方github網站:https://github.com/rbgirshick/py-faster-…

modbus從站模擬軟件_作為工控電氣人,你知道我們必備的軟件有哪些嗎?

作為工控電氣人,你知道我們必備的軟件有哪些嗎?今天我就來給大家介紹一下,工控電氣人常用的幾款軟件,有了它們,我們的工作學習將會更易上手,效率翻倍。以下介紹主要是分為電工常用軟件,PLC編程軟…

錯誤檢測dP-bitstream-ei_flag runRestrictRef

JM86模型,對于錯誤檢測,dP->bitstream->ei_flag在什么情況下置1?還是無錯的時候dP->bitstream->ei_flag0,有錯時dP->bitstream->ei_flag等于一個較大的無效值? 看下所有給 dP->bitstream->ei_…

【數據分析】豆瓣電影Top250爬取的數據的可視化分析

豆瓣Top250網址 將之前爬取到的豆瓣電影進行簡單的可視化: 數據列表保存為CSV格式,如圖 導入數據 做好準備 #!-*- coding:utf-8 -*- import pandas as pd import numpy as np import matplotlib.pylab as plt import re from numpy import rank from bu…

sqlmap的二次開發

1、sqlmapapi的幫助信息。 -s 啟動sqlmap作為服務器 -h 指定sqlmap作為服務器的IP地址,默認127.0.0.1 -p 指定sqlmap服務器的端口,默認端口為8775 2、啟動服務 瀏覽器訪問: 3、api介紹:sqlmap項目下的api.py文件含有所有的api adm…

Django創建第一個應用

Django創建第一個應用 1,創建應用 Django自帶一個實用程序,可以自動生成應用程序的基本目錄結構,因此您可以專注于編寫代碼而不是創建目錄。 要創建您的應用程序,請確保您與目錄位于同一目錄,manage.py 并鍵入以下命令&#xff1…

docker nginx配置_docker隨手筆記第十二節 jenkins+docker+nginx+純靜態頁面配置

docker隨手筆記第一節 docker概念及安裝docker隨手筆記第二節 docker常用命令解析docker隨手筆記第三節 docker構建java鏡像docker隨手筆記第四節 docker安裝mysql5.7docker隨手筆記第五節 docker安裝redis4.0docker隨手筆記第六節 docker安裝jenkinsdocker隨手筆記第七節 jenk…

【機器學習】邏輯斯蒂回歸原理

邏輯斯蒂函數 引入: 在線性感知器算法中,我們使用了一個f(x)x函數,作為激勵函數,而在邏輯斯蒂回歸中,我們將會采用sigmoid函數作為激勵函數,所以它被稱為sigmoid回歸也叫對數幾率回歸(logistic …

。。。。。etc 時域錯誤隱藏個人理解

三個文件名以 erc 開頭的文件就是 EC 相關的文件。EC 的入口在 exit_picture 函數中,從 ercStartSegment 開始到 ercConcealInterFrame 結束。你自己做一個丟包之后的碼流,把程序跑起來跟蹤一下 EC 過程,慢慢分析代碼。 錯誤隱藏過程在整個幀…

手機影音第十一天,顯示視頻緩沖,顯示卡頓時的網速,播放系統視頻時調用播放器的選擇...

代碼已經托管到碼云,有興趣的小伙伴可以下載看看https://git.oschina.net/joy_yuan/MobilePlayer一、設置視頻緩沖進度顯示視頻播放進度的效果圖如下:灰色的是緩沖的進度。原理:只有播放網絡視頻時,才有緩沖這個說法,所…

Django之創建應用以及配置路由

Django之創建應用以及配置路由 配置所有IP都可以訪問你的項目 1.進入manage.py同級的my_web里面的settings.py的文件 2.在文件的第28行把ALLOWED_HOSTS []改成ALLOWED_HOSTS [*] 注意:*代表的是所有IP都可以訪問 創建一個app應用 在終端中,結束項目…

python中opencv是什么_python-opencv的用法

#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 # 接收兩個參數,一個是文件名,一個值,如果值為1,接收的是彩色圖片,如果值為零,接受的是灰度圖片。會有一個返回值&#xff0c…

openjudge 14:求10000以內n的階乘

14:求10000以內n的階乘 總時間限制:5000ms內存限制:655360kB描述求10000以內n的階乘。 輸入只有一行輸入&#xff0c;整數n&#xff08;0<n<10000&#xff09;。輸出一行&#xff0c;即n!的值。樣例輸入100 樣例輸出933262154439441526816992388562667004907159682643816…

【Tensorflow】卷積神經網絡實現藝術風格化通過Vgg16實現

卷積神經網絡實現藝術風格化 基于卷積神經網絡實現圖片風格的遷移&#xff0c;可以用于大學生畢業設計基于python&#xff0c;深度學習&#xff0c;tensorflow卷積神經網絡&#xff0c; 通過Vgg16實現&#xff0c;一幅圖片內容特征的基礎上添加另一幅圖片的風格特征從而生成一幅…

抗誤碼技術

抗誤碼技術&#xff1a; 視頻傳輸過程中的錯誤是不可避免的&#xff0c;抗誤碼技術歷來都足視頻領域一個研究的熱點。H264標準繼承r以前視頻編碼標準中某些優秀的錯誤恢復工具&#xff0c;同時也改進和創新了多種錯誤恢復丁具。這些錯誤恢復的工具主要有&#xff1a;參數集、數…

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

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

tkinter中鼠標與鍵盤事件

tkinter中鼠標與鍵盤事件&#xff08;十五&#xff09; 本文轉自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

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