《FFmpeg開發實戰:從零基礎到短視頻上線》一書的“10.2.2 FFmpeg向網絡推流”介紹了輕量級流媒體服務器MediaMTX,通過該工具可以測試RTSP/RTMP等流媒體協議的推拉流。可是在此之前,得先有一個推流工具向MediaMTX推送視頻流,這樣末端的拉流程序才能從MediaMTX源源不斷地拉取視頻流。那麼Android手機可使用librestreaming從攝像頭實時採集視頻信號,並向後端的MediaMTX持續推送視頻數據。
librestreaming是一款基於Android的實時濾鏡RTMP推流庫,它使用MediaCodec API進行視頻和音頻編碼,並使用librtmp庫執行rtmp流式傳輸。此外,librestreaming還提供了在攝像頭捕捉階段之後和編碼階段之前實時視頻濾鏡的功能。
librestreaming的源碼託管地址為 https://github.com/lakeinchina/librestreaming (星星數1.0k),國內的鏡像地址為 https://gitee.com/mirrors/librestreaming ,該框架的最後更新時間為2020年8月,並支持到Android 7.0。雖然librestreaming很久沒有更新了,但其源碼功能完備、代碼也不太難,具有很高的學習和研究價值。
由於librestreaming源碼的更新時間較早,為了讓小海豚版本的Android Studio Dolphin能夠打開它的範例工程,需要對librestreaming的App工程作如下修改:
一、補充gradle目錄
下載完的librestreaming源碼包缺少gradle目錄,不能被Android Studio直接打開,需要先把其他App項目的gradle目錄整個複製過來,並且打開gradle/gradle-wrapper.properties,把distributionUrl這行配置改成下面這樣,表示使用6.7.1版本的Gradle
distributionUrl=https://services.gradle.org/distributions/gradle-6.7.1-bin.zip
二、更新工具庫的倉庫位置
打開librestreaming工程的build.gradle,把裏面的兩處配置
jcenter()
google()
都改為以下配置:
// 以下四行添加阿里雲的倉庫地址,方便國內開發者下載相關插件
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google'}
maven { url 'https://maven.aliyun.com/repository/gradle-plugin'}
maven { url 'https://maven.aliyun.com/repository/public'}
google()
mavenCentral()
因為jcenter倉庫已經廢棄,所以改成引用國內的倉庫位置。
三、修改模塊的build.gradle
打開sample/build.gradle,先把“renderscriptTargetApi 20”這行註釋,再把兩處“JavaVersion.VERSION_1_7”改為“JavaVersion.VERSION_1_8”,以便適配對應的Gradle版本。
如果不這麼改的話,Gradle構建時會報錯“Failed to calculate the value of task ':librestreaming:compileDebugJavaWithJavac' property 'options.generatedSourceOutputDirectory'.”
四、把Support庫遷移到AndroidX
librestreaming工程引用了支持庫Support v27,但Android早已廢棄Support庫,轉為使用AndroidX庫,所以需要把支持庫遷移到AndroidX。在Android Studio Dolphin的主界面依次選擇頂部菜單“Refactor”→“Migrate to AndroidX”,即可將App工程的Support庫遷移到AndroidX庫。
完成以上三處修改後,重新編譯App安裝到真機上,啓動後的推流配置界面如下圖所示:
可見在推流之前,得先輸入流媒體服務器的推流地址。為此按照《FFmpeg開發實戰:從零基礎到短視頻上線》一書的“10.2.2 FFmpeg向網絡推流”説明,在電腦上啓動MediaMTX,並通過命令“ipconfig /all”找到電腦位於WiFi的局域網IP。
確保手機和電腦連接了同一個WiFi,再往librestreaming的App配置界面填上MediaMTX的完整推流地址如“rtmp://192.168..:1935/stream”,接着點擊START按鈕,打開推流預覽界面如下圖所示。
點擊左上角的START按鈕可開始推流,點擊SWAP按鈕可切換前後攝像頭,點擊FLASH按鈕可開關閃光燈。那麼點擊START按鈕開始推流,librestreaming就把攝像頭採集到的視頻數據向MediaMTX推流。
然後電腦打開VLC media player,依次選擇菜單:媒體→打開網絡串流,在彈窗的URL欄輸入對應的MediaMTX拉流地址“rtmp://192.168..:1935/stream”如下圖所示。
確認輸入無誤後,單擊右下角的播放按鈕,此時VLC media player就自動播放來自拉流地址的視頻畫面如下圖所示。
對比librestreaming的推流預覽界面和VLC media player的拉流播放界面,可知手機攝像頭採集到的視頻信號正確傳送給了電腦。
更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短視頻上線》一書。