登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
资源区
›
代码
›
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播 ...
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址
[ 复制链接 ]
巨到
2025-6-4 18:32:28
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了,无法应用于真实直播的生产环境,真正能用于生产环境的流媒体服务器还要看SRS或者ZLMediaKit。 SRS是一款开源流媒体服务器,最开始是做RTMP直播的,那时全称为“Simple RTMP Server”,意思是简单的RTMP服务器。后来SRS增加支持了其他流媒体协议,包括HLS、SRT、WebRTC等等,它的全称又改为“Simple Realtime Server”,意思是简单的实时服务器。
有关SRS的编译、安装与启动过程参见之前的文章《Linux环境安装SRS实现视频推流》。注意,使用ffmpeg命令把视频文件推流给SRS时,要注意区分FFmpeg的版本,因为FFmpeg从6.1开始才给RTMP协议支持HEVC、VP9、AV1这三种视频编码器,所以FFmpeg 6.0和更早的版本只能以H.264格式向SRS推流,如下所示:
ffmpeg -re -stream_loop -1 -i "/usr/local/src/test/2018s.mp4" -vcodec h264 -f flv rtmp://127.0.0.1/live/test
复制代码
而下面这种以HEVC格式(即H.265)向SRS推流的命令对于FFmpeg 6.0和更早的版本来说是错误的:
ffmpeg -re -stream_loop -1 -i "/usr/local/src/test/2018s.mp4" -vcodec hevc -f flv rtmp://127.0.0.1/live/test
复制代码
只有把FFmpeg升级到6.1或更高版本,才能以HEVC格式把视频文件推流给SRS。
在手机上可通过APP或者小程序播放RTMP直播流,其中小程序使用video标签播放RTMP链接,APP除了借助FFmpeg库处理之外,还能使用ExoPlayer播放RTMP链接。引入ExoPlayer播放RTMP直播流的集成步骤说明如下。
一、修改build.gradle
打开APP模块的build.gradle,在dependencies节点内部补充以下的导包配置:
implementation 'com.google.android.exoplayer:exoplayer:2.17.1'
implementation 'com.google.android.exoplayer:extension-rtmp:2.17.1'
复制代码
可见以上配置不但导入了exoplayer的主包,还导入了rtmp的扩展包。
二、修改播放代码支持RTMP流
ExoPlayer的详细用法参见《Android Studio开发实战:从零基础到App上线(第3版)》一书第14章的“14.3.3 新型播放器ExoPlayer”,其中与RTMP有关的播放代码方法修改如下:
// 播放视频
private void playVideo(String url) {
DataSource.Factory factory = new DefaultDataSource.Factory(this);
// 创建指定地址的媒体对象
MediaItem videoItem = new MediaItem.Builder().setUri(Uri.parse(url)).build();
// 基于工厂对象和媒体对象创建媒体来源
MediaSource videoSource;
if (url.endsWith("m3u8")) { // HLS地址
videoSource = new HlsMediaSource.Factory(factory)
.createMediaSource(videoItem);
} else if (url.startsWith("rtmp")) { // RTMP地址
videoSource = new ProgressiveMediaSource.Factory(new RtmpDataSource.Factory())
.createMediaSource(videoItem);
} else {
videoSource = new ProgressiveMediaSource.Factory(factory)
.createMediaSource(videoItem);
}
mPlayer.setMediaSource(videoSource); // 设置播放器的媒体来源
mPlayer.prepare(); // 播放器准备就绪
mPlayer.play(); // 播放器开始播放
}
复制代码
可见主要改动是增加判断RTMP地址,如果是RTMP链接就引入RtmpDataSource作为数据工厂来源。
三、调整SRS的配置文件
通过小程序或者ExoPlayer播放RTMP直播流时,可能出现播放界面黑屏,但有声音传出的情况。这是因为SRS默认没有缓存关键帧,使得拉流一开始没找到关键帧就黑屏了。
解决办法是修改SRS配置,指定开启缓存GOP,这样客户端在拉流时总能找到已缓存的关键帧。打开srs安装目录下的conf/srs.conf,在“vhost __defaultVhost__”节点内部添加下面一行:
gop_cache on;
复制代码
该行配置的作用是开启缓存关键帧,实际应用记得设置为on,否则客户端拉流找不到关键帧就无法渲染画面。
更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
FFmpeg
开发
笔记
三十八
APP
相关帖子
原始类型与泛型对比笔记
C++学习笔记 23 宏 Macro
【Agent】MemOS 源码笔记---(6)---MemScheduler -- 总体
FFmpeg 关键的结构体
n8n整合ffmpeg
精选 8 个 .NET 开发实用的类库,效率提升利器!
精选 8 个 .NET 开发实用的类库,效率提升利器!
精选 8 个 .NET 开发实用的类库,效率提升利器!
精选 8 个 .NET 开发实用的类库,效率提升利器!
精选 8 个 .NET 开发实用的类库,效率提升利器!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
原始类型与泛型对比笔记
0
777
晖顶蝇
2025-12-17
业界
C++学习笔记 23 宏 Macro
1
772
呼延冰枫
2025-12-18
业界
【Agent】MemOS 源码笔记---(6)---MemScheduler -- 总体
1
321
上官银柳
2025-12-18
业界
FFmpeg 关键的结构体
1
185
乙荒
2025-12-19
业界
n8n整合ffmpeg
0
519
但婆
2025-12-19
业界
精选 8 个 .NET 开发实用的类库,效率提升利器!
1
890
箝德孜
2025-12-20
业界
精选 8 个 .NET 开发实用的类库,效率提升利器!
0
85
迁岂罚
2025-12-20
业界
精选 8 个 .NET 开发实用的类库,效率提升利器!
0
575
裸历
2025-12-20
业界
精选 8 个 .NET 开发实用的类库,效率提升利器!
0
145
郗新语
2025-12-20
业界
精选 8 个 .NET 开发实用的类库,效率提升利器!
0
116
宛蛲
2025-12-20
回复
(2)
时思美
2025-11-1 01:38:43
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
yyds。多谢分享
佟棠华
前天 23:28
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个好,看起来很实用
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
巨到
前天 23:28
关注
0
粉丝关注
18
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994892
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9981
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9950
查看更多
今日好文热榜
487
【有手就行】SWIFT:花20分钟把大模型的名
559
论文速读记录 | 2025.12(2)
370
浮点数的本质:为什么计算机无法精确表示0.
726
Flink源码阅读:如何生成JobGraph
926
Python 潮流周刊#132:30 年 Python 自由职
480
大模型榜单周报(2025/12/20)
154
【节点】[LinearToGammaSpaceExact节点]原
787
Aspire 与 Azure Functions 深度集成:架构
1001
阿里Z-Image图像生成模型容器部署
309
痞子衡嵌入式:16MB以上NOR Flash地址模式
667
最新AI换脸软件,全面升级可直播,Mirage下
450
热点 Key 与大 Key 治理——识别、拆分、预
646
Media Extended
326
vlookup的终结者splookup,9个案例讲透查询
853
ROS2之Launch介绍
890
精选 8 个 .NET 开发实用的类库,效率提升
85
精选 8 个 .NET 开发实用的类库,效率提升
575
精选 8 个 .NET 开发实用的类库,效率提升
145
精选 8 个 .NET 开发实用的类库,效率提升
116
精选 8 个 .NET 开发实用的类库,效率提升