当前位置: 首页 > news >正文

FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流

《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了,无法应用于真实直播的生产环境,真正能用于生产环境的流媒体服务器还要看SRS或者ZLMediaKit。
SRS是一款国产的开源实时视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等流媒体协议。SRS媒体服务器和FFmpeg、OBS、VLC、WebRTC等客户端配合使用,提供音视频流的接收和分发的能力,是一个典型的发布(推流)和订阅(播放)服务器模型。SRS支持互联网广泛应用的音视频协议转换,比如可以将RTMP或SRT,转成HLS或HTTP-FLV或WebRTC等协议。
通过结合FFmpeg与SRS,可以很方便地测试音视频的推拉流。接下来以华为的欧拉系统为运行环境,介绍如何编译、安装、调试SRS,详细的操作步骤说明如下。

一、编译安装SRS

1、登录Linux服务器(比如华为云的欧拉系统),运行下列命令安装SRS的依赖包。

yum install git
yum install patch

2、执行下面命令从gitee下载SRS的源码。

cd /usr/local/src
git clone -b develop https://gitee.com/ossrs/srs.git

3、进入SRS的主干源码目录,运行下面命令配置SRS。

cd srs/trunk
./configure

4、运行下面命令编译SRS。

make

命令执行完毕,SRS的可执行程序srs就在srs/trunk/obj目录下生成。

二、编译安装FFmpeg

在Linux系统编译安装FFmpeg的详细步骤参见《FFmpeg开发实战:从零基础到短视频上线》一书的“1.2  Linux系统安装FFmpeg”,这里不再赘述。

三、启动SRS

1、进入SRS的主干配置目录,也就是执行下面命令:

cd /usr/local/src/srs/trunk/conf

2、打开配置文件srs.conf,在vhost __defaultVhost__里面补充以下一行配置:

    gop_cache   on;

以上配置表示开启缓存关键帧,一定要设置为on,否则客户端拉流找不到关键帧就无法渲染画面。
修改完毕,保存并退出srs.conf。
3、执行下面命令,启动SRS服务。

cd /usr/local/src/srs/trunk
./objs/srs -c conf/srs.conf

4、检查服务器是否开启了下列端口:
1935端口,用于rtmp协议,访问“rtmp://”开头的直播地址需要。
8080端口,用于http协议,访问“http://”开头的直播地址需要。

四、检查SRS的视频推拉流

1、执行以下命令,将本地视频通过RTMP协议推流给SRS。

ffmpeg -re -stream_loop -1 -i "/usr/local/src/test/2018s.mp4" -vcodec h264 -f flv rtmp://127.0.0.1/live/test

注意:SRS不支持RTSP推流,只支持RTMP推流。
2、打开VLC播放器,依次选择菜单“媒体”→“打开网络串流”,在网络URL框中输入下列任一地址,观看能否正常播放视频画面。

rtmp://124.***.***.***/live/test
http://124.***.***.***:8080/live/test.flv
http://124.***.***.***:8080/live/test.m3u8

注意需要把上述地址中的“124.***.***.***”替换为流媒体服务器实际的公网地址。 
更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

本系列的FFmpeg进阶文章目录为《FFmpeg开发笔记全目录(FFmpeg开发实战详解,含直播系统的搭建过程)》

相关文章:

  • 实验五、IPv4地址的子网划分,第1部分《计算机网络》
  • 在AWS上运行的EKS Elastic Kubernetes Service 创建集群Cluster,Node group, Nodes
  • php 混合xml js,html 代码报错 ,结束标签关闭, short_open_tag 的作用,php关闭文件结束判断
  • 操作系统真象还原:内存管理系统
  • 计算机毕业设计hadoop+spark+hive舆情分析系统 微博数据分析可视化大屏 微博情感分析 微博爬虫 微博大数据 微博推荐系统 微博预测系统
  • k8s 证书更新
  • 使用SourceTree切换不同的托管平台
  • [C][数据结构][树]详细讲解
  • 考研系列-数据结构第一章、绪论(基本术语、时间复杂度)
  • CSS Display(显示)
  • 计算机网络的组成
  • 计算机视觉与深度学习实战,Python为工具,基于计算机视觉的自动驾驶应用
  • 【数据结构与算法 经典例题】括号匹配问题
  • 代码随想录算法训练营第三十三天| 1005.K次取反后最大化的数组和,134. 加油站,135. 分发糖果
  • 串口通信实战:STM32与多种设备的连接方法
  • #Java异常处理
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • CSS3 变换
  • Druid 在有赞的实践
  • javascript 哈希表
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Linux CTF 逆向入门
  • MySQL用户中的%到底包不包括localhost?
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Python利用正则抓取网页内容保存到本地
  • python学习笔记 - ThreadLocal
  • Redis学习笔记 - pipline(流水线、管道)
  • Spring核心 Bean的高级装配
  • tab.js分享及浏览器兼容性问题汇总
  • vue学习系列(二)vue-cli
  • 安卓应用性能调试和优化经验分享
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 力扣(LeetCode)357
  • 聊聊flink的BlobWriter
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 移动端解决方案学习记录
  • 用Canvas画一棵二叉树
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 湖北分布式智能数据采集方法有哪些?
  • # 安徽锐锋科技IDMS系统简介
  • (javaweb)Http协议
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (篇九)MySQL常用内置函数
  • (五)关系数据库标准语言SQL
  • (转)【Hibernate总结系列】使用举例
  • (转载)OpenStack Hacker养成指南
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .Net 执行Linux下多行shell命令方法
  • .NET_WebForm_layui控件使用及与webform联合使用
  • .NetCore发布到IIS
  • .NET学习全景图