windows下流媒體nginx-rmtp-module服務器搭建及java程序調用fmpeg將rtsp轉rtmp直播流


 

第一步:首先介紹一下所用相關技術

注:項目中使用的jwplayer插件,不支持rtsp協議,所以使用以下技術來進行轉藝

  1. FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,並能將其轉化為流的開源計算機程序。在這里我只用到了它的視屏格式轉換功能,將rtsp協議的視頻流轉成rtmp
  2. Rtsp協議(實時流傳輸協議): 

公司用的是海康的監控地址為(rtsp://admin:12345@192.168.3.218/h264/ch1/main/av_stream)

     3. Rtmp協議(實時消息傳輸協議 ):

RTMP是一種設計用來進行實時數據通信的網絡協議,主要用來在Flash/AIR平台和支持RTMP協議的流媒體/交互服務器之間進行音視頻和數據通信。支持該協議的軟件包括Adobe Media Server/Ultrant Media Server/red5/nginx(這里我用到的NGINX)等。

     4.Jwplayer是一個開源的在網頁上使用的Flash視頻、音頻以及圖片播放器

它支持播放的Adobe Flash Player和HTML5瀏覽器可以處理任何格式(FLV文件,H.264標准,MP4功能,VP8的,WEBM,支持MP3,AAC,JPG,PNG和GIF)。它也支持各種流和播放清單格式(包括RMTP協議,HTTP直播和更多)和多種播放選項。

     5.nginx-rmtp-module是Nginx服務器的流媒體插件:

Nginx本身是一個非常出色的HTTP服務器,ffmpeg是非常好的音視頻解決方案.這兩個東西通過一個nginx的模塊nginx-rtmp-module,組合在一起即可以搭建一個功能相對比較完善的流媒體服務器.這個流媒體服務器可以支持RTMP和HLS(Live Http Stream)。

nginx配合ffmpeg做流媒體服務器的原理是:

nginx通過rtmp模塊提供rtmp服務, ffmpeg推送一個rtmp流到nginx, 然后客戶端通過訪問nginx來收看實時視頻流。(這里我是用jwplayer來訪問這個rtmp地址)

第二步:相關軟件的配置及應用

  1. 當前使用的nginx-1.5.8版本

(現在需要使用nginx-rtmp.exe這個程序, 網上可以搜索到該軟件已經集成rtmp模塊的windows版本)

                       

      2.打開conf文件夾找到nginx.conf文件,配置rtmp

      (添加rtmp{....})

 

    3.運行cmd命令,啟動nginx.exe服務

(start nginx.exe:啟動nginx服務,然后看進程中是否有nginx.exe)

 

 

   4.打開網頁輸入:localhost或者127.0.0.1本機ip

(顯示一下界面說明啟動成功)

 

 

第三步:相關軟件的配置及應用Nginx服務啟動之后就可以執行ffmpeg命令進行rtsp協議轉成rtmp:

    ffmpeg -i "rtsp://admin:12345@192.168.3.218/h264/ch1/main/av_stream" -f flv -r 25 -s 640x480 -an "rtmp://192.168.3.138:1935/myapp/test2"

  1. 運行cmd:執行ffmpeg命令語句

ffmpeg:其實就是ffmpeg.exe,運行語句的時候.exe可不要

-i:后面是我所需要的攝像頭協議

-f flv:后面是我要轉到nginx的rtmp服務器上

-s:視頻解析度:(分配率)也就是能調視屏的清晰度,如果在本機上測試建議640*480就好,改變視屏流的解析式cpu會消耗很大

(rtmp服務地址:rtmp://192.168.3.138:1935/myapp/test2)

192.168.3.138:nginx啟動的機器ip

1935:端口號(之前在nginx.conf里配置的)

myapp:是application 后面的名稱

test2:可以隨便起,記得到時候訪問rtmp時要一致

 

回車執行ffmpeg語句

(下面是我執行的結果,證明我的是執行成功的,通過ffmpeg把rtsp協議的攝像頭的視屏流一直運行的轉到nginx的rtmp視屏流服務器上)

 

第四步:配置jwplayer: 文件名JWplayer6.8.4616[(2014-06-28)(完美去水印

(網上下載的資源,這里主要用到jwplayer.js 以及 jwplayer.flash.swf兩個,index.html里有一些參數介紹,其它文件的相應介紹自己可以百度jwplayer使用方法)

注:jwplayer貌似不支持在本地html頁面中播放,要在服務器環境中實現播放

項目里只配置了自己所需的:

 

附:Java中執行ffmpeg語句如下

 

public static boolean convertProtocol(String ffmpeg,String rtsp, String rtmp,String s){
//		ffmpeg -i "rtsp://admin:12345@192.168.3.218/h264/ch1/main/av_stream"
//		-f flv -r 25 -s 640x480 -an "rtmp://192.168.3.138:1935/myapp/test2"
		List<String> commend = new ArrayList<String>();
		commend.add(ffmpeg);
		commend.add("-i");
		commend.add("\""+rtsp+"\"");
		commend.add("-f");
		commend.add("flv");
		commend.add("-r");
		commend.add("25");
		commend.add("-s");
		commend.add(s);
		commend.add("-an");
		commend.add(rtmp);
		try {
			ProcessBuilder builder = new ProcessBuilder(); //創建系統進程
			builder.command(commend);
			builder.start();//啟動進程
		} catch (Exception e) {
			e.printStackTrace();
		}
		return true;
	}

 注:以上所涉及軟件都可在網上找到,如果找不到或者有什么問題可直接回復博文,我看到后會第一時間回復大家

轉載請注明出處謝謝

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM