FFmpeg開發筆記(四十五)使用SRT Streamer開啟APP直播推流

aqi00發表於2024-08-10
SRT Streamer是一個安卓手機端的開源SRT協議直播推流框架,可用於RTMP直播和SRT直播。SRT Streamer支援的影片編碼包括H264、H265等等,支援的音訊編碼包括AAC、OPUS等等,可謂功能強大的APP直播框架。

相比之下,另一款APP直播框架RTMP Streamer支援RTMP直播和RTSP直播,不支援SRT協議的直播。而本文講述的SRT Streamer支援RTMP直播和SRT直播,不支援RTSP協議的直播。有關RTMP Streamer的說明參見之前的文章《使用RTMP Streamer開啟APP直播推流》,下面介紹如何使用SRT Streamer開啟手機的APP直播推流。

一、下載SRT Streamer

SRT Streamer採取全Kotlin編碼,需要在Android Studio Jellyfish(小水母版本)上編譯執行,並且依賴最新的JDK17,對執行環境與開發者的技能要求都比較高。博主花了好長時間才找到可用的SRT Streamer原始碼,如果大家需要這套原始碼,可在京東自營購買《FFmpeg開發實戰:從零基礎到短影片上線》一書,聯絡作者獲取SRT Streamer原始碼。
博主找到的SRT Streamer原始碼採用Kotlin編寫,非Java編寫,需使用小水母版本的AS開啟。所以需要先安裝小水母版本的AS,也就是Android Studio Jellyfish,該版本AS的下載地址為 https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2023.3.1.18/android-studio-2023.3.1.18-windows.zip 。

二、載入SRT Streamer

下載的SRT Streamer原始碼是個完整的AS專案,啟動小水母版本的Android Studio,依次選擇選單:File→Open,在彈出的檔案對話方塊中選擇解壓後的SRT Streamer原始碼目錄。Android Studio就開始自動下載相關元件,並執行gradle同步等操作。為了加快SRT Streamer專案的載入速度,可開啟專案級別的build.gradle,在repositories節點內部補充以下配置:

// 以下四行新增阿里雲的倉庫地址,方便國內開發者下載相關外掛
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'}
// 以下新增華為的倉庫地址
maven { url 'https://developer.huawei.com/repo/'}

增加以上配置的目的是引入國內的倉庫地址,以便加快相關依賴包的下載速度。
等待SRT Streamer專案成功載入完畢,檢視Android Studio左側的導航圖,可見SRT Streamer專案由下列五個模組組成:
core模組:這是SRT Streamer給音訊流和影片流分別編碼的模組。
demo-camera模組:這是SRT Streamer的攝像頭直播演示模組,也是APP工程的主入口。
demo-screenrecorder模組:這是SRT Streamer的螢幕錄影直播演示模組。
extension-rtmp模組:這是SRT Streamer處理RTMP協議通訊的模組。
extension-srt模組:這是SRT Streamer處理SRT協議通訊的模組。

三、啟動SRT Streamer

Android Studio成功載入SRT Streamer之後,即可在手機上安裝SRT Streamer的演示APP了。有關APP編譯和安裝的詳細步驟參見《Android Studio開發實戰:從零基礎到App上線(第3版)》一書第2章的“2.1.1 App的執行環境”,這裡不再贅述。
SRT Streamer的演示APP在手機上安裝完畢,啟動後的初始介面是下面這樣的。

注意首次使用SRT Streamer需要先配置SRT伺服器資訊,點選介面左上角的三點設定按鈕,開啟伺服器設定頁面如下所示。

這裡要修改以下四個SRT伺服器配置:

1、Endpoint區域的Type欄位:點選後下拉選擇SRT device,表示採用SRT協議推流。
2、SRT Server區域的IP欄位:填流媒體伺服器的IP。
3、SRT Server區域的Port欄位:填流媒體伺服器對SRT協議的開放埠。比如SRS預設的SRT埠號為10080,ZLMediaKit預設的SRT埠號為9000。
4、SRT Server區域的Stream ID欄位:填“#!::r=live/test,m=publish”。
可見SRT Streamer提供了豐富多樣的直播形式,既可以透過手機攝像頭直播,還能對手機的螢幕操作進行直播。具體的直播協議又包括RTMP和SRT兩種,可以滿足絕大多數場景的直播需求,而且SRT Streamer是個開源軟體,提供了完整的APP直播錄製全套程式碼,非常適合開發者學習和研究。

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

相關文章