登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
资源区
›
代码
›
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播 ...
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址
[ 复制链接 ]
巨到
2025-6-4 18:32:28
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
《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
相关帖子
FFmpeg开发笔记(九十四)基于Kotlin的国产开源推拉流框架anyRTC
LaTeX学习笔记:学术文档排版
docker学习笔记
docker学习笔记
复健笔记 - Pascal酒吧的爆破
【Agent】MemOS 源码笔记---(5)---记忆分类
C#+VisionMaster 学习笔记(目录)-目录
Flink学习笔记:状态后端
AI运动识别插件-APP版新版特性速览
.Net-Avalonia学习笔记(目录)
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
FFmpeg开发笔记(九十四)基于Kotlin的国产开源推拉流框架anyRTC
1
677
晾棋砷
2025-12-14
业界
LaTeX学习笔记:学术文档排版
0
250
叟澡帅
2025-12-14
安全
docker学习笔记
0
697
咒卖箴
2025-12-14
安全
docker学习笔记
1
777
汪玉珂
2025-12-14
安全
复健笔记 - Pascal酒吧的爆破
0
370
凤患更
2025-12-15
业界
【Agent】MemOS 源码笔记---(5)---记忆分类
0
96
能杜孱
2025-12-15
业界
C#+VisionMaster 学习笔记(目录)-目录
0
516
寂傧
2025-12-15
业界
Flink学习笔记:状态后端
0
893
嫁蝇
2025-12-16
安全
AI运动识别插件-APP版新版特性速览
0
245
甄婉丽
2025-12-16
业界
.Net-Avalonia学习笔记(目录)
0
183
恙髡
2025-12-16
回复
(1)
时思美
2025-11-1 01:38:43
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
yyds。多谢分享
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
业界
科技
安全
签约作者
程序园优秀签约作者
发帖
巨到
2025-11-1 01:38:43
关注
0
粉丝关注
18
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994893
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9998
6
宋子
9983
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
849
当你不再迷信“最强模型”,系统设计才刚刚
872
软件i2c
298
2025年专业起名老师联系方式汇总:全国资深
650
解码IP协议号:网络世界的“货物运单”
712
Python Selenium 漫步指南:从入门到精通
643
AI 付费模式终极对比:ChatGPT、Gemini、Cl
837
JSAPIThree 加载 3D Tiles 学习笔记:大规
357
LLM 工具调用的范式演进与认知模型集成
354
Requirements Engineering with AI for Con
342
【节点】[Adjustment-WhiteBalance节点]原
303
上海专业建筑维修服务解析:标准化流程如何
946
【分析式AI】-带你弄懂XGBoost模型
731
【分析式AI】-带你弄懂XGBoost模型
53
【分析式AI】-带你弄懂XGBoost模型
274
C语言之统计天数
240
如何使用DashVector的多向量检索
272
【分析式AI】-朴素贝叶斯算法模型
218
【分析式AI】-朴素贝叶斯算法模型
936
【睿擎派】EtherCAT总线之IO模块读写
590
python3.13 3.14 新特性 好好好