輕鬆入門Android直播相關技術 從0搭建直播

本文已在我的公衆號hongyangAndroid原創首發。
轉載請標明出處:
http://blog.csdn.net/lmj623565791/article/details/77937483
本文出自張鴻洋的博客

本文已在我的公衆號hongyangAndroid原創首發,文章合集

公衆號後臺很多關注者給我留言,想學習直播相關技術,但是無從下手,其實我也非直播專業人士,不過可以提供點入門的方案,希望以此做到一定的引導作用。

首先搜索了一波,發現了知乎上還有個類似的提問:

https://www.zhihu.com/question/49160322/answer/114587604

文章中第一個回答就是指導如何搭建一個直播系統。

從0開始搭建一個直播系統

我立馬實踐了下,所以首先給大家分享下整個搭建的流程:

本人的操作系統爲mac,其他系統的同學可以根據提示,自行安裝軟件。

一個簡易的直播系統,大致可以由三部分組成:

  • 搭建一個rtmp媒體服務器
  • 推流端
  • 拉流端

現在目標是快速搭建起來,所以當然是藉助開源項目和一些軟件:

  • rtmp媒體服務器:這裏使用srs
  • 推流端:這裏使用obs
  • 拉流端:這裏使用播放器vlc

rtmp媒體服務器的搭建

這裏使用srs,srs的鏈接爲:
https://github.com/ossrs/srs

首先clone到本地,進入到trunk目錄:

git clone https://github.com/ossrs/srs.git
cd srs/trunk
  • 1
  • 2

然後執行:

./configure --osx
  • 1

注意: Centos6.x/Ubuntu12 32/64bits用戶僅需要執行./configure。

最後執行:

make
  • 1

執行成功後,就可以開啓我們的服務了:

./etc/init.d/srs start
  • 1

如果是mac系統,此時會失敗,原因是srs.conf中max_connections太大,
目錄爲srs/trunk/conf/srs.conf,可以修改爲248(其他操作系統可能無此問題)。

再次回到trunk目錄:

./etc/init.d/srs start
  • 1

到此我們的srs服務器就搭建起來了。

注:
Centos、Ubuntu可以參考官網搭建,比較簡單。
如果你啓動過程中還遇到了其他錯誤,可以查看log信息:
srs/trunk/objs/srs.log
其他指令:
停止 ./etc/init.d/srs stop
重啓 ./etc/init.d/srs restart

有了服務器之後,我們就準備開始我們的推流端。

如果你實在搭建不成功,可以先拿116.196.121.20這個ip做測試,我在京東雲上搭建的,配置較低,主要用於大家臨時測試,可能不穩定,看一眼就行,後續會關掉,所以還是儘可能自己搭建成功吧。

使用OBS推流

下載地址:https://obsproject.com/

先下載安裝,這裏就簡單了

首先選擇點擊+選擇來源,這裏我選擇了窗口捕獲,然後點擊右側的設置:

選擇流,串流類型選擇自定義,然後url,填寫:

rtmp://你的ip/你喜歡的url
  • 1

流名稱可以按照上述自由輸入。

記住我們的url和流名稱:

rtmp://192.168.1.102/zhy/mylive
  • 1

完成後,點擊確定。

然後點擊開始推流即可。

這樣,我們的OBS推流就開啓啦,軟件的更多使用自行探索吧。

最後就剩下我們的拉流了。

使用VLC拉流

下載地址:http://www.videolan.org/vlc/

先下載安裝,這個就更簡單啦。

點擊Open Network,輸入我們剛纔的url+流名稱,點擊確定即可。

稍等,就開始播放我們的推流內容了。

演示個動圖:

最左側是VLC,中間是OBS,右側是我窗口捕獲對象。

到這裏,就算我們搭建了一個直播系統啦~~自己搭建成功的感覺,無比爽快,也能很大的激發我們後續的學習興趣。

後面我們可以根據自己的需求去選擇學習拉流或者推流,逐步替換掉軟件。拉流的方式很多,很多開源播放器都支持。這裏我們考慮替換掉推流,希望可以使用手機來推流。

使用第三方推流SDK

最簡單的方式,就是可以藉助於第三方的推流SDK,大多情況下第三方SDK完整方案都是收費的,不過他們的推流Android SDK倒是可以下載無需付費情況下來學習使用的。

這裏以百度雲的直播SDK爲例,下載地址:
https://cloud.baidu.com/doc/Downloadcenter/Push.html#.E7.89.88.E6.9C.AC.E6.9B.B4.E6.96.B0.E8.AF.B4.E6.98.8E

直接點擊下載Android SDK即可,下載完成後解壓,然後倒入AS(這竟然是個Eclipse項目…),還好AS支持,導入後:

直接將mStreamKey修改我們的rtmp的地址即可。

注意,需要在build.gradle中添加下v7的依賴

compile 'com.android.support:appcompat-v7:23.0.0'
  • 1

然後運行,界面還可以:

貼一下運行時的效果圖:

還是以vlc拉流即可,整個過程很緩慢,耐心等待,效果也不是很好,不過能跑通即可,主要是學習。然後你可以舉一反三試試其他的SDK。

當然了,很多開源項目其實比SDK作爲學習資料更好,比較源碼都有,下面以一個開源項目舉例。

使用開源項目推流

使用一個開源項目:

https://github.com/begeekmyfriend/yasea

直接clone,導入。
這個比較順利,導入後,修改下rtmp鏈接:

然後運行即可(導入不成功,自己想辦法解決,基礎能力啦~)。

貼一張效果圖:

硬解碼的情況下,效果比前面的SDK好很多~~

好了,最後我們再看一種方式。

恩,ffmpeg很火,ffmpeg很強大。
所以最後一種方式,就是看如何利用ffmpeg推流啦~~

利用ffmpeg推流

大家可以自己下載ffmepg的源碼,然後按照網上的方式去編成so,簡單的一點而且比較實用的,就是編出可以執行ffmpeg 命令的so,這樣就能幹很多事情了。

這裏,由於篇幅,我們就直接使用別人編好的項目了。

https://github.com/WritingMinds/ffmpeg-android-java

直接導入,該項目支持直接運行ffmpeg的命令。

ffmpeg命令很多:
例如:

將.avi轉成gif動畫(未壓縮)
ffmpeg -i video_origine.avi gif_anime.gif
合成視頻和音頻
ffmpeg -i son.wav -i video_origine.avi video_finale.mpg
還有非常多的功能,可以參考:
http://blog.csdn.net/king1425/article/details/70348374

其中有一個命令就是支持推流,這裏將手機上的zixia.mp4作爲輸入:

ffmpeg -re -i /storage/emulated/0/zixia.mp4 
    -vcodec libx264 
    -acodec aac 
    -f flv 
    -strict -2 rtmp://192.168.1.102/zhy/mylive=
  • 1
  • 2
  • 3
  • 4
  • 5

那麼這個庫是支持在手機上運行ffmpeg命令的,那就簡單了:

貼上我們需要執行的命令,運行即可。

這裏注意我推的是存儲卡上的一個媒體文件,注意添加相關權限,效果如下。

好了,這樣我們的大致學習瞭如何搭建一個小直播系統,如何利用SDK,開源項目,以及簡單的使用ffmpeg來進行推流~~

很多時候,學習一個比較大的技術方向就是開頭難,無從下手,那麼本篇應該是一篇非常易懂的教程,希望對想要學習直播技術的小夥伴有所幫助,也希望以此能夠激發大家一定的學習興趣,當然直播技術遠不止於此,大家可以根據自己的情況繼續深入學習~


支持我的話可以關注下我的公衆號,每天都會推送新知識~

歡迎關注我的微信公衆號:hongyangAndroid
(可以給我留言你想學習的文章,支持投稿)

參考:

https://github.com/WritingMinds/ffmpeg-android-java
https://github.com/begeekmyfriend/yasea
https://cloud.baidu.com/doc/Downloadcenter/Push.html
https://www.zhihu.com/question/49160322/answer/114587604
https://github.com/ossrs/srs
http://www.jianshu.com/p/dd3f58392aa0#
http://blog.csdn.net/king1425/article/details/70348374

原博客地址:https://blog.csdn.net/lmj623565791/article/details/77937483

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章