Python 实战 · 从 0 到 1 搭建直播视频平台
Barry
某上市公司技术研发总监
3717 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
Python 实战 · 从 0 到 1 搭建直播视频平台
15
15
1.0x
00:00/00:00
登录|注册

36|推拉流、串流码与控制器:实现录制与停止直播流

你好,我是 Barry。
上节课,我们通过 Nginx-rtmp-module 搭建流媒体服务器,还通过 RTMP 协议实现了 HLS 协议直播的相关配置。
这节课,我们就来学习如何实现直播的推拉流。推流和拉流的主要作用是实现直播音视频数据的传输,这是直播中最核心的操作。之后,我还会带你利用 record 命令实现直播录制功能,让我们的直播系统更加强大。

推流

我们先从推流开始学习。在直播系统中,推流是指将音视频数据由主播端发送到流媒体服务器端,供用户端接收、观看。
直播过程中,主播端会使用编码器编码音视频数据,然后通过 RTMP 协议将编码后的数据推送到服务器端。服务器端接收到数据后,可以对数据进行存储、转码、分发等处理,然后提供给用户端接收观看。
接下来我们一起梳理一下推流的过程,推流的实现步骤分为三步。
第一步,我们需要在 Nginx-rtmp-module 中配置推流地址,即指定服务端将音视频数据推送到哪个服务器地址。我们可以在 Nginx 的配置文件中设置推流地址,在上节课我们已经完成了配置,配置代码如下所示。
rtmp {
server {
listen 1935;
#应用程序块
application live {
live on; #开启直播
hls on; #开启hls直播
hls_path /usr/share/nginx/m3u8_files; #配置指定了m3u8文件存储位置
}
}
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了如何利用Nginx-rtmp-module实现直播推拉流以及录制功能。通过配置推流地址、使用编码器对音视频数据进行编码,并通过RTMP协议推送到服务器地址,读者可以了解推流的实现步骤。同时,文章还介绍了拉流测试工具VLC的使用方法,以及其他可用于拉流测试的工具。此外,文章还详细介绍了record命令的作用和应用场景,以及在项目中配置并使用record命令的步骤。通过实际操作和配置,读者可以深入了解直播推拉流的实现过程,以及如何利用record命令实现直播录制功能。整体而言,本文为读者提供了全面的技术指导,帮助他们快速掌握直播推拉流的实现方法和录制功能的应用。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Python 实战 · 从 0 到 1 搭建直播视频平台》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • peter
    请教老师几个问题: Q1:“使用编码器解码”中的“解码”是笔误吗? 文章开始的“推流”部分有一段话“直播过程中,主播端会使用编码器解码音视频数据”,其中的“解码”应该是“编码”吧。 Q2:服务端要“转码”,根据什么判断需要转码?要转成什么? Q3:推流的第三步中,“将主播端封装好的RTMP消息”,从这句话看,假设主播用手机,则主播的音视频数据在手机上已经封装为RTMP消息了;但是,推流的第二步,“服务端将XXX数据封装为RTMP消息”,从这句话看,是在服务端才将数据封装为RTMP消息。不矛盾吗? 进一步地,假设主播通过手机发送数据,发送出来的是RTMP数据吗?主播手机 –》Nginx---》后端服务器, 这三个节点的数据分别是什么样? Q4:推流命令”ffmpeg –I …”这个命令是在哪里执行的?手机上执行?Nginx上执行?还是后端服务器上执行? Q5:NRM中配置的服务端地址为什么不包含IP地址? 现在的配置是 hls /usr/…., 没什么没有IP? 服务器难道不需要一个IP地址吗?

    作者回复: Q1、是编码,笔误了,感谢同学提醒,在推流过程中,主播端会使用编码器对音视频数据进行编码,将其转化为可用于网络传输的格式,之后再刷新一下就好了。 Q2: 服务端需要转码通常是因为主播端发送过来的音视频数据格式可能与服务器端支持的格式不同,或者需要将音视频数据进行压缩以降低传输带宽占用。具体需要转码成什么格式,取决于服务器端所支持的格式以及应用场景的需求。 Q3: 在推流的过程中,主播端会将音视频数据进行封装,并将其发送到Nginx服务器。在Nginx服务器上,使用ffmpeg等工具将数据进一步封装为RTMP消息,并发送到后端服务器。因此,可以说在主播端已经封装好了音视频数据,而在服务端是将这些数据封装为RTMP消息。 主播通过手机发送的数据不是RTMP数据,而是手机设备生成的音视频数据。在推流过程中,主播端的音视频数据会被封装为RTMP消息,并发送到Nginx服务器。在Nginx服务器上,ffmpeg会将RTMP消息进一步封装为HLS或其他流媒体协议的消息,并发送到后端服务器。 Q4: 推流命令“ffmpeg –I …”通常是在Nginx服务器上执行的。在推流过程中,Nginx服务器上的ffmpeg会读取主播端发送过来的音视频数据,并将其封装为RTMP消息。 Q5: NRM中的服务端地址不包含IP地址是因为在配置中使用了域名而非IP地址。在互联网中,使用域名而非IP地址可以更好地保护服务器的隐私和安全性,同时也可以更好地应对服务器的IP地址变化和负载均衡的需求。因此,在NRM中配置服务端地址时,通常会使用域名而非IP地址。

    2023-07-16归属地:重庆
  • Geek_c08ce7
    请问老师这个项目完整的代码在哪里啊

    作者回复: https://gitee.com/Barry_Python_web/projects这是git地址,有代码的课都会上传,完整代码在课程完成之后会全部上传,及时关注git,也会在专栏中说明。

    2023-07-16
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部