『壹』 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)
『貳』 我的蘋果電腦,macpro,前天vlc還 好好的,今天突然用不起了,開文件都是時間為零,升級軟體後也不行,求
用AppCleaner等卸載軟體徹底清楚VLC,然後再安裝回來就可以了
『叄』 有用VLC播放器的嗎
我指的不是字幕,是題目,或者剛開始播放的時候底下會出來一行方框,另外我這里字幕語言是默認(GB18030),字體是arial,也沒發現什麼問題啊。
『肆』 怎樣清除vlc播放器歷史記錄
步驟如下:
1、打開VLC播放器;
2、在媒體下,選擇open recent media,在彈出菜單中選擇清除鍵,這樣就把之前保存的清單刪掉了;
3、再次選擇媒體菜單,顯示的下位菜單中,<open recent media>已呈灰色,清單不見了;
4、下一步我們要一窮永逸的讓軟體不要記錄了,省得老是要人工清除菜單太麻煩。
選擇《工具》中的《首選項》;
5、在進入的菜單中,選擇第一項《界面》;
6、下拉菜單,將《保存最近播放項目》前的勾遠去掉,這樣以後就不再記錄播放過的文件了;
『伍』 請教關於mobileVLCKit中的播放網路數據的緩存
可以刪除,也可以完整連文件夾一起刪除;以後觀看網路電視後PPS會自動創建文件;不過這樣麻煩,你可以在PPS裡面設置緩存文件路徑更換在其他硬碟(一般軟體都有這種設置的,不是很確定!)。
『陸』 如何用VLC播放網路流媒體
1、在安裝了這個軟體的電腦上點擊開始了,點擊這個所有程序了。
『柒』 如何減少VLC播放時候的CPU佔有率
WinXP中CPU佔用100%原因及解決方法
我們在使用Windows XP操作系統的時候,用著用著系統就變慢了,一看「 任務管理器 」才發現CPU佔用達到100%。這是怎麼回事情呢?遇到病毒了,硬體有問題,還是系統設置有問題,在本文中筆者將從硬體,軟體和病毒三個方面來講解系統資源佔用率為什麼會達到100%。
經常出現CPU佔用100%的情況,主要問題可能發生在下面的某些方面:
CPU佔用率高 的九種可能
1、防殺毒軟體造成 故障
由於新版的 KV 、金山、 瑞星 都加入了對網頁、 插件 、郵件的隨機監控,無疑增大了系統負擔。處理方式:基本上沒有合理的處理方式,盡量使用最少的監控服務吧,或者,升級你的硬體配備。
2、驅動沒有經過認證,造成CPU資源佔用100%
大量的測試版的驅動在網上泛濫,造成了難以發現的故障原因。 處理方式:尤其是 顯卡驅動 特別要注意,建議使用 微軟認證 的或由官方發布的驅動,並且嚴格核對型號、版本。
3、 病毒、木馬 造成
大量的蠕蟲病毒在系統內部迅速復制,造成CPU佔用資源率據高不下。解決辦法:用可靠的殺毒軟體徹底清理系統內存和本地硬碟,並且打開系統設置軟體,察看有無異常啟動的程序。經常性更新升級殺毒軟體和防火牆,加強防毒意識,掌握正確的防殺毒知識。
4、控制面板— 管理工具 —服務—RISING REALTIME MONITOR SERVICE 點滑鼠右鍵,改為手動。
5、開始->運行->msconfig->啟動,關閉不必要的啟動項,重啟。
6、查看「 svchost 」進程。
svchost . exe 是Windows XP系統 的一個核心進程。 svchost.exe 不單單只出現 在Window s XP中,在使用 NT 內核的 Windows系統 中都會有svchost.exe的存在。一般在 Windows 2000 中 svchost.exe進程 的數目為2個,而 在Windows XP中svchost.exe進程的數目就上升到了4個及4個以上。
7、查看 網路連接 。主要是網卡。
8、查看網路連接
當安裝了Windows XP的計算機做伺服器的時候,收到埠 445 上的連接請求時,它將分配內存和少量地調配 CPU資源來為這些連接提供服務。當負荷過重的時候,CPU佔用率可能過高,這是因為在工作項的數目和響應能力之間存在固有的權衡關系。你要確定合適的 MaxWorkItems 設置以提高系統響應能力。如果設置的值不正確,伺服器的響應能力可能會受到影響,或者某個用戶獨占太 多系統 資源。
要解決此問題,我們可以通過修改注冊表來解決:在 注冊表編輯器 中依次展開[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver ]分支,在右側窗口中 新建 一個名為「maxworkitems」的 DWORD值 。然後雙擊該值,在打開的窗口中鍵入下列數值並保存退出:
如果計算機有512MB以上的內存,鍵入「1024」;如果計算機內存小於 512 MB,鍵入「256」。
9、看看是不是Windows XP使用滑鼠右鍵引起CPU佔用100%
前不久的報到說在資源管理器裡面使用滑鼠右鍵會導致CPU資源100%佔用,我們來看看是怎麼回事?
徵兆:
在資源管理器裡面,當你右鍵點擊一個目錄或一個文件,你將有可能出現下面所列問題:
任何文件的拷貝操作在那個時間將有可能停止相應
網路連接速度將顯著性的降低
所有的流輸入/輸出操作例如使用Windows Media Player 聽音樂將有可能是音樂失真成因:
當你在資源管理器裡面右鍵點擊一個文件或目錄的時候,當快捷 菜單顯示 的時候,CPU佔用率將增加到100%,當你關閉快捷菜單的時候才返回正常水平。
『捌』 VLC放電影為什麼不能拖動時間條一動就跳出「打開媒體——捕獲設備」窗口!完全不能用啊!
其它軟體,比如一些屏幕取詞的翻譯軟體,因為調用ctrl+c導致這個問題,你可以試試,在VLC播放器界面按一下ctrl+c,會有同樣的彈窗,你把這樣的軟體關了就好了。