基于FFmpeg混流及录制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混流及录制rtmp直播流相关推荐
- java rtmp_搭建rtmp直播流服务之2:使用java实现ffmpeg命令接口化调用(用java执行ffmpeg命令)...
一.环境搭建 1.安装ffmpeg 下载对应系统的ffmpeg安装包,个人采用windows平台进行开发,所以安装了windows版本(各平台ffmpeg命令都是一样的,无须纠结) 2.ffmpeg的 ...
- 使用ffmpeg+nginx将rtmp直播流转为hls直播流
ffmpeg的安装和nginx的安装在之前的博客中有详细的讲解. mac搭建nginx+rtmp直播流 1.配置nginx (1)配置rtmp直播 rtmp {server {listen 1935 ...
- ffmpeg实现摄像头拉流_[FFmpeg] 如何通过实时摄像头帧图片生成 rtmp 直播流?
背景 已经完成用 Python 对摄像头硬件实时提取帧图像并进行一系列机械视觉处理 客户突然提出, 一定要通过 rtml:// 进行远程工作状态的监控 分析 因为硬件驱动的原因 系统中一个 usb c ...
- FFMPEG截图 RTMP直播流
ffmpeg -probesize 1 -i "rtmp://{ip}/live/1 live=1" -y -t 0.001 -ss 1 -f image2 -r 1 c:/rtm ...
- nginx流媒体服务器(基于CentOS7)实现rtmp直播流,m3u8视频流
最近在做流媒体相关项目,特以此作为笔记存留,通过nginx搭建流媒体服务器,实现rtmp直播流,m3u8视频流. 1.下载依赖包 # gcc 安装 yum install gcc-c++# pcre ...
- ffmpeg处理rtmp直播流(截图、收录)
首先应该感谢http://hi.baidu.com/newdreamllc/item/ee6beb0e2bbbcc8f02ce1ba6(天下文章一大抄),也不知道他是抄过来的还是自己写的,他给了我启发 ...
- ps流 转发_一种国标PS流转RTMP直播流的实时转换方法与流程
本发明属于视频技术领域,具体涉及一种国标ps流转rtmp直播流的实时转换方法. 背景技术: ps流全称是节目流(programstream),将一个节目的多个组成部分按照它们之间的互相关系进行组织并加 ...
- C++ RTMP直播流播放器
抛开flash,自己开发实现C++ RTMP直播流播放器 众所周知,RTMP是以flash为客户端播放器的直播协议,主要应用在B/S形式的场景中.本人研究并用C++开发实现了RTMP直播流协议的播放器 ...
- php 直播流,ngnix开发(五)将rtmp直播流转换成hls直播流
1:修改/usr/local/nginx/conf/ngnix.conf,红色字体为添加内容. #rtmp直播配置 server { listen 1936; chunk_size 4000; app ...
最新文章
- Ajax+SpringBoot+Thymeleaf使用中遇到的跳转页面问题
- xmind快速上手使用教程,提高工作效率
- linux stat函数讲解
- 0.5s c语言延时子程序集,用C语言实现精确的延时.doc
- 前端性能优化—将CSS文件放在顶部
- CentOS 6.6 安装pip
- 汇编语言之常见的汇编指令
- pip install mysqlclient 报错:error: Microsoft Visual C++ 14.0 is required.
- 韦东山Linux嵌入式学习——硬件复习
- 计算机科学梦想演讲稿,关于科技演讲稿讲话稿范文三篇
- python登录代码_python自动登录126等邮箱的代码
- 一篇文章从了解到入门shell
- 安徽身份证网上办理最全攻略
- 小学生期末评语经典大全
- pygame 精灵精灵组
- PAT 甲级 1040 Longest Symmetric String
- switch日版有中文吗_原神Switch日版可以玩吗
- raid5的配置(超详细)
- 嵌入式Linux C编程学习之路(八)——read/write,lseek函数,cp指令的代码实现
- git: cherry-pick
热门文章
- Selective Cross-City Transfer Learning for Traffic Prediction via Source City Region Re-Weighting笔记
- 持续推进绿色数据中心,绿色网格PUE评测查询系统发布
- Pygame小游戏:“长沙版”大富翁开局了,敢不敢约?(附多份游戏源码)
- Red Pitaya WiFI连接
- NLTK学习笔记(五):分类和标注词汇
- 详解区块链技术,如何运作
- 我爱记单词测试报告兼功能展示
- FPGA零基础学习:IIC协议驱动设计
- 什么是RMI,为什么要使用RMI框架?
- IDEA2019如何设置字体大小