前面一篇文章簡單的介紹了下如何利用SRS自帶的播放地址進行觀看RTMP直播流,也就是說是使用SRS的內置demo進行Test,但是進行視頻直播肯定不可能使用那樣的去開發,不開源的東西肯定不好用。由於在研究的過程中很少關於C#方面的資料,大部分都是自己慢慢磨出來的。覺得那些剛開始入門的人很有幫助,所以決定貼出來,方便那些剛入門的學者,因為畢竟有些資料寫的太專業,而且有些剛入門的雖說寫的很詳盡,但是沒有一個完整的概念,很難理解,本文着重講解下如何使用C#進行編碼推送RTMP至服務器,以及取流播放。讓剛入門的菜鳥一看就懂。
1.准備材料:VMware Workstation 12 Player或更高版本(用於搭建Ubuntu)、Ubuntu(linux環境) 、SRS(linux下搭建的服務器)、VLC(播放器)或者ffplay、FFMPEG。
2. 語言:C#;
3.工具:VS2015
4.可以參考的資料:https://github.com/ossrs/srs SRS服務器搭建。
前面第4點已經給出了github的git地址,請大家在搭建好ubuntu(關於如何搭建ubuntu請參考我的前一篇)之后,開機使用內置的瀏覽器進行下載,如下圖所示:
使用過github的人不需要多廢話,可以通過git的方式,或者直接點擊【Download ZIP】的方式下載到ubuntu上,然后最重要的,也是其他人資料都是輕描淡寫的步驟很關鍵:
1.從官網這里指的是(https://github.com/ossrs/srs)這邊git或者下載下來保存在ubuntu上。(git地址:https://github.com/ossrs/srs.git)
2.獲取之后要進行編譯(很多資料寫編譯僅僅是列出一條指令,並不說明是在什么環境下,什么地方進行編譯,因為根本沒資料參考也沒接觸過這個東西只能自己磨,所以花了整整2天時間才磨透)這個對初學者非常重要。
在ubuntu下打開下載好的文件,然后打開文件夾:本人下載的是srs-2.0-b4》trunk,然后比較關鍵的一步,很多資料也不說清楚是怎么編譯的,對於沒接觸過的初學者來講難度很大;空白處右鍵:出現【在終端打開(T)】然后開始編譯,使用命令:./configure && make然 后回車,回車完成之后有提示輸入密碼就輸入密碼(可能會看不見輸入的密碼,不管它)。然后再回車,繼續編譯,耐心等待它編譯完成,編譯完成之后再啟動服務器SRS.
3.啟動命令:scripts/run.sh然后回車,當然這條指令必須要明確路徑,我是在第2條的基礎上進行啟動的。
4.至此服務SRS就已經編譯並且完成啟動了。接下來就開始准備另一個工具FFMPEG進行視頻推送。
5.到官方網站:https://ffmpeg.zeranoe.com/builds/ 根據自己的系統下載相應的版本。(速度稍微有點慢,耐心等待完成)。
6.下載完成之后打開文件夾bin目錄下會有三個可執行文件分別是ffmpeg.exe/ffpaly.exe/ffprobe.exe,本文着重介紹推流跟播放。
7.接下來就是C#編寫調用ffmpeg.exe了,網上的參考資料非常少,還是自己編譯的通過了,一定要跟大家分享,代碼如下:
1 /// <summary> 2 /// 推流至服務器SRS 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void button1_Click(object sender, EventArgs e) 7 { 8 //第一步檢測讀取的地址是否為空 9 if (this.textBox1.Text.Trim() != "") 10 { 11 //第二步讀取后綴名是否為flv 12 //string path = Path.GetExtension(this.textBox1.Text.Trim()); 13 //if (path != "flv") 14 //{ 15 //第三步檢測服務器SRS是否正常開啟 16 string strpath = System.IO.Directory.GetCurrentDirectory(); //文件名 17 //string strpath = "d:\\我的文檔\\visual studio 2015\\Projects\\SRS_RTMP\\SRS_RTMP\\bin\\Debug\\ffmpeg.exe"; 18 19 20 Process p = new Process();//創建進程 21 p.StartInfo.FileName = @"" + strpath + "" + "\\ffmpeg.exe";//ffmpeg的絕對路徑可以自由更改 22 p.StartInfo.Arguments = "-i " + this.textBox1.Text.Trim().ToString() + " -vcodec copy -acodec copy -f flv -y rtmp://192.168.61.128/live/livestream";//ffmpeg參數 23 //F:\ffmpeg-20170214-8fa18e0-win64-static\bin\ffmpeg.exe -i F:\mytest.flv 24 p.StartInfo.UseShellExecute = false;//不使用操作系統外殼程序啟動線程 25 p.StartInfo.RedirectStandardError = true;//把外部程序錯誤輸出寫到StandardError流中 26 p.StartInfo.CreateNoWindow = true; //設置置不顯示示窗口 27 //p.ErrorDataReceived += new DataReceivedEventHandler(Output);//外部程序(這里是FFMPEG)輸出流時候產生的事件 28 p.Start();//啟動線程 29 p.BeginErrorReadLine();//開始異步讀取 30 p.WaitForExit();//阻塞等待進程結束 31 p.Close();//關閉進程 32 p.Dispose();//釋放資源 33 MessageBox.Show("推流完成,推流的同時可以使用播放器進行觀看!"); 34 35 ffplay(); 36 37 //} 38 //else 39 //{ 40 // MessageBox.Show("請先進行轉碼后再進行推送!"); 41 //} 42 } 43 else 44 { 45 MessageBox.Show("先打開文件后再進行推流!"); 46 } 47 }
8.這是一個簡單的Winform推流代碼,希望對大家有幫助,推流完成之后,我們就可以開始使用第三方播放器VLC取流進行播放,這邊暫時還沒使用內置播放器ffpaly進行播放。效果圖如下:
9.至此推流完成,可以實時進行推流播放,目前還在學習ffmpeg中,還有很多需要研究,這邊只是做一個備注作用以防忘記。希望對剛入門的所有菜鳥們有個更好的理解。