真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ffmpeg點(diǎn)播go語言,ffmpeg gop

ffmpeg-php如何在windows apache下進(jìn)行配置

ffmpeg-php我之前也是一直沒配置成功,后來干脆直接用ffmpeg,用php(我后來是用的go語言)執(zhí)行它,這樣就不用配置了,另外如果想找編程方面的視頻教程可以去 v8視頻 看看

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出阜寧免費(fèi)做網(wǎng)站回饋大家。

FFmpeg音視頻的基礎(chǔ)名詞解釋

是指視頻文件在單位時(shí)間內(nèi)使用的數(shù)據(jù)流量,也叫碼率或碼流率,通俗一點(diǎn)的理解就是取樣率,是視頻編碼中畫面質(zhì)量控制中最重要的部分,一般我們用的單位是kb/s或者M(jìn)b/s。一般來說同樣分辨率下,視頻文件的碼流越大,壓縮比就越小,畫面質(zhì)量就越高。碼流越大,說明單位時(shí)間內(nèi)取樣率越大,數(shù)據(jù)流,精度就越高,處理出來的文件就越接近原始文件,圖像質(zhì)量越好,畫質(zhì)越清晰,要求播放設(shè)備的解碼能力也越高。

當(dāng)然,碼流越大,文件體積也越大,其計(jì)算公式是文件體積=時(shí)間X碼率/8。例如,網(wǎng)絡(luò)上常見的一部90分鐘1Mbps碼流的720P RMVB文件,其體積就=5400秒×1Mb/8=675MB。通常來說,一個(gè)視頻文件包括了畫面及聲音,例如一個(gè)RMVB的視頻文件,里面包含了視頻信息和音頻信息,音頻及視頻都有各自不同的采樣方式和比特率,也就是說,同一個(gè)視頻文件音頻和視頻的比特率并不是一樣的。而我們所說的一個(gè)視頻文件碼流率大小,一般是指視頻文件中音頻及視頻信息碼流率的總和。以以國內(nèi)最流行,大家最熟悉的RMVB視頻文件為例,RMVB中的VB,指的是VBR,即Variable Bit Rate的縮寫,中文含義是可變比特率,它表示RMVB采用的是動(dòng)態(tài)編碼的方式,把較高的采樣率用于復(fù)雜的動(dòng)態(tài)畫面(歌舞、飛車、戰(zhàn)爭、動(dòng)作等),而把較低的采樣率用于靜態(tài)畫面,合理利用資源,達(dá)到畫質(zhì)與體積可兼得的效果。

我的理解碼流就是視頻/音頻文件的每秒的大小,碼率越高文件越大,呈現(xiàn)出來的失幀也就越低

采樣率(也稱為采樣速度或者采樣頻率)定義了每秒從連續(xù)信號(hào)中提取并組成離散信號(hào)的采樣個(gè)數(shù),它用 赫茲 (Hz)來表示。采樣率是指將模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)時(shí)的采樣頻率,也就是單位時(shí)間內(nèi)采樣多少點(diǎn)。一個(gè)采樣點(diǎn)數(shù)據(jù)有多少個(gè)比特。比特率是指每秒傳送的比特(bit)數(shù)。單位為 bps(Bit Per Second),比特率越高,傳送的數(shù)據(jù)越大,音質(zhì)越好.比特率 =采樣率 x 采用位數(shù) x聲道數(shù).

采樣率類似于動(dòng)態(tài)影像的幀數(shù),比如電影的采樣率是24赫茲,PAL制式的采樣率是25赫茲,NTSC制式的采樣率是30赫茲。當(dāng)我們把采樣到的一個(gè)個(gè)靜止畫面再以采樣率同樣的速度回放時(shí),看到的就是連續(xù)的畫面。同樣的道理,把以44.1kHZ采樣率記錄的CD以同樣的速率播放時(shí),就能聽到連續(xù)的聲音。顯然,這個(gè)采樣率越高,聽到的聲音和看到的圖像就越連貫。當(dāng)然,人的聽覺和視覺器官能分辨的采樣率是有限的,基本上高于44.1kHZ采樣的聲音,絕大部分人已經(jīng)覺察不到其中的分別了。而聲音的位數(shù)就相當(dāng)于畫面的顏色數(shù),表示每個(gè)取樣的數(shù)據(jù)量,當(dāng)然數(shù)據(jù)量越大,回放的聲音越準(zhǔn)確,不至于把開水壺的叫聲和火車的鳴笛混淆。同樣的道理,對(duì)于畫面來說就是更清晰和準(zhǔn)確,不至于把血和西紅柿醬混淆。不過受人的器官的機(jī)能限制,16位的聲音和24位的畫面基本已經(jīng)是普通人類的極限了,更高位數(shù)就只能靠儀器才能分辨出來了。比如電話就是3kHZ取樣的7位聲音,而CD是44.1kHZ取樣的16位聲音,所以CD就比電話更清楚。

我的理解采樣率就是每秒采集音視頻的點(diǎn),比如我們通常說的8k 16k與44100

比特率是指每秒傳送的比特(bit)數(shù)。單位為bps(Bit Per Second),比特率越高,傳送的數(shù)據(jù)越大。在視頻領(lǐng)域,比特率常翻譯為碼率 比特率是指每秒傳送的比特(bit)數(shù)。單位為bps(Bit Per Second),比特率越高,傳送的數(shù)據(jù)越大。在視頻領(lǐng)域,比特率常翻譯為碼率 !!!

比特率表示經(jīng)過編碼(壓縮)后的音、視頻數(shù)據(jù)每秒鐘需要用多少個(gè)比特來表示,而比特就是二進(jìn)制里面最小的單位,要么是0,要么是1。比特率與音、視頻壓縮的關(guān)系,簡單的說就是比特率越高,音、視頻的質(zhì)量就越好,但編碼后的文件就越大;如果比特率越少則情況剛好相反。比特率是指將數(shù)字聲音、視頻由模擬格式轉(zhuǎn)化成數(shù)字格式的采樣率,采樣率越高,還原后的音質(zhì)、畫質(zhì)就越好。

我的理解是比特率與采樣率概念相同,不過采樣率是壓縮前的比特率是壓縮后的

VBR(Variable Bitrate)動(dòng)態(tài)比特率 也就是沒有固定的比特率,壓縮軟件在壓縮時(shí)根據(jù)音頻數(shù)據(jù)即時(shí)確定使用什么比特率,這是以質(zhì)量為前提兼顧文件大小的方式,推薦編碼模式;

ABR(Average Bitrate)平均比特率 是VBR的一種插值參數(shù)。LAME針對(duì)CBR不佳的文件體積比和VBR生成文件大小不定的特點(diǎn)獨(dú)創(chuàng)了這種編碼模式。ABR在指定的文件大小內(nèi),以每50幀(30幀約1秒)為一段,低頻和不敏感頻率使用相對(duì)低的流量,高頻和大動(dòng)態(tài)表現(xiàn)時(shí)使用高流量,可以做為VBR和CBR的一種折衷選擇。

CBR(Constant Bitrate),常數(shù)比特率 指文件從頭到尾都是一種位速率。相對(duì)于VBR和ABR來講,它壓縮出來的文件體積很大,而且音質(zhì)相對(duì)于VBR和ABR不會(huì)有明顯的提高。

幀速率也稱為FPS(Frames PerSecond)的縮寫——幀/秒。是指每秒鐘刷新的圖片的幀數(shù),也可以理解為圖形處理器每秒鐘能夠刷新幾次。越高的幀速率可以得到更流暢、更逼真的動(dòng)畫。每秒鐘幀數(shù)(FPS)越多,所顯示的動(dòng)作就會(huì)越流暢。

就是俗稱的每秒多少幀,例如我們眾所周知的動(dòng)畫24幀/每秒

就是幀大小每一幀就是一副圖像。

在手機(jī)上呈現(xiàn)的畫面,第一幀與第二幀的圖像中肯定有很多相同的畫面,比如在一個(gè)固定的場所,背景不動(dòng),只有人物移動(dòng)的情況,這時(shí)只需要重新繪制人物的移動(dòng)就可以,背景不用重新繪制。IPB幀就是用于處理這種情況。

I幀:幀內(nèi)編碼幀 ,I幀表示關(guān)鍵幀,你可以理解為這一幀畫面的完整保留;解碼時(shí)只需要本幀數(shù)據(jù)就可以完成(因?yàn)榘暾嬅妫?/p>

P幀:前向預(yù)測(cè)編碼幀。P幀表示的是這一幀跟之前的一個(gè)關(guān)鍵幀(或P幀)的差別,解碼時(shí)需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,P幀沒有完整畫面數(shù)據(jù),只有與前一幀的畫面差別的數(shù)據(jù))

P幀的預(yù)測(cè)與重構(gòu):P幀是以I幀為參考幀,在I幀中找出P幀“某點(diǎn)”的預(yù)測(cè)值和運(yùn)動(dòng)矢量,取預(yù)測(cè)差值和運(yùn)動(dòng)矢量一起傳送。在接收端根據(jù)運(yùn)動(dòng)矢量從I幀中找出P幀“某點(diǎn)”的預(yù)測(cè)值并與差值相加以得到P幀“某點(diǎn)”樣值,從而可得到完整的P幀。

B幀:雙向預(yù)測(cè)內(nèi)插編碼幀。B幀是雙向差別幀,也就是B幀記錄的是本幀與前后幀的差別(具體比較復(fù)雜,有4種情況,但我這樣說簡單些),換言之,要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之后的畫面,通過前后畫面的與本幀數(shù)據(jù)的疊加取得最終的畫面。B幀壓縮率高,但是解碼時(shí)CPU會(huì)比較累。

B幀的預(yù)測(cè)與重構(gòu)

B幀以前面的I或P幀和后面的P幀為參考幀,“找出”B幀“某點(diǎn)”的預(yù)測(cè)值和兩個(gè)運(yùn)動(dòng)矢量,并取預(yù)測(cè)差值和運(yùn)動(dòng)矢量傳送。接收端根據(jù)運(yùn)動(dòng)矢量在兩個(gè)參考幀中“找出(算出)”預(yù)測(cè)值并與差值求和,得到B幀“某點(diǎn)”樣值,從而可得到完整的B幀。

1)B幀是由前面的I或P幀和后面的P幀來進(jìn)行預(yù)測(cè)的;

2)B幀傳送的是它與前面的I或P幀和后面的P幀之間的預(yù)測(cè)誤差及運(yùn)動(dòng)矢量;

3)B幀是雙向預(yù)測(cè)編碼幀;

4)B幀壓縮比最高,因?yàn)樗环从潮麉⒖紟g運(yùn)動(dòng)主體的變化情況,預(yù)測(cè)比較準(zhǔn)確;

5)B幀不是參考幀,不會(huì)造成解碼錯(cuò)誤的擴(kuò)散。

我找了篇文章,可以更好的理解H264

H264基礎(chǔ)簡介

在視頻編碼序列中,GOP即Group of picture(圖像組),指兩個(gè)I幀之間的距離,Reference(參考周期)指兩個(gè)P幀之間的距離(如下圖3.1)。一個(gè)I幀所占用的字節(jié)數(shù)大于一個(gè)P幀,一個(gè)P幀所占用的字節(jié)數(shù)大于一個(gè)B幀(如下圖3.1所示)。

所以在碼率不變的前提下,GOP值越大,P、B幀的數(shù)量會(huì)越多,平均每個(gè)I、P、B幀所占用的字節(jié)數(shù)就越多,也就更容易獲取較好的圖像質(zhì)量;Reference越大,B幀的數(shù)量越多,同理也更容易獲得較好的圖像質(zhì)量。需要說明的是,通過提高GOP值來提高圖像質(zhì)量是有限度的,在遇到場景切換的情況時(shí),H.264編碼器會(huì)自動(dòng)強(qiáng)制插入一個(gè)I幀,此時(shí)實(shí)際的GOP值被縮短了。另一方面,在一個(gè)GOP中,P、B幀是由I幀預(yù)測(cè)得到的,當(dāng)I幀的圖像質(zhì)量比較差時(shí),會(huì)影響到一個(gè)GOP中后續(xù)P、B幀的圖像質(zhì)量,直到下一個(gè)GOP開始才有可能得以恢復(fù),所以GOP值也不宜設(shè)置過大。同時(shí),由于P、B幀的復(fù)雜度大于I幀,所以過多的P、B幀會(huì)影響編碼效率,使編碼效率降低。另外,過長的GOP還會(huì)影響Seek操作的響應(yīng)速度,由于P、B幀是由前面的I或P幀預(yù)測(cè)得到的,所以Seek操作需要直接定位,解碼某一個(gè)P或B幀時(shí),需要先解碼得到本GOP內(nèi)的I幀及之前的N個(gè)預(yù)測(cè)幀才可以,GOP值越長,需要解碼的預(yù)測(cè)幀就越多,seek響應(yīng)的時(shí)間也越長。

DTS(Decoding Time Stamp):即解碼時(shí)間戳,這個(gè)時(shí)間戳的意義在于告訴播放器該在什么時(shí)候解碼這一幀的數(shù)據(jù)。

PTS(Presentation Time Stamp):即顯示時(shí)間戳,這個(gè)時(shí)間戳用來告訴播放器該在什么時(shí)候顯示這一幀的數(shù)據(jù)。

這2個(gè)概念經(jīng)常出現(xiàn)在音頻視頻編碼和播放中,其實(shí)際意義是,PTS是真正錄制和播放的時(shí)間戳,而DTS是解碼的時(shí)間戳。

對(duì)于普通的無B楨視頻(H264 Baseline或者VP8),PTS/DTS應(yīng)該是相等的,因?yàn)闆]有延遲編碼。

對(duì)于有B楨的視頻,I楨的PTS依然等于DTS, P楨的PTSDTS, B楨的PTSDTS。

可以簡單地這樣理解:

若視頻沒有B幀,則I和P都是解碼后即刻顯示。

若視頻含有B幀,則I是解碼后即刻顯示,P是先解碼后顯示,B是后解碼先顯示。(B 和P的先、后是相對(duì)的)。

上面說了視頻幀、DTS、PTS 相關(guān)的概念。我們都知道在一個(gè)媒體流中,除了視頻以外,通常還包括音頻。音頻的播放,也有 DTS、PTS 的概念,但是音頻沒有類似視頻中 B 幀,不需要雙向預(yù)測(cè),所以音頻幀的 DTS、PTS 順序是一致的。

音頻視頻混合在一起播放,就呈現(xiàn)了我們常常看到的廣義的視頻。在音視頻一起播放的時(shí)候,我們通常需要面臨一個(gè)問題:怎么去同步它們,以免出現(xiàn)畫不對(duì)聲的情況。

要實(shí)現(xiàn)音視頻同步,通常需要選擇一個(gè)參考時(shí)鐘,參考時(shí)鐘上的時(shí)間是線性遞增的,編碼音視頻流時(shí)依據(jù)參考時(shí)鐘上的時(shí)間給每幀數(shù)據(jù)打上時(shí)間戳。在播放時(shí),讀取數(shù)據(jù)幀上的時(shí)間戳,同時(shí)參考當(dāng)前參考時(shí)鐘上的時(shí)間來安排播放。這里的說的時(shí)間戳就是我們前面說的 PTS。實(shí)踐中,我們可以選擇:同步視頻到音頻、同步音頻到視頻、同步音頻和視頻到外部時(shí)鐘。

rtsp流瀏覽器播放方案

rtsp流在主流瀏覽器并不支持直接播放。比如大華的視頻流:rtsp://admin:123456@

192.168.10.129/cam/realmonitor?channel=1subtype=0,用vlc可以直接播放。但在瀏覽器會(huì)報(bào)ERR_UNKNOWN_URL_SCHEME。那如何在瀏覽器中播放呢。

以下列出幾種方案。

1、安裝插件(chrome最新版基本都不支持)

類如:kurento,vlc插件(谷歌瀏覽器版本41以下),vgx插件(不支持高版本,chrome72.0版本可用)等。

2、安裝軟件(中間件,基本都付費(fèi))

類如:Appemit(調(diào)用vlc插件播放rtsp),可以免安裝的,目前只能windows,免費(fèi)版會(huì)有提示。

猿大師中間件(底層調(diào)用VLC的ActiveX控件,實(shí)現(xiàn)在主流瀏覽器網(wǎng)頁中內(nèi)嵌播放多路RTSP的實(shí)時(shí)視頻流),中間件收費(fèi)的。

PluginOK(牛插)中間件。底層調(diào)用ActiveX控件VlcOcx.dll。(商業(yè)用途需付費(fèi)使用)

3、服務(wù)器拉流轉(zhuǎn)發(fā)及協(xié)議轉(zhuǎn)換

示意圖如下所示:

推流--------------服務(wù)器轉(zhuǎn)發(fā)--------------拉流

方法一覽:

a,vlc軟件串流到http協(xié)議 ,網(wǎng)頁顯示幾個(gè)視頻需啟動(dòng)幾個(gè)vlc,只適合應(yīng)急場景。

b,html5 + websocket_rtsp_proxy 實(shí)現(xiàn)視頻流直播 ,基于MSE(Media Source Extensions,W3C),擴(kuò)展H5的功能。

步驟:服務(wù)器安裝streamedian服務(wù)器,客戶端通過video標(biāo)簽播放。

原型圖:

價(jià)格:

c.基于nginx的rsmp轉(zhuǎn)發(fā)

基于nginx實(shí)現(xiàn)rtmp轉(zhuǎn)化,用flash實(shí)現(xiàn)播放。由于flash目前大多瀏覽器默認(rèn)禁用,不推薦此方式。

步驟:安裝ffmpeg工具,安裝nginx。

另外nginx-rtmp-module也支持HLS協(xié)議,可以搭建基于hls的直播服務(wù)器。

d.rtsp轉(zhuǎn)hls播放,通過ffmpeg轉(zhuǎn)碼

步驟:安裝ffmpeg工具,ffmpeg轉(zhuǎn)碼。

形如:

ffmpeg -i "rtsp://admin:123456@192.168.10.129/cam/realmonitor?channel=1subtype=0" -c copy -f hls -hls_time 2.0 -hls_list_size 0 -hls_wrap 15 "D:/hls/test.m3u8"

缺點(diǎn)是直播流延時(shí)很大,對(duì)實(shí)時(shí)要求比較高的不滿足要求。

案例:基于EasyDarwin拾建轉(zhuǎn)碼服務(wù)器。參考地址:

通過存儲(chǔ)的m3u8去讀取。

e.websocket代理推送,F(xiàn)FMPEG轉(zhuǎn)碼

此方法與a,b類似。但更實(shí)用。

以下提供兩種方案:

(1)Gin+WebSocket+FFMPEG實(shí)現(xiàn)rtsp轉(zhuǎn)碼,參考:

通過FFMPEG把rstp轉(zhuǎn)成http,ginrtsp作為轉(zhuǎn)發(fā)服務(wù)器,但需要自己寫相應(yīng)接口,需要了解go語言。

(2)node + ffmpeg + websocket + flv.js,參考:

步驟:在node服務(wù)中建立websocket;通過fluent-ffmpeg轉(zhuǎn)碼,將RTSP 流轉(zhuǎn)為flv格式;通過flv.js連接websocket,并對(duì)獲取的flv格式視頻數(shù)據(jù)進(jìn)行渲染播放。

import WebSocket from 'ws'import webSocketStream from 'websocket-stream/stream'import ffmpeg from 'fluent-ffmpeg'// 建立WebSocket服務(wù)const wss = new WebSocket.Server({ port: 8888, perMessageDeflate: false })// 監(jiān)聽連接wss.on('connection', handleConnection)// 連接時(shí)觸發(fā)事件function handleConnection (ws, req) {? // 獲取前端請(qǐng)求的流地址(前端websocket連接時(shí)后面帶上流地址)? const url = req.url.slice(1)? // 傳入連接的ws客戶端 實(shí)例化一個(gè)流? const stream = webSocketStream(ws, { binary: true })? // 通過ffmpeg命令 對(duì)實(shí)時(shí)流進(jìn)行格式轉(zhuǎn)換 輸出flv格式? const ffmpegCommand = ffmpeg(url)? ? .addInputOption('-analyzeduration', '100000', '-max_delay', '1000000')? ? .on('start', function () { console.log('Stream started.') })? ? .on('codecData', function () { console.log('Stream codecData.') })? ? .on('error', function (err) {? ? ? console.log('An error occured: ', err.message)? ? ? stream.end()? ? })? ? .on('end', function () {? ? ? console.log('Stream end!')? ? ? stream.end()? ? })? ? .outputFormat('flv').videoCodec('copy').noAudio()? stream.on('close', function () {? ? ffmpegCommand.kill('SIGKILL')? })? try {? ? // 執(zhí)行命令 傳輸?shù)綄?shí)例流中返回給客戶端? ? ffmpegCommand.pipe(stream)? } catch (error) {? ? console.log(error)? }}

優(yōu)點(diǎn)全部基于js。前端即可搞定。

參考:


本文題目:ffmpeg點(diǎn)播go語言,ffmpeg gop
文章URL:http://weahome.cn/article/hdhoig.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部