首頁 >後端開發 >php教程 >如何在nginx伺服器上實現多媒體串流的錄製和轉碼

如何在nginx伺服器上實現多媒體串流的錄製和轉碼

WBOY
WBOY原創
2016-08-08 09:25:482118瀏覽

關於nginx串流伺服器部署的文章已經有很多了,今天我在這裡講一下如何在向伺服器推流的同時將串流轉碼為MP4檔案保存下來,這裡主要使用的是ffmpeg。

1、首先要說明的是,不能用exec指令。他會在客戶端推流結束的同時自動終止調用的外部程序,結果就是最後ffmpeg無法進行完整的編碼。此指令只適合將接到的串流轉推到其他位址。
2、應該使用exec_record_done來配合record指令使用。即在錄製結束後自動對已錄製的檔案進行轉碼操作得到MP4檔。根據是否使用record_interval指令又有兩種不同的情況。
2A、若不使用record_interval,則會在推流停止後(即record完全停止後)才進行轉碼,在這之前得不到任何輸出
2B、若使用record_interval,即可設定每隔一段時間就重新開始錄製,結合record_append on指令,確保最後錄製的影片都在一個檔案中,否則就會給每段錄製都產生一個單獨的檔案。使用這兩個指令之後,轉碼也會相應地每隔一段時間就進行一次,但最後都會輸出(覆蓋)到同一個檔案。優點是能近乎「即時」地進行轉碼,缺點是會重複呼叫ffmpeg,佔用系統資源。
3、要注意的是,以上兩種方法最後得到的轉碼檔案(的時長)是相同的。
4、nginx.conf設定範例
application hls {  
             live on;  
             hls on;  
	    
            record all;
            record_path /home/zhanghui/test;
			#record_interval 10s;
			#record_append on;


            hls_path /tmp/app;  
            hls_fragment 5s; 


			# convert recorded file to mp4 format
			exec_record_done '/usr/local/bin/ffmpeg' -y -i /home/zhanghui/test/livestream.flv -vcodec libx264 -f mp4 /home/zhanghui/test/test_record.mp4 2>>/home/zhanghui/test/test_record.log;
       }

以上就介紹如何在nginx伺服器上實現多媒體串流的錄製和轉碼,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn