音视频技术入门课- 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)

大家都在看

  • 关于飞书事件订阅功能的应用

    此项目源码我也是站在巨人的肩膀上进行一个二次应用,感谢这位大神的共享 附上源码链接–Feishu-Event-Subscribe: 【实验】飞书的事件订阅 主要是通讯录…

    Linux 2023年6月14日
    086
  • python reportlab 生成table学习笔记

    利用python report生成table表格,需要定义表格的数据,表格的样式,最后利用doc.build方法生成文件。 在reportlab中文手册中描述table方法: Ta…

    Linux 2023年6月14日
    091
  • 使用VScode创建第一个vue项目

    初识vue,小小白一枚 软件,插件安装,略… 插件:vetur(支持vue代码高亮)、ESLint(js语法纠错)、Auto Close Tag(自动闭合标签)、Aut…

    Linux 2023年6月7日
    099
  • 2012年脱离程序员队伍,时隔9年,居然一次性把“冒泡排序”算法写对了

    2012年脱离程序员队伍,时隔9年,居然一次性把”冒泡排序”算法写对了 2021年2月7日 立贴纪念 #include int bubble_sort(in…

    Linux 2023年6月13日
    072
  • 同城双活-流量分流

    引言 现阶段,在同城带宽时延问题没有经过大规模的生产实践、验证的情况下,我们只导入”白名单或1%”的小比例请求流量,进入双活环境,确保环境有效的(活的),同…

    Linux 2023年6月14日
    099
  • Linux 目录挂载服务

    Linux 服务器挂载文件目录通常有三种形式,手动挂载、自动挂载、Autofs 自动挂载,下面对这三个挂载做一下介绍,接受一下这三个区别以及使用场景: 准备服务器和客户端: ser…

    Linux 2023年6月6日
    096
  • Spring中如何使用自定义注解搭配@Import引入内外部配置并完成某一功能的启用

    有些网站第一时间爬取了我的原创文章,并且没有注明出处,不得已在这里加上说明。 文章背景 有一个封装 RocketMq 的 client 的需求,用来提供给各项目收、发消息,但是项目…

    Linux 2023年6月6日
    0114
  • 007 Linux 命令三剑客之-awk

    Linux 命令三剑客,sed、grep、awk。 sed:擅长数据修改。 grep:擅长数据查找定位。 awk:擅长数据切片,数据格式化,功能最复杂。 awk 更适合格式化文本,…

    Linux 2023年5月27日
    089
  • Redis入门讲解(介绍、安装、常用命令)

    Redis入门讲解(介绍、安装、常用命令) Redis是非关系型数据库 关系型数据库 关系型数据库是采用了关系模型来组织数据的数据库,以行和列的形式存储数据,由二维表及其之间的关系…

    Linux 2023年6月6日
    0106
  • 基于LNMP快速简单搭建wordpress平台

    一、WordPress 简介 WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把WordPress当…

    Linux 2023年6月7日
    0103
  • [20210930]bbed读取数据块7 fffext.sh.txt

    [20210930]bbed读取数据块7 fffext.sh.txt –//一般bash shell脚本很少考虑执行效率,仅仅考虑利用它快速解决工作中遇到的问题. &#…

    Linux 2023年6月13日
    084
  • Python实现经典算法八皇后问题

    递归回溯解八皇后问题 遗传算法解八皇后问题 在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问一共有多少种摆法。 分别用递…

    Linux 2023年6月7日
    0129
  • Linux基础学习(四)

    自建yum仓库,分别为网络源和本地源 1.本地源 点击查看代码 root@ct7:~# yum install autofs root@ct7:~# systemctl enabl…

    Linux 2023年6月8日
    0128
  • 领导:谁再用redis过期监听实现关闭订单,立马滚蛋!

    在电商、支付等领域,往往会有这样的场景,用户下单后放弃支付了,那这笔订单会在指定的时间段后进行关闭操作,细心的你一定发现了像某宝、某东都有这样的逻辑,而且时间很准确,误差在1s内;…

    Linux 2023年5月28日
    092
  • [Python]批量替换PPT字体脚本

    使用说明 脚本代码 配置文件 使用说明 将脚本放置在需要批量修改的PPT文件夹根目录 修改配置文件 conf.ini 中的字体 执行脚本文件 ​ exe文件 下载:https://…

    Linux 2023年6月13日
    0118
  • Redis 基础

    Redis 基础 Redis 定位 – 特性 关系型数据库 特性 非关系型数据库 特性 Redis 特性 Redis 安装 – 启动 – 使用 …

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