先唠唠:为啥不直接用现成播放器?
一开始我也觉得,Android 上播 RTSP 而已,找个播放器接进去不就行了。
实际做摄像头、监控、无人机或者工业视频项目以后才发现,能播 和 能稳定地用在项目里,完全是两回事。
我找过不少现成方案。有些确实能把画面显示出来,但一到真实设备和真实网络环境,问题就慢慢出来了:延迟不低、H.265 兼容性一般、网络断开后不恢复、录像截图还得自己补,多路预览时又是另一套问题。
所以后来我干脆基于 FFmpeg 6.1.1 整理了一套 Android 播放链路。这个项目不是为了再做一个“播放成功”的 Demo,而是想把实际项目里最容易反复踩坑的部分先处理掉。
第一个坑:低延迟不是改一个参数就能解决
RTSP 延迟高,很多时候不是播放器单方面的问题。
从摄像机采集、编码、GOP、网络传输,到 Android 解码和渲染,每一段都会叠加延迟。普通播放器在很多场景下能正常播放,但放到实时监看里,画面可能已经比现场慢了几百毫秒。
我更关注的是从视频源到屏幕的实际效果,而不是只看播放器内部某一个参数。下面是示例工程中的延迟演示:

这里的硬件解码参考延迟大约在 80–120ms。不同摄像机、网络、码率、GOP 和手机型号的结果会不一样,这个数据只能作为参考,不能当成所有场景下的固定承诺。
第二个坑:视频能播,不代表功能就够用
实际项目里,通常不只是“拉一路 RTSP 然后显示出来”。
常见需求还包括:
- H.264 和 H.265 都要支持;
- 需要硬件解码,也要考虑不同手机的兼容性;
- 需要截图和录像;
- 需要镜像、缩放、旋转或者 OpenGL 渲染;
- 网络波动以后要能自动重连;
- 有时需要多路监看;
- 做 AI 分析时,需要拿到 YUV 数据。
这些能力如果拆开做,单个都不算特别难;但它们放进同一个 Android 项目里,播放器的状态管理、资源释放和异常处理就会越来越复杂。
第三个坑:最麻烦的往往是稳定性
很多 Demo 第一次打开能播放,不代表长期运行没问题。
比如摄像机重启、Wi-Fi 切换、RTSP 服务短暂断开、应用切到后台再回来,这些场景都可能让画面停住。更麻烦的是,有时界面看起来还在,但底层已经没有数据了。
所以这个项目里除了播放本身,也一直在处理这些事情:
- 播放状态回调;
- 错误信息回调;
- 网络异常后的重连;
- Surface 动态绑定;
- 播放器资源释放;
- 截图和录像状态管理。
说白了,目标不是让你“第一次看到画面”,而是尽量少花时间处理线上出现的各种边缘问题。
我最后想做成什么样?
目前这个播放器主要围绕下面几个方向迭代:
- 尽可能降低从视频源到 Android 屏幕的延迟;
- 处理不同设备和不同 H.264/H.265 视频源的兼容性问题;
- 把重连、录像、截图、渲染和生命周期管理做成可直接使用的能力;
- 支持单路预览、多路监看和 Headless 拉流;
- 为 YUV 数据处理和 AI 分析预留扩展能力。
它不承诺所有手机都能达到完全一样的效果,但希望开发者拿到以后,不需要从网络、解码、渲染和资源释放开始重新踩一遍坑。
免费版能用到什么程度?
免费版允许个人和企业商用,不限制应用数量、设备数量和最终用户数量。
限制只有一个:同一时刻最多播放一路视频。
单路播放时,下面这些功能都可以直接使用:
- 4K 视频播放;
- H.264/H.265 播放;
- MediaCodec 硬件解码;
- FFmpeg 软件解码;
- OpenGL ES 渲染;
- 截图;
- 录像;
- 自动重连;
- RTSP TCP/UDP 传输;
- Android 7.0 及以上系统支持。
多路并发和 YUV 数据导出属于商业授权功能。这个边界比较简单:如果项目只需要预览一路摄像头,免费版就可以直接使用;需要多路或需要 YUV 做 AI 分析时,再考虑商业授权。
示例工程里有什么?
示例工程不是只有一个播放页面,目前包含:
- 单路播放和常用参数配置;
- 多路视频监看;
- 软解和 OpenGL 渲染相关示例;
- 截图和录像;
- YUV 数据处理;
- Headless 无画面拉流。
Demo 使用了专用展示授权,因此可以体验多路播放和 YUV 数据导出。这个授权只对示例应用的指定包名和签名生效,不能复制到其他应用中。
如果你想跑一下 Demo
示例项目中已经带了 AAR 和完整页面,导入 Android Studio 后即可查看。最小播放调用大概是这样:
val config = StreamConfig.Builder(rtspUrl)
.audioEnabled(true)
.build()
StreamPlayer.playWithConfig(
this,
surfaceView,
config
)
具体参数、生命周期处理和更多示例,可以直接看项目里的 Demo 代码。
最后
项目地址:
如果你也在做 Android 摄像头、监控、无人机、直播或 AI 视频分析项目,欢迎试一下。遇到兼容性问题也可以提 Issue,最好附上设备型号、Android 版本、视频编码和日志,这些真实反馈对项目迭代很有帮助。