博客 / 詳情

返回

FFmpeg開發筆記(九十四)基於Kotlin的國產開源推拉流框架anyRTC

​《FFmpeg開發實戰:從零基礎到短視頻上線》一書的“10.2.2  FFmpeg向網絡推流”介紹了輕量級流媒體服務器MediaMTX,通過該工具可以測試RTSP/RTMP等流媒體協議的推拉流。可是在此之前,得先有一個推流工具向MediaMTX推送視頻流,這樣末端的拉流程序才能從MediaMTX源源不斷地拉取視頻流。那麼Android手機可使用anyRTC從攝像頭實時採集視頻信號,並向後端的MediaMTX持續推送視頻數據。

anyRTC是一款基於Android的實時濾鏡RTMP推流庫,它使用MediaCodec的API進行視頻和音頻編碼,並使用librtmp庫執行rtmp流式傳輸。此外,anyRTC還提供了在攝像頭捕捉階段之後和編碼階段之前實時視頻濾鏡的功能。
anyRTC的官網為 https://www.anyrtc.io/ ,源碼託管地址為 https://github.com/anyrtcIO-Community/anyRTC-RTMP-OpenSource (星星數4.9k),國內的鏡像地址為 https://gitcode.com/gh_mirrors/any/anyRTC-RTMP-OpenSource ,該框架的最後更新時間為2023年12月,可見它的更新十分及時。
anyLive是anyRTC開源的推拉流項目,它採用跨平台架構設計(採用WebRTC(93)版本為基礎框架),一套代碼支持Android、iOS、Windows、Mac、Ubuntu等平台。anyRTC支持的流媒體協議包括rtmp、http/https、rtsp、hls、m3u8、mkv、mp3、mp4等,引用的第三方庫包括libfaac 1.28、libfaad2 2.7、ffmpeg 4.3、libsrtp、libvpx等等。
其中Android版本的anyRTC位於源碼包的Prj-Android目錄,Prj-Android工程基於Kotlin+Compose編碼,最低支持到Android4.4,並採用Android 12.0編譯,具有很高的學習和研究價值。並且通過小海豚版本的Android Studio Dolphin即可打開Prj-Android工程,可謂十分方便。
這裏以Android Studio Dolphin(小海豚版本)為例,介紹如何在App工程中導入並編譯anyRTC,詳細的操作步驟如下。

一、修改案例工程的Gradle版本

打開Prj-Android/gradle/wrapper/gradle-wrapper.properties,把下面這行

distributionUrl=https://services.gradle.org/distributions/gradle-7.0.2-bin.zip

改成下面這行,也就是把Gradle7.0.2升級級到7.2。

distributionUrl=https://services.gradle.org/distributions/gradle-7.2-bin.zip

二、修改模塊級別的build.gradle

打開Prj-Android/liveplayer/build.gradle,註釋掉下面的ndkVersion這行:

ndkVersion '20.0.5594570'

因為實測發現編譯Prj-Android項目採用android-ndk-r18b版本即可。

三、導入編譯好的so文件

到這裏下載壓縮包 https://storage.agrtc.cn:1000/share/0v2et4RX ,解壓後將lib文件夾放到Prj-Android/liveplayer/src/main/cpp目錄下,再使用小海豚版本的Android Studio Dolphin打開Prj-Android項目。

四、修改默認的拉流地址

打開Prj-Android項目的app\src\main\java\io\anyrtc\liveplayer\PullActivity.kt,把下面這行代碼

go(PullActivity::class.java, Pair("url",VIDEO_1))

改成下面這行,也就是把拉流地址改為用户輸入的直播鏈接:

go(PullActivity::class.java, Pair("url",binding.etUrl.text.toString()))

以上幾個步驟的修改之後,編譯運行anyRTC的App工程,在真機上看到的anyRTC初始界面如下圖所示。

可見anyRTC既支持向服務器推流,也支持從服務器拉流。那麼準備兩部安卓手機,一部用於推流,另一部用於拉流。用於推流的手機點擊App界面上的【直播推流】區域,打開推流頁面如下圖所示:

在推流之前,得先輸入流媒體服務器的推流地址。為此按照《FFmpeg開發實戰:從零基礎到短視頻上線》一書的“10.2.2  FFmpeg向網絡推流”説明,在電腦上啓動MediaMTX,並通過命令“ipconfig /all”找到電腦位於WiFi的局域網IP。
確保手機和電腦連接了同一個WiFi,再往anyRTC的推流界面填上MediaMTX的完整推流地址如“ rtmp://192.168..:1935/stream ”,接着點擊【開始推流】按鈕,打開推流預覽界面如下圖所示。

點擊左上角的翻轉按鈕可切換前後攝像頭,點擊麥克風按鈕可開關聲音,可見anyRTC正在把攝像頭採集到的視頻數據向MediaMTX推流。
然後另一部手機點擊App界面上的【直播拉流】區域,打開拉流頁面如下圖所示:

在拉流頁面中輸入對應的MediaMTX拉流地址“ rtmp://192.168..:1935/stream ”,接着點擊頁面下方的【開始播放】按鈕,此時anyRTC就自動播放來自拉流地址的視頻畫面如下圖所示。

對比anyRTC的推流預覽界面和拉流播放界面,可知一部手機攝像頭採集到的視頻信號正確傳送給了另一部手機。

更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短視頻上線》一書。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.