前面一篇文章簡單的介紹了下如何利用SRS自帶的播放地址進行觀看RTMP直播流,也就是說是使用SRS的內置demo進行Test,可是進行視頻直播確定不可能使用那樣的去開發,不開源的東西確定很差用。因爲在研究的過程當中不多關於C#方面的資料,大部分都是本身慢慢磨出來的。以爲那些剛開始入門的人頗有幫助,因此決定貼出來,方便那些剛入門的學者,由於畢竟有些資料寫的太專業,並且有些剛入門的雖然說寫的很詳盡,可是沒有一個完整的概念,很難理解,本文着重講解下如何使用C#進行編碼推送RTMP至服務器,以及取流播放。讓剛入門的菜鳥一看就懂。linux
1.準備材料:VMware Workstation 12 Player或更高版本(用於搭建Ubuntu)、Ubuntu(linux環境) 、SRS(linux下搭建的服務器)、VLC(播放器)或者ffplay、FFMPEG。git
2. 語言:C#;github
3.工具:VS2015ubuntu
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中,還有不少須要研究,這邊只是作一個備註做用以防忘記。但願對剛入門的全部菜鳥們有個更好的理解。