《FFmpeg開發實戰:從零基礎到短視頻上線》一書的“10.2 FFmpeg推流和拉流”提到直播行業存在RTSP和RTMP兩種常見的流媒體協議。除此以外,還有於2017年推出的SRT協議,相比常見的RTMP協議,SRT協議具有更低的延遲,並且消除了卡幀、抖動等花屏現象。
因為SRT是個較新的直播協議,所以手機端支持SRT的開源框架比較稀有,比如本文介紹的StreamPack就是屈指可數的SRT開源推流APP。
一、StreamPack簡介
StreamPack是一款適用於Android的開源直播流媒體庫,既適合要求嚴格的視頻推流廠商,也適合進階Android的視頻開發者。
StreamPack的源碼託管地址為 https://github.com/ThibaultBee/StreamPack (星星數0.3k),國內的鏡像地址為 https://gitee.com/zonda89/StreamPack ,最新版本是2025年9月發佈的StreamPack 3.0.0,可見該框架的源碼更新十分及時,該版本的源碼下載鏈接為 https://github.com/ThibaultBee/StreamPack/archive/refs/tags/3.0.0.tar.gz 。
StreamPack主要支持RTMP和SRT兩種協議,視頻編碼支持HEVC/H.265、AVC/H.264、VP9或AV1等多種標準,音頻編碼支持AAC(LC、HE、HEv2)或Opus等多種標準。StreamPack的推留來源既可以是攝像頭,也可以是屏幕錄製器,還可以來自TS、FLV、MP4、WebM和分片MP4等格式的媒體文件。
StreamPack提供了兩種APP集成方式:引用在線庫、直接導入源碼,分別説明如下:
二、引用StreamPack在線庫
Android工程引用StreamPack在線庫時,需要修改以下三個配置:
1、打開項目級別的build.gradle,或者settings.gradle,給repositories節點補充下面一行配置(注意有兩個repositories,兩個地方都要加),表示指定Maven倉庫:
maven { url 'https://jitpack.io' }
2、打開模塊級別的build.gradle,給dependencies節點補充下面幾行配置,表示引入3.0.0版本的StreamPack庫:
// StreamPack核心
implementation 'io.github.thibaultbee.streampack:streampack-core:3.0.0'
// StreamPack界面,主要用於推流預覽
implementation 'io.github.thibaultbee.streampack:streampack-ui:3.0.0'
// StreamPack服務,主要用於屏幕錄製
implementation 'io.github.thibaultbee.streampack:streampack-services:3.0.0'
// StreamPack的RTMP協議支持
implementation 'io.github.thibaultbee.streampack:streampack-rtmp:3.0.0'
// StreamPack的SRT協議支持
implementation 'io.github.thibaultbee.streampack:streampack-srt:3.0.0'
3、打開App模塊的src/main/AndroidManifest.xml,給manifest節點補充下面三行權限配置,表示聲明網絡、錄音、相機等三個權限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
三、直接導入StreamPack源碼
由於StreamPack基於Kotlin編碼,引入了最新的Android開發技術,因此需要使用較新的Android Studio才能成功導入運行。接下來以Android Studio Ladybug(小瓢蟲版本)為例,介紹如何通過Android Studio編譯運行StreamPack的demo工程。
1、調整Gradle版本
打開StreamPack/gradle/wrapper/gradle-wrapper.properties,把下面這行
distributionUrl=https://services.gradle.org/distributions/gradle-8.11.1-bin.zip
改成下面這行,也就是把Gradle8.11.1升級級到8.14。
distributionUrl=https://services.gradle.org/distributions/gradle-8.14-bin.zip
2、修改AGP插件版本
使用Android Studio導入StreamPack工程之後,Gradle會報錯“The project is using an incompatible version (AGP 8.9.2) of the Android Gradle plugin. Latest supported version is AGP 8.7.2”。這是因為StreamPack工程用到的Gradle插件版本8.9.2太高了,需要降級降到8.7.2。於是打開StreamPack/gradle/libs.versions.toml,把下面這行
agp = "8.9.2"
改為下面這行,也就是把agp版本號從8.9.2降到8.7.2。
agp = "8.7.2"
四、運行StreamPack的DEMO工程
完成以上幾處配置調整後,重新編譯App安裝到真機上,啓動後的初始界面如下圖所示:
注意首次使用StreamPack需要先配置SRT服務器信息,點擊界面左上角的三點設置按鈕,打開服務器設置頁面如下所示。
這裏要修改以下四個SRT服務器配置:
1、Endpoint區域的Type字段:點擊後下拉選擇“Stream to a remote SRT device”,表示採用SRT協議推流。
2、SRT Server區域的IP字段:填流媒體服務器的IP。
3、SRT Server區域的Port字段:填流媒體服務器對SRT協議的開放端口。比如MediaMTX默認的SRT端口號為8890。
4、SRT Server區域的Stream ID字段:填“publish:live”。
由於視頻推流服務服務端配合,因此按照《FFmpeg開發實戰:從零基礎到短視頻上線》一書的“10.2.2 FFmpeg向網絡推流”説明,在電腦上啓動MediaMTX,並通過命令“ipconfig /all”找到電腦位於WiFi的局域網IP,接着把StreamPack的流媒體服務器IP改為電腦位於WiFi的局域網IP。
確保手機和電腦連接了同一個WiFi,再點擊StreamPack界面下方的START LIVE按鈕,StreamPack就把攝像頭採集到的視頻數據向MediaMTX推流,開始推流的預覽界面如下圖所示。
然後電腦打開VLC media player,依次選擇菜單:媒體→打開網絡串流,在彈窗的URL欄輸入對應的MediaMTX拉流地址“ srt://192.168..:8890?streamid=read:live ”如下圖所示。
確認輸入無誤後,單擊右下角的播放按鈕,此時VLC media player就自動播放來自拉流地址的視頻畫面如下圖所示。
對比StreamPack的推流預覽界面和VLC media player的拉流播放界面,可知手機攝像頭採集到的視頻信號正確傳送給了電腦。
更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短視頻上線》一書。