音视频技术入门课- 05 使用FFmpeg与OBS进行直播推流

做直播推流的前提是要有直播服务器接收直播流,所以需要我们自己建设一个流媒体服务器。

流媒体服务器SRS

SRS是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181。官方文档链接:https://ossrs.net/lts/zh-cn/docs/v4/doc/introduction

这里,我用腾讯云服务器来搭建SRS流媒体服务器。先开通防火墙端口。不懂怎么操作的,查看腾讯云官方文档

https://cloud.tencent.com/document/product/213/39740

音视频技术入门课- 05 使用FFmpeg与OBS进行直播推流

SRS的安装方式有多种,在这里,我用编译安装方式,

git clone -b develop https://gitee.com/ossrs/srs.git &&
cd srs/trunk && ./configure && make && ./objs/srs -c conf/srs.conf

运行效果:

音视频技术入门课- 05 使用FFmpeg与OBS进行直播推流

打开本机http://IP:8080 确认推流地址

音视频技术入门课- 05 使用FFmpeg与OBS进行直播推流

FFmpeg 推流

通常,推流服务器的管理界面会提供一个收流的 RTMP 服务器地址,还会提供一个直播流的流名称,也叫串流密钥。例如推流的 RTMP 服务器地址是 rtmp://publish.x.com/live,串流密钥是 stream,那么最后组成的推流地址就是 rtmp://publish.x.com/live/stream。

如果使用 FFmpeg 推 RTMP 流的话,我们需要使用的输出格式为 FLV,那么 FFmpeg 的输入就是 -f flv rtmp://publish.x.com/live/stream

ffmpeg -re -f lavfi -i testsrc=s=1280x720:r=25 -pix_fmt yuv420p -vcodec libx264 -f flv rtmp://publish.x.com/live/stream

FFmpeg 分两大部分,一部分是输入部分,也就是 -i 与 -i 的参数以及它之前的部分,另一部分就是 -i 与 -i 参数后面的部分,为输出部分。仔细划分一下,这条命令行的输入部分是 -re -f lavfi -i testsrc=s=1280×720:r=25,输出部分是 -pix_fmt yuv420p -vcodec libx264 -f flv rtmp://publish.x.com/live/stream。

音视频技术入门课- 05 使用FFmpeg与OBS进行直播推流

使用VLC播放器,播放rtmp流地址

音视频技术入门课- 05 使用FFmpeg与OBS进行直播推流

从下图中可以看到直播已经开始了,testsrc 的画面已经出来了:

音视频技术入门课- 05 使用FFmpeg与OBS进行直播推流

命令行参数

输入部分 -re -f lavfi -i testsrc=s=1280x720:r=25的意思是使用 FFmpeg 的 lavfi 输入格式,也可以说输入的是 lavfi 设备。输入内容是 testsrc,这个 testsrc 是输入 lavfi 格式的内容,lavfi 的格式有很多内容,这些内容不是既有的内容,也不是某个文件,而是 FFmpeg 通过 filter 自己创建出来的。除了 testsrc,还可以创建 testsrc2、color、yuvall 等图像内容(更多可创建的内容你可以查看FFmpeg 官方文档)。输入的图像是 25fps,也就是每秒钟会得到 25 帧图像,图像的宽是 1280 像素,高是 720 像素。

re参数是控制获得图像频率的参数,用来控制输入包的读取速度,比如我们规定一秒钟输入 25 帧,它会把速度控制在 25 帧。因为在 FFmpeg 中数据是以最快的速度读完的,一般在高配的机器上读取速度会非常快。我们用 FFmpeg 自主生成的数据来模拟直播,就需要用 -re 来控制一下速度。但如果我们是读取摄像头还有 RTSP 等直播协议输入的数据,就可以不控制,因为对方输出也是控制频率的。

输出部分 -pix_fmt yuv420p -vcodec libx264 -f flv的意思是先把读取的图像像素点的颜色格式转成 yuv420p 格式。yuv420p 在视频图像格式中是兼容性最好的,使用起来会比较稳定。

接下来编码器部分使用的视频编码器为 libx264。libx264 是一个第三方编码器,这里我们需要注意的是 libx264 的 FFmpeg 需要使用自由软件基金会的通用公共协议的 License,也就是常说的 GPL 协议。作为开源软件发行版使用问题不大,如果商用的话可能需要考虑法律风险。

-f flv 规定我们输出的封装格式为 FLV,用 -f 指定封装格式以后,输出文件的文件名其实也不会有作用,因为 FFmpeg 会强制输出 -f 指定的输出格式。最后输出的文件是一个 RTMP 协议特征字符开头的 URL,所以最终会将 FLV 格式的内容输出到 FFmpeg RTMP 协议内容中。

FFmpeg 参数并不多,尤其是我们常用的能力部分,模块化做得很好,不同的编码器都有自己的参数可以配置,如果我们集中精力只关注我们自己使用的模块部分,参数并不多也很容易记住。

有些人可能想要采集自己的摄像头、桌面等外设,这些通过 FFmpeg 的 -devices 参数可以得到相关的设备信息。通过FFmpeg 的设备相关的操作文档指引信息,我们也可以自己用 FFmpeg 获得摄像头、桌面等外设图像,通过编码推流到直播服务器上。

带界面的推流神器 OBS

OBS 是个桌面应用程序,首先我们需要从 OBS 官方网站下载 OBS 并安装上,安装后打开的界面比较直观。

添加一个本地视频作为直播源头

音视频技术入门课- 05 使用FFmpeg与OBS进行直播推流

设置下推流相关的配置内容

音视频技术入门课- 05 使用FFmpeg与OBS进行直播推流

推流成功

音视频技术入门课- 05 使用FFmpeg与OBS进行直播推流

使用VLC播放直播

音视频技术入门课- 05 使用FFmpeg与OBS进行直播推流

更多 OBS 的高级功能和黑科技,还是需要我们自己耐心地去一点点挖掘。

Original: https://www.cnblogs.com/xyjk1002-rejuvenation/p/16671635.html
Author: miyan
Title: 音视频技术入门课- 05 使用FFmpeg与OBS进行直播推流

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581739/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 提升git clone速度

    查看github.global.ssl.fastly.Net的ip地址 nslookup github.global.ssl.fastly.Net Original: https:…

    Linux 2023年6月7日
    0107
  • 正则表达式 9. 替换分组使用

    https://www.zybuluo.com/Zjmainstay/note/709093 替换分组使用 (9.1)给源串每个链接加上http://www.zjmainstay….

    Linux 2023年6月13日
    089
  • 6.18(反射和注解—>反射机制的作用)

    反射 获取Class对象三种方式第一种方式:类.class第二种方式:对象.getClass()第三种方式:Class.forName 在&#x4E0…

    Linux 2023年6月7日
    0107
  • 【深度学习】ml_collections报错

    在一些源码中,看见了一个导入: import ml_collections 此时会报错,这个包并不是PyTorch的包,同时也非源码中模块 解决办法: pip install ml…

    Linux 2023年6月13日
    072
  • .Net MVC实现角色-API权限验证的一种方式

    阅文时长 | 1.15分钟字数统计 | 1844.8字符主要内容 | 1、引言&背景 2、部分设计分享 3、声明与参考资料『.Net MVC实现角色-API权限验证的一种方…

    Linux 2023年6月13日
    088
  • Redis内存满了怎么办

    Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小。 1、通过配置文件配置 通过在Red…

    Linux 2023年5月28日
    064
  • RPA SAP财务内部对账机器人

    bash;gutter:true;【简介】本机器人用于使用SAP软件的集团公司间往来对账前台登录SAP账户和密码,需退出PC微信,输入法切换为英文半角状态。【详细流程】1、清空Ex…

    Linux 2023年6月7日
    0107
  • Git报错 error: cannot spawn more: No such file or directory

    问题原因 error: cannot spawn more: No such file or directory 这个错误意思是不存在more指令,我是windows平台,自然这个…

    Linux 2023年6月6日
    090
  • Linux IP 命令略解

    help 为该命令的帮助信息。 实例ip link show # 显示网络接口信息 ip link set eth0 up # 开启网卡 ip link set eth0 down…

    Linux 2023年5月27日
    0138
  • 总结

    门诊:11张 张张是主表,主表之王是患者信息住院:12张 张张由入院登记开始,外挂处方点评一张电子病历:12张 病历概要打头来,紧接门(急)病历,急诊留观放尾中,住院病历放最后检验…

    Linux 2023年6月13日
    095
  • redis数据结构附录

    引言 本次对上一次的数据结构知识进行补充,主要有redis数据结构的相关应用场景和内存相关知识 引用计数-内存 redis中的对象回收机制是采用引用计数的方式,首先我们可以通过re…

    Linux 2023年6月13日
    090
  • 超好用的UnixLinux 命令技巧 大神为你详细解读

    1、删除一个大文件 我在生产服务器上有一个很大的200GB的日志文件需要删除。我的rm和ls命令已经崩溃,我担心这是由于巨大的磁盘IO造成的,要删除这个大文件,输入: > /…

    Linux 2023年6月14日
    088
  • Jmeter 使用Json提取请求数据

    使用Json提取器可以提取请求响应数据 Json提取器 位置: 后置处理器-》Json提取器 使用介绍 1,变量名 变量名,其他部分引用方式: ${变量名}若提取多个变量,多个之间…

    Linux 2023年6月8日
    079
  • Linux ARMv7架构通用中断流程(1)【转】

    一、ARMv7 Cortex-A系列处理器寄存器组介绍及其功能介绍 1. ARMv7 Cortex-A处理器一般共有37寄存器,其中包括: (1) 31个通用寄存器,包括PC(程序…

    Linux 2023年6月8日
    069
  • 写shell,运行出错:syntax error near unexpected token `$’dor”

    【解决过程】 1.网上搜了下,参考:linux shell脚本报错:syntax error near unexpected token </a></p> …

    Linux 2023年5月28日
    083
  • 爬取与数据存储

    ch5. 数据存储 文件存储 JSON文件存储 关系型数据库存储 Mysql 1. JSON文件存储 1. JSON中的对象和数组 *对象 ​ 格式为 {key1:value1, …

    Linux 2023年6月7日
    065
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球