FFmpeg笔记九十二,Kotlin Android推流器StreamPack如何为?
摘要:《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2 FFmpeg推流和拉流”提到直播行业存在RTSP和RTMP两种常见的流媒体协议。除此以外,还有于2017年推出的SRT协议,相比常见的RTMP协议,SRT协议具有更低的延迟,
《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工程。
