當前位置:首頁 » 文件管理 » vlc設置幀緩存大小

vlc設置幀緩存大小

發布時間: 2023-09-18 21:32:34

⑴ vlc的pts是怎麼計算的

H264的ES原始數據一般是以NAL(Network Abstract Layer)的格式存在。可以直接用於文件存儲和網路傳輸。每一個NALU(Network Abstract Layer Unit)數據,是由數據頭+RBSP數據組成。

首先需要將數據流,分割成一個一個獨立的NALU數據。

接著獲取NALU的nal_type,i_nal_type的值等於0x7表示這個nalu是個sps數據包。找到並解析這個sps數據包,裡麵包含有非常重要的幀率信息
time_scale/num_units_in_tick=fps

然後根據nal_type判斷slice(H264中的slice類似一個幀FRAME的概念)。其中nal_type值小於0x1,或大於0x5,表示這個NALU屬於一個slice。
// 檢查是否是slice if ( i_nal_type < 1/*NAL_SLICE*/ || i_nal_type > 5/*NAL_SLICE_IDR*/ ) // 找到slice!!!!!

在找到slice的NALU後,可以逐位元組將NALU的數據與0x80進行與運算,結果為真表示這個slice(幀FRAME)的結束位置。
// 判斷是否幀結束 for (uint32_t i = 3; i < nal_length; i++) { if (p_nal[i] 0x80) { // 找到frame_begin!!!!上一幀frame的結束,下一幀frame的開始 } }

上面的這個代碼是摘抄自FFMPEG。他實際作用是判斷slice裡面的first_mb_in_slice,即第1個宏塊在slice中的位置,如果是
一幀開始,這個欄位的值肯定是標識第1個宏塊。因此,也可以完整解析slice的頭部信息,解析出first_mb_in_slice,如果是0(注意:
這是1個哥倫布數值),即這個NALU是一幀的開始。

為什麼這里的代碼是逐位元組判斷0x80?我額外寫點某大神的名言:程序猿不是十萬個為什麼,不是維基猿,程序猿是需求猿。如果某程序猿已經著手開始研究如何解析slice頭部格式,他很自然的不會有這個疑問。

另外通過nal_type以及silice_type也可以判斷出幀結束位置,VLC裡面的代碼就是這么干。

解析到位於幀結束位置的NALU,就可以判斷出每一幀(slice)的開始和結尾。解析slice的slice_type,根據slice_type,可以判斷出這個slice的IPB類型。
// 根據slice類型判斷幀類型 switch(slice.i_slice_type) { case 2: case 7: case 4: case 9: *p_flags = 0x0002/*BLOCK_FLAG_TYPE_I*/; break; case 0: case 5: case 3: case 8: *p_flags = 0x0004/*BLOCK_FLAG_TYPE_P*/; break; case 1: case 6: *p_flags = 0x0008/*BLOCK_FLAG_TYPE_B*/; break; default: *p_flags = 0; break; }

從現在開始,就有兩種辦法來計算PTS了。

方法一、根據前後幀的IPB類型,可以得知幀的實際顯示順序,使用前面獲取的sps信息中的幀率,以及幀計數frame_count即可計算出PTS。此方法需要做幾幀緩存(一般緩存一個group的長度)。

I P B B I P B B I P B 幀類型
1 2 3 4 5 6 7 8 9 10 11 第幾幀
1 4 2 3 5 8 6 7 9 12 10 幀顯示順序

一個I幀與下一個I幀之間,是一個group。
從上圖可見,P類型的幀的顯示順序,是排在後面最後一個B幀之後。
所以要獲取第7幀的pts,起碼要知道他下一幀的類型,才能得知他的顯示順序。

第8幀的pts=1000(毫秒)*7(幀顯示順序)*幀率

方法二、每一個slice的信息裡面,都記錄有pic_order_cnt_lsb,當前幀在這個group中的顯示順序。通過這個pic_order_cnt_lsb,可以直接計算出當前幀的PTS。此方法不需要做幀緩存。

計算公式:

pts=1000*(i_frame_counter + pic_order_cnt_lsb)*(time_scale/num_units_in_tick)

i_frame_counter是最近一次I幀位置的幀序,通過I幀計數+當前group中的幀序,得到幀實際顯示序列位置,乘上幀率,再乘上1000(毫秒)的base_clock(基本時鍾頻率),得到PTS。

I P B B I P B B I P B 幀類型
1 2 3 4 5 6 7 8 9 10 11 第幾幀
1 4 2 3 5 8 6 7 9 12 10 幀顯示順序
0 6 2 4 0 6 2 4 0 6 2 pic_order_cnt_lsb

細心一點可以注意到,在上圖,slice裡面的pic_order_cnt_lsb是以2進行遞增。
通常H264裡面的sps中記錄的幀率,也是實際幀率的2倍time_scale/num_units_in_tick=fps*2

因此,實際的計算公式應該是這樣
pts=1000*(i_frame_counter*2+pic_order_cnt_lsb)* (time_scale/num_units_in_tick)
或者是
pts=1000*(i_frame_counter+pic_order_cnt_lsb/2)* (time_scale/num_units_in_tick/2)

所以,第11幀的pts應該是這么計算
1000*(9*2+2)*(time_scale/num_units_in_tick)

⑵ 手機上的vlc怎麼使用

必須輸入視頻詳細網路ip地址才可以使用。說到ios版本的VLC播放器,就不能不提到其本身其PC端的軟體,號稱全平台兼容的萬能播放器,支持大部分的主流視頻格式。ios版本的VLC播放器視頻來源:網路流媒體:對於普通用戶來說,不適用且相當繁瑣,必須輸入視頻詳細網路ip地址才可以被識別出來。

拓展資料

VLC多媒體播放器(最初命名為VideoLAN客戶端)是VideoLAN計劃的多媒體播放器。它支持眾多音頻與視頻解碼器及文件格式,並支持DVD影音光碟,VCD影音光碟及各類流式協議。它也能作為unicast或 multicast的流式伺服器在IPv4或 IPv6的高速網路連接下使用。

VLC Media Player 是一款可播放大多數格式,而無需安裝編解碼器包的媒體播放器。可以播放 MPEG-1、MPEG-2、MPEG-4、DivX、DVD/VCD、數字衛星頻道、數字地球電視頻道(digital terrestrial television channels)、在許多作業平台底下透過寬頻 IPv4、IPv6 網路播放線上影片。

⑶ VLC media player無法刪除播放過的直播源地址嗎

首先將一個性能好的電腦作為轉發伺服器,運行VLC Media Player軟體,在菜單欄里,通過[文件]→[打開文件],選擇[網路],選「HTTP/HTTPS/FTP/MMS」傳輸協議,在網址填寫框內填寫需要播放衛星節目的網址,網上的教程均介紹應該填寫「 xxx/video.m3u」,但發現不能成功,正確的方式應該填寫衛星節目的詳細網址,這就和在WEB頁面調用VLC Media Player軟體時,必須先下載後方能播放成功是一樣的道理。

如何知道衛星節目的詳細網址呢?以我們轉發70.5°E的「Trace TV」音樂頻道為例,具體方法如下:

首先進入DM500S接收機的WEB管理控制界面,選擇「Trace TV」頻道,點擊「VLC」,待下載完成後點擊播放,此時出現VLC Media Player軟體播放該頻道的界面。在菜單欄里,通過[查看]→[串流及媒體信息],選擇[一般]。

復制「URI」欄目內的網址(註:「URI」應該為「URL」,漢化錯誤),粘貼到[文件] →[打開文件] →[網路] →[網址]框內,再將[串流/保護]前選項框內打「√」,即可點擊「設置」按鈕。

進入[串流輸出]設置界面。

首先選擇[輸出]方式,這里選用MMSH協議,地址欄填寫轉發服務端的IP地址「192.168.1.2」。然後選擇[封裝方法],一般選用ASF,也可採用MP4、WAV封裝方法,不過只能採用MMSH協議輸出,如果採用HTTP協議輸出,則客戶端播放沒有畫面。

通過VLC串流轉碼。實際上就是VLC Media Player解碼DM500S的TS流,然後VLC Media Player又重新封裝打包並且傳回網路的過程,這個封裝方式可以在[轉碼選項]中自行變更。在[轉碼選項]中,選擇視頻編碼器、音頻編碼器的編碼格式時,應考慮客戶端有無相應的解碼包。一般視頻編碼器可選擇常用的WMV1、WMV2格式,音頻編碼器選用MP3格式。比特率的選擇應考慮網路帶寬及轉發伺服器的性能,在條件允許的情況下,選擇較大的比特率有利於畫質和音質的提高。選擇時注意,視頻編碼器中的「尺寸」是指播放畫面的大小;音頻編碼器中的「頻道」為漢化錯誤,應該為「聲道」,通常選擇「2」,表示雙聲道。

以上的設置完成後,按兩次「確定」後退出設置界面,此時VLC Media Player播放器底端會有計時器出現,說明軟體已開始進行串流發送。至於成功不成功,我們可以通過菜單欄[查看]→[串流及媒體信息]→[Statistics]來查看。

在下面的[串流]區域內,已有各項發送數據統計數字,表示轉發功能正常。注意:在轉發時,VLC Media Player軟體是沒有畫面顯示和聲音輸出的,因此其視頻和音頻區域的「已顯示的幀」和「已播放的緩沖器」的統計數字均為「0」。

2、客戶端播放

由於轉發服務端採用MMSH協議輸出,因此只要打開Windows Media Player播放軟體,通過[文件]→[打開URL],輸入mms://192.168.1.2:1234或,播放軟體經過片刻的連接和緩沖後,就可觀看節目了,界面的最下方為播放速率。注意:如果轉發服務端採用HTTP協議輸出,則客戶端只能輸入地址。

3、使用注意事項

採用該方案關鍵是轉發服務端設置,如果客戶端無法播放,首先應該檢查轉發伺服器有無串流輸出。對於客戶端只有伴音輸出而沒有畫面播出的,則應該檢查所選用的輸出協議是否正確,其次是所選的視頻編碼器在客戶端有無相應的解碼包。

對於廣播來講,它是一種同時向大量客戶傳輸數據的方法。在廣播時,是通過使用廣播發布點來實現的。在我們上面所介紹的兩種方案中,廣播發布點就是客戶端要輸入網址和埠號。使用廣播方案時,接收廣播的客戶端是不能切換頻道的,只能是播什麼看什麼。當服務端(DM500S)或轉發服務端(台式機)換機時,客戶端(筆記本電腦)軟體需要重新啟動播放功能。

熱點內容
華為手機更換開機密碼如何操作 發布:2025-01-24 14:43:15 瀏覽:699
快手等待上傳 發布:2025-01-24 14:41:37 瀏覽:380
apache和php7 發布:2025-01-24 14:32:26 瀏覽:892
linuxio文件 發布:2025-01-24 13:40:21 瀏覽:438
在excel設密碼如何取消 發布:2025-01-24 13:38:54 瀏覽:483
電腦裝存儲時不能開機 發布:2025-01-24 13:38:52 瀏覽:285
2000人同時在線的小程序需要什麼伺服器 發布:2025-01-24 13:37:17 瀏覽:853
怎麼搭建linux伺服器配置 發布:2025-01-24 13:37:16 瀏覽:113
安卓版什麼時候上線麻將模式 發布:2025-01-24 13:32:48 瀏覽:966
演算法實驗分析 發布:2025-01-24 13:20:25 瀏覽:137