首页 > 其他分享 >FFmpeg混流及录制rtmp直播流

FFmpeg混流及录制rtmp直播流

时间:2023-06-26 17:00:54浏览次数:34  
标签:FFmpeg 混流 overlay 音视频 180 rtmp 计算资源 服务端

1、什么是混流?


混流就是把多路音视频流合成单流。准确的说,混流应该叫做混音(音频流)混画面(视频流)


混流的过程包括解码、混流、编码和推流四个部分。混流这个环节包括做抖动缓冲,目的是把多路流进行画面对齐和音画同步,同时通过缓冲对抗网络抖动,以便混合成一路流以后能够达到良好的效果。


在混流的过程中,难点是如何对抗网络抖动等不确定因素。


2、不混流的优势和劣势


不混流的优势


延迟低:不用混流,节省了混流消耗的时间,显著地降低了延迟


成本低: 如果是在服务端进行混流,将会耗费计算资源。考虑到服务端计算资源比较昂贵,如果不用混流,将会节省宝贵的计算资源,显著地降低成本。虽然拉多流比起拉单流会消耗更多的带宽成本,但是拉多流节省计算资源成本,整体而言,成本是降低了。


灵活性:在观众端,业务侧可以比较灵活的操控多路流,来满足多样化的业务需求。比如画中画大小画面相互切换,和对半分屏画面左右调换等效果,来提高观众端的用户体验。


不混流的劣势


拉多流会消耗更多的带宽。多路流被从服务端推到CDN, 然后观众端从CDN拉多流,都会耗费比较多的带宽成本。对于带宽成本占了运营成本显著,的确是需要慎重考量的。


混流的优势


成本:可以分为计算资源成本和带宽成本。由于预先做混流,因此计算资源成本会上去,但是由于只拉单流,因此带宽成本会下来。


可录制:如果业务上有录制音视频流的需求,以备监管抽查或者观众回放的话,那么需要进行混流。如果不进行混流的话,录制的时候只能录制到其中一个路音视频流,也就是只能看到其中一个主播的画面。要录制全画面的话,必须要进行混流。


易传播:如果业务上有通过音视频流地址链接(HLS)进行转发传播的需求,那么也需要进行混流,因为地址链接只会指向一路音视频流。如果不混流,使用转发的地址链接就只会播放出一个主播的音视频流。


混流的劣势


高延迟:由于在做混流的过程中,需要做抖动缓冲和实时转码等计算处理,将会耗费时间,从而造成额外的延迟。


不灵活:由于观众端拉单流观看,多路音视频流已经被混合成单流,所以观众端无法再灵活地对多流进行操控,比如切换画中画的主次画面。


服务器计算成本高:由于混流需要额外的计算资源,这里会导致额外的运营成本。


3、连麦互动的直播方案



4、推流端混流的方案



推流混流劣势

服务端计算成本低

服务端压力小

劣势

增加额外的延迟

手机硬件配置的瓶颈

上行网络带宽瓶颈

推流端环境不可控

难以扩展

5、服务端混流的方案


服务端混流的优势

低延迟

计算资源可控

网络带宽资源可控

可控可扩展

服务端混流的劣势

- 服务器计算成本高

- 服务端压力大

6、混流工具介绍


FFmpeg


Ffmpeg框架的基本组成包含AVFormat、AVCodec、AVFilter、AVDevice、AVUtil等模块库


AVFormat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;音视频的格式解析协议


ACCodec:用于各种类型声音/图像编解码;该库是音视频编解码核心,实现了市面上可见的绝大部分解码器的功能,libavcodec 库被其他各大解码器ffdshow,Mplayer 等所包含或应用。


AVFilter:音视频滤波器的开发,如宽高比裁剪格式化非格式化伸缩


混流的逻辑



混流命令

./ffmpeg -i “背景图” -i “rtmp://输入流1” -i “rtmp://输入流2” -filter_complex “nullsrc=size=1600x720 [base];[0:v] scale=1600x720 [main]; [1:v] crop=320:180:0:0 [photo1];[2:v] crop=320:180:0:0 [photo2];[base][main] overlay=x=0:y=0 [temp];[temp][photo1] overlay=x=1280:y=0 [temp1];[temp1][photo2] overlay=x=1280:y=180 [temp2]” -c:v libx264 -r 50 -bufsize 10M -f flv “rtmp://推流地址”
- -i:输入文件
- -filter_complex :滤镜
- nullsrc=size=1600x720 [base]:设置基础背景大小,并取别名base
- [0:v] scale=1600x720 [main]:设置第一个输入文件的大小,及背景图大小为1600*720,并取别名main
 - [1:v] crop=320:180:0:0 [photo1]:裁剪第二个文件大小,设置为320*180,并取别名photo1
- [2:v] crop=320:180:0:0 [photo2]:如上
- [base][main] overlay=x=0:y=0 [temp]:指定main在base的坐标,overlay距离左上角的坐标,并取别名temp
- [temp][photo1] overlay=x=1280:y=0 [temp1];[temp1][photo2] overlay=x=1280:y=180  :如上
- -r 帧率
- -bufsize 码率控制缓冲区大小
- -f flv 强迫采用格式flv
./ffmpeg -i rtmp://混流地址 test.mp4

标签:FFmpeg,混流,overlay,音视频,180,rtmp,计算资源,服务端
From: https://blog.51cto.com/u_16159766/6555979

相关文章

  • ffmpeg开发程序的实例代码
    以下是一个使用ffmpeg库解码视频文件并输出每个帧的示例代码:```c++includeincludeincludeifdef__cplusplusextern"C"{endifinclude<libavcodec/avcodec.h>include<libavformat/avformat.h>include<libswscale/swscale.h>ifdef__cplusplus}endifusingn......
  • 用Python脚本实现FFmpeg批量转换
    最近需要用FFmpeg从视频文件中提取出音频信息,但是因为文件太多,所以查各种资料写了个Python脚本,实现批量的从视频中提取音频。当然了,脚本框架是通用的,可以通过替换FFmpeg命令实现各种其它操作。一、批量处理Python脚本importosforroot,dirs,filesinos.walk(r"E:\tmp"):......
  • 【FFMPEG】用到的命令和注意事项
    编译安装选项:./configure--extra-cflags="-fPIC"--enable-nonfree--enable-pic--enable-shared (注意顺序,一般把-i写到最后是不会错的) 1 把raw文件转化为图片,注意raw文件的后缀要正确:ffmpeg-s4982*1080-pix_fmtrgba-iout.rawout.png 2把h264......
  • 【FFMPEG】开发和使用
     一、概念 1.GOP(GroupofPictures),下面的链接是对其的一些讨论,核心意思就是这个值制定了最近的两个I帧的间隔:http://www.itnotepad.cn/Home/Article/num/189.htmlhttps://stackoverflow.com/questions/24010875/how-to-calculate-gop-size-of-a-file-h264https:......
  • 【FFMPEG】硬编解码
    对于硬件的编解码加速器,不同平台和系统有不同的实现,下面的表格是一个大概的描述:  开启硬件编解码的编译选项(也开启了x264不是必须): sudo./configure--enable-cuda--enable-cuvid--enable-nvenc--enable-nonfree--enable-libnpp--extra-cflags=-I/usr/local/cuda/......
  • Ubuntu22.04安装FFmpeg
    参考文章https://phoenixnap.com/kb/install-ffmpeg-ubuntu依次输入以下三个命令即可sudoaptupdate&&sudoaptupgradesudoaptinstallffmpegffmpeg-version 安装好以后可以通过以下命令验证一下:ffplay 视频文件 看能否正常播放  参考文章复制粘贴如下:I......
  • EasyCVR平台如何推送RTMP流实现上级平台级联?
    EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。有用户反馈,现场的设备是运动相机,不支持国标和其他协议接入......
  • 音视频网络传输协议,RTSP/RTMP/SRT/NDI协议之间特点
    网络视频传输协议有哪些,RTSP/RTMP/SRT/RTP之间特点下面详细介绍:有兴趣的小伙伴可加qq群一起交流384170753RTP协议(Real-timeTransportProtocol)是一个网络传输协议,是一种实时传输协议技术,RTP协议常用于流媒体系统(配合RTSP协议)视频会议和一键通(PushtoTalk)系统(配合H.323或SIP),使它成为IP......
  • FFMPEG 的跨平台视频播放器
    使用ffmpegapi进行视频解码的步骤概括来说,视频解码的步骤包括:创建解码器解封装,从视频流中读取一个packet将packet送给解码器,解码器进行解码从解码器中,取回解码后的数据创建解码器在ffmpeg中与解码器相关的结构体有两个:AVCodec和AVCodecContext。AVCodec结构体......
  • FFmpeg服务器适配问题
    用org.bytedeco  javacv/ ffmpeg-platform  /javacpp 实现的ffmpeg视频抽帧截取图片在cenos正常但是在arm64服务器有适配的问题。解决方案换另外的实现: <groupId>ws.schild</groupId>      <artifactId>jave-all-deps</artifactId>      ......