C#推送RTMP到SRS通過VLC進行取流播放!!


     前面一篇文章簡單的介紹了下如何利用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中,還有很多需要研究,這邊只是做一個備注作用以防忘記。希望對剛入門的所有菜鳥們有個更好的理解。

   

 


免責聲明!

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



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