導航:首頁 > 操作系統 > linuxh264

linuxh264

發布時間:2024-12-15 09:31:47

⑴ h264視頻用什麼軟體播放

H264是一種高度壓縮的數字視頻,常用於監控視頻,它可以由VLC、5Kplayer、Potplayer、暴風影音和Mplayer軟體播放。

1.VLC播放器:支持windows、MaC、linux、BSD、Beos、Solaris、QNX、IOS平台,可播放現有非加密視頻的所有格式。它是第一個在Win/Lin/Mac平台上實現硬體加速的播放器。即使在硬體加速之前,VLC的性能也得到了改善。

2.Mplayer播放器:Mplayer播放器是一個非常實用的計算機端視頻播放工具。Mplayer播放器支持大部分視頻格式文件,可以為用戶提供最佳的視頻播放體驗、高度還原的圖像質量和音質,支持視頻文件的最佳播放級別。

3.Potplayer:Potplayer軟體配有專業的編解碼器,方便快捷。安裝後,可以觀看任何格式的視頻文件。.Potplayer啟動速度快,回放穩定,支持視頻字幕。其次,potplayer支持32位和64位系統,內置硬體加快解碼速度。

4.5kplayer:5kplayer支持MKV/TS/M2TS/AVI/flv/RM/RMVB/VOB/ISO/SWF等格式。該軟體專為4K/5K電影設計,提供多字幕、畫面旋轉反轉、音畫面同步、曲目選擇等功能,方便播放各類電影和流媒體視。

5.暴風影音:暴風影音是世界領先的媒體播放器。暴風影音致力於為用戶帶來更快的播放體驗和視覺效果。新版本的暴風影音優化了解碼方案,支持多種視頻格式,包括MPEG4、flv和WMV。

參考資料來源:網路-VLC

網路-Mplayer

網路-PotPlayer

網路-暴風影音

⑵ 如何實時h264編碼及aac編碼

1. 簡單介紹

首先是捕獲,這里採用了DirectShow的方式,對它進行了一定程度的封裝,包括音視頻。好處是直接使用native api,你可以做想做的任何修改,壞處是,不能跨平台,採集音視頻這種應用,linux平台也是需要滴呀。有跨平台的做法,對視頻,可以使用OpenCV,對音頻,可以使用OpenAL或PortAudio等,這樣就行了。

編碼可以選擇的餘地比較大,對視頻來講,有H264, MPEG-4, WebM/VP8, Theora等,音頻有Speex, AAC, Ogg/Vorbis等,它們都有相應的開源項目方案,我採用的是x264進行H264編碼,libfaac進行aac編碼,之後是否更改編碼方案,等具體項目需求再說了。這里提一下WebM,Google牽頭的項目,完全開放和自由,使用VP8和Vorbis編碼,webm(mkv)封裝,有多家巨頭支持,目的是想要取代當前的H264視頻編碼,號稱比後者更加優秀,我沒有測試過實際效果。不過有商業公司牽頭就是不一樣,各項支持都很全面,有時間了關注一下。2. 邏輯和流程

基本的思想是實現dshow ISampleGrabberCB介面,通過回調來保存每一個buffer。除了界面線程和dshow自己的線程之外,我們啟動了兩個線程,AudioEncoderThread和VideoEncoderThread,分別從SampleGrabber中取出數據,調用編碼器進行編碼,編碼後的文件可以直接輸出。看圖:程序是用VS2010構建的,看張工程截圖:Base下面的是對系統API的一些簡單封裝,主要是線程和鎖。我這里簡單也封裝的了一下dshow的捕獲過程,包括graph builder的創建,filter的連接等。directshow是出了名的難用,沒辦法,難用也得用。因為是VS2010,調用的Windows SDK 7.1中的dshow,沒有qedit.h這個文件,而它正式定義ISampleGrabberCB的。不急,系統中還是有qedit.dll的,我們要做的就是從Windows SDK 6.0中,把它拷過來,然後在stdafx.h中加入這幾行代碼,就可以了

1 #pragma include_alias( "dxtrans.h", "qedit.h" )
2 #define __IDxtCompositor_INTERFACE_DEFINED__
3 #define __IDxtAlphaSetter_INTERFACE_DEFINED__
4 #define __IDxtJpeg_INTERFACE_DEFINED__
5 #define __IDxtKey_INTERFACE_DEFINED__
6 #include "qedit.h"


3. 音視頻編碼

相關文件:Encoder下就是音視頻編碼相關的代碼。X264Encoder封裝了調用x264編碼器的操作,FAACEncoder封裝了調用libfaac編碼器的操作,VideoEncoderThread和AudioEncoderThread負責主要的流程。下面我把關鍵代碼貼出來,大家可以參考一下。

A. 視頻編碼線程

主要流程是首先初始化x264編碼器,然後開始循環調用DSVideoGraph,從SampleGrabber中取出視頻幀,調用x264進行編碼,流程比較簡單,調用的頻率就是你想要獲取的視頻幀率。要注意的一點是,x264進行編碼比較耗時,在計算線程Sleep時間時,要把這個過程消耗的時間算上,以免採集的視頻幀率錯誤。


B. 音頻編碼線程

主要流程和視頻編碼線程相同,也是初始化FAAC編碼器,然後循環調用DSAudioGraph,從SampleGrabber中取出視頻幀,調用faac進行編碼。和視頻不同的是,音頻的sample的頻率是非常快的,所以幾乎要不斷的進行採集,但前提是SampleGrabber中捕獲到新數據了才行,不然你的程序cpu就100%了,下面代碼中IsBufferAvailaber()就是做這個檢測的。


調用faac進行編碼的時候,有點需要注意,大家特別注意下,不然編碼出來的音頻會很不正常,搞不好的話會很頭疼的。先看下faac.h的相關介面


1 faacEncHandle FAACAPI faacEncOpen(unsigned long sampleRate, unsigned int numChannels,2 unsigned long *inputSamples, unsigned long *maxOutputBytes);3 4 int FAACAPI faacEncEncode(faacEncHandle hEncoder, int32_t * inputBuffer, unsigned int samplesInput,5 unsigned char *outputBuffer, unsigned int bufferSize);

faacEncEncode第三個參數指的是傳入的sample的個數,這個值要和調用faacEncOpen返回的inputSamples相等。要做到這點,就要在dshow中設置好buffsize,公式是:

BufferSize = aac_frame_len * channels * wBytesPerSample// aac_frame_len = 1024

閱讀全文

與linuxh264相關的資料

熱點內容
下載的app怎麼刪除 瀏覽:299
pythonmilliseconds 瀏覽:652
橢圓曲線演算法實現 瀏覽:443
為什麼伺服器尚未就緒 瀏覽:62
java認證培訓 瀏覽:439
特徵演算法計算公式 瀏覽:747
阿里雲伺服器ecs配置全解 瀏覽:337
圖片加密和解密有什麼區別 瀏覽:120
結構化編程dll 瀏覽:73
pdf瀏覽器哪個好用 瀏覽:386
單片機模擬mac層 瀏覽:890
內存卡加密了別的手機能打開嗎 瀏覽:875
編程艙座椅 瀏覽:470
高優先權調度演算法例題 瀏覽:841
androidstudio中文版教程 瀏覽:951
Javautf8轉utf16 瀏覽:650
冰箱變頻壓縮機好壞 瀏覽:601
文件夾怎麼發快遞 瀏覽:420
安卓桌面鎖定了圖案怎麼辦 瀏覽:166
蘋果手機app卸載2個月後如何恢復 瀏覽:482