1.CentOS7下使用SRS搭建流媒体服务器
2.FFmpeg学习(一)开篇
3.FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
4.FFmpeg/WebRTC/RTMP音视频流媒体技术
5.海康大华等摄像头RTSP低延迟(小于500毫秒)网页播放完全解决方案!
CentOS7下使用SRS搭建流媒体服务器
本地服务器配置:使用 CentOS7 Linux 系统(版本:3..0-..1.el7.x_),IP 地址为 ...。将服务器角色定位为使用 SRS(Simple Realtime Server)搭建流媒体服务器。SRS 支持 RTMP、HTTP-FLV、分时资金进出源码HLS、WebRTC 协议。推流端设备采用 ffmpeg + OBS 软件进行流媒体推送,拉流端则可以使用 VLC 播放器或在网页中嵌入 SRS 自带的播放器。测试场景设计为通过 ffmpeg 测试 RTMP 推流功能,然后分别使用 VLC 和 SRS 播放器进行流媒体拉取。
所需资料与工具:
链接:pan.baidu.com/s/1x5DyST...(提取码:epxx)
参考网站与资源:
GitHub:ossrs/srs(SRS 源码)
SRS 官网:ossrs.net/(SRS 官方网站)
GitHub Wiki:ossrs/srs/wi...(SRS 起步知识与文档)
SRS:如何用 NGINX 搭建 HLS 分发集群(链接:qq.com)(关于使用 NGINX 与 SRS 集成搭建 HLS 分发集群的教程)
下载 ffmpeg 官方地址:ffmpeg.org/download.htm...(官方 ffmpeg 下载页面)
1、准备工作与环境搭建(使用 root 用户执行):
1.1、安装 CentOS 基础依赖环境
1.2、关闭与禁用防火墙(避免重启服务器后自动开启)
1.3、将 ffmpeg、yasm 和 kk.flv 等文件拷贝至 CentOS 主目录下(使用主目录作为存储位置)
1.4、安装 yasm 编译器
1.5、安装 ffmpeg
1.6、修改 /etc/ld.so.conf 文件
1.7、配置环境变量
1.8、检查环境变量配置是否生效
1.9、Windows 下安装 VLC 和 OBS 播放器
2、SRS 流媒体服务搭建:
2.1、获取 SRS 源码:
- 通过官网下载
- 通过 GitHub 使用**软件下载(推荐)
- 在国内码云使用 gitee.com/ossrs/srs 下载(推荐)
2.2、配置与编译 SRS:
2.3、查看 SRS 配置文件与支持的协议配置(参考 SRS 官方 Wiki)
2.4、启动与关闭 SRS 服务
2.5、通过网页控制台查看 SRS 状态
3、流媒体服务测试:
3.1、使用 ffmpeg 进行 RTMP 推流测试(注意替换实际值)
3.2、RTMP、HTTP-FLV、HLS 拉流地址获取与测试(VLC 或网页 SRS 播放器)
3.3、使用 OBS 播放器进行推流测试(文件推流、摄像头推流与更多推流方式)
4、扩展与学习资源:
4.1、Windows 下搭建 nginx-rtmp 流媒体服务器(参考教程)
4.2、风险评估 系统源码深入学习 SRS 相关知识与技巧(访问 GitHub Wiki 或 SRS 官方网站)
FFmpeg学习(一)开篇
为什么要学习FFmpeg?本人希望深入研究音视频领域,音视频领域内容丰富,我计划从多个方面逐步学习:FFmpeg常用功能实践、FFmpeg源码研究、OpenGL、OpenGLES、Metal、AR、WebRTC、直播架构等。
当前音视频有哪些应用场景?从众多应用场景可以看出,音视频技术至关重要,尤其在5G时代,网络传输问题得到极大提升,音视频需求将爆发式增长。以下是一个简单播放器架构图:
音频解码和视频解码一般使用FFmpeg解码,iOS8之后提供了VideoToolBox框架支持硬解码。视频渲染通常使用OpenGL直接利用GPU渲染,还有GPUImage、SDL、VLC等第三方框架。
音视频播放中的音视频同步是一项复杂的技术。学习一项技术需要高效的方法,只有不断实践才能深刻理解。学习FFmpeg也需要好的文档,以下列举一些必备的学习文档地址:
以上都是英文文档,如果英文学习困难,可以参考以下中文资料:
此外,推荐两本非常好的书籍:
相关学习资料推荐,点击下方链接免费报名,先码住不迷路~
1. FFmpeg简介:FFmpeg是一套用于记录、转换数字音频、视频并将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,淘宝客bho源码libavcodec里很多code都是从头开发的。FFmpeg在Linux平台下开发,但也可以在其他操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,年至年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。
2. FFmpeg能做什么
3. FFmpeg架构模块组成:我们先看一张FFmpeg的架构图:
下载好的源码,我们也可以看到大致的源码结构:
3.1 libavutil
3.2 libavformat
FFmpeg是否支持某种媒体封装格式,取决于编译时是否包含了该格式的封装库。根据实际需求,可进行媒体封装格式的扩展,增加自己定制的封装格式,即在AVFormat中增加自己的封装处理模块。
3.3 libavcodec
AVCodec中实现了目前多媒体绝大多数的编解码格式,既支持编码,也支持解码。AVCodec除了支持MPEG4、AAC、MJPEG等自带的媒体编解码格式之外,还支持第三方的编解码器,如H.(AVC)编码,需要使用x编码器;H.(HEVC)编码,需要使用x编码器;MP3(mp3lame)编码,需要使用libmp3lame编码器。如果希望增加自己的编码格式或硬件编解码,则需要在AVCodec中增加相应的编解码模块。
3.4 libavfilter
3.5 libavdevice
3.6 libswscale
3.7 libpostproc
3.8 libswrressample
3.9 ffmpeg
3. ffsever
3. ffplay
4. FFmpeg安装:下载源码后,我们可以查看一下目录结构:
输入./configure --help命令查看配置信息
内容太多需要分页,输入./configure --help | more
从上面的帮助,我们可以尝试输入:./configure --list-decoders查看所有解码器
接下来我们可以尝试输入:./configure --list-encoders查看所有编码器
接下来我们可以尝试输入:./configure --list-filters查看所有滤镜器
接下来我们可以尝试输入:./configure --list-muxers查看FFmpeg的封装,封装Muxing是指将压缩后的编码封装到一个容器格式中,我们输入./configure --list-muxers来查看FFmpeg支持哪些容器格式:
从上面打印信息来看,FFmpeg支持生成裸流文件,五里牛源码如H.、AAC、PCM,也支持一些常见的格式,如MP3、MP4、FLV、M3U8、WEBM等。
从上面解封装又称为解复用格式的支持信息中可以看到,FFmpeg支持的demuxter非常多,包含image、MP3、FLV、MP4、MOV、AVI等。
从支持的协议列表中可以看到,FFmpeg支持的流媒体协议比较多,包括MMS、HTTP、HTTPS、HLS、RTMP、RTP,甚至支持TCP、UDP,它还支持使用file协议的本地文件操作和使用concat协议支持的多个文件串流操作。
接下来我们可以尝试输入:./configure --list-parsers查看FFmpeg支持的解析器
接下来我们可以尝试输入:./configure --list-bsfs查看FFmpeg支持的字节流过滤器
接下来我们可以尝试输入:./configure --list-indevs查看有效的输入设备
接下来我们可以尝试输入:./configure --list-outdevs查看有效的输出设备
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
在FFmpeg开发实践中,MediaMTX虽然在《FFmpeg开发实战》一书的第章有所提及,但其功能过于基础,不适合实际的直播生产环境。真正的生产级流媒体服务器,如SRS和ZLMediaKit,更为可靠。SRS作为一款国产开源的实时视频服务器,支持RTMP、WebRTC等多种协议,android动态圆弧源码是推流(发布)和播放(订阅)服务器模型的典型代表,能处理协议转换,如将RTMP转为HLS、WebRTC等。
要测试SRS与FFmpeg的音视频推拉流,首先在华为欧拉系统上进行编译安装。首先,确保Linux服务器上安装了必要的依赖,如git和patch,然后从gitee下载SRS源码并进行配置和编译。FFmpeg的编译安装步骤可以参考《FFmpeg开发实战》中的相关章节,这里不再详述。
启动SRS时,需要配置srs.conf文件,开启关键帧缓存,这对于画面渲染至关重要。随后,通过命令行启动SRS服务,并检查(RTMP)和(HTTP)端口是否开启。测试推流时,使用FFmpeg将本地视频推送到SRS,同时用VLC播放器通过RTMP或HTTP协议拉流验证视频是否正常播放。
总之,SRS与FFmpeg的集成是实现视频直播推流的重要步骤,通过上述操作,开发者可以充分了解和实践这一过程。更多关于FFmpeg的开发内容,可以参考《FFmpeg开发实战》这本书。
FFmpeg/WebRTC/RTMP音视频流媒体技术
深入探索FFmpeg、WebRTC和RTMP的音视频流媒体技术,本文将逐步为您解析各个领域的重要知识点与实战技巧。
首先,音视频基础知识不容忽视。对于FFMPEG环境搭建,无论是Windows还是Linux平台,我们都应熟练掌握。此外,深入理解音频与视频的基础,使用如Medialnfo与VLC播放器等常用工具,将使我们对音视频处理有更全面的认识。
接下来,FFMPEG命令是音频、视频处理的利器,涵盖视频录制、多媒体文件分解与复用、裁剪与合并、与视频互转、直播相关操作,以及各种滤镜应用。编程实战中,音视频渲染需借助SDL环境,包括事件处理、线程操作、YUV视频播放与PCM声音播放。FFmpeg API的框架、内存模型与常用结构体,构成了更深层次的音视频处理能力。音视频编码领域,AAC与H编解码原理、解码与编码流程深入解析,使我们掌握音视频编码的核心。封装格式如FLV、MP4与多媒体转封装格式实战,是音视频分发的关键。音视频过滤器实战则聚焦于音视频过滤器的使用,包括视频过滤器的详细说明。播放器开发实战涉及播放器框架分析、音视频解码、播放控制与同步,掌握ffmpeg播放器源码解析,如ffplay.c中的意义,将使我们全面掌握播放器开发。
流媒体技术的深入理解是音视频技术的关键。了解RTMP、HLS、HTTP-FLV等流媒体协议,wireshark抓包技术,FFmpeg在流媒体服务器中的应用,以及首屏秒开技术、负载均衡部署方式,将使我们能够构建高效、稳定的流媒体服务。
最后,WebRTC技术的发展与应用是音视频领域的一大亮点。从中级开发到高级开发,深入研究WebRTC通话原理,搭建开发环境,配置coturn服务器,采集音视频数据,理解一对一会话流程,设计信令服务器,实现Web与Android、iOS间的通话,掌握AppRTC,将使您成为WebRTC开发的专家。高级开发中,自定义摄像头分辨率、调整编码器顺序、实现多方通话、利用Janus框架构建会议系统,以及理解拥塞控制算法、FEC、jitter buffer等,将使您的WebRTC项目更具竞争力。
本文旨在为您提供FFmpeg、WebRTC与RTMP音视频流媒体技术的全面解析与实战指导,更多音视频相关信息,欢迎继续探索与实践。
海康大华等摄像头RTSP低延迟(小于毫秒)网页播放完全解决方案!
在浏览器中实现播放RTSP实时视频流,需要考虑多种方案以实现低延迟、低成本的多路稳定播放。首先,浏览器插件方案在IE及Chrome 以下版本的浏览器中是主流选择,使用ActiveX播放控件或NPAPI播放插件,可直接调用本地原生程序播放,充分利用硬件解码和硬件加速渲染,实现良好效果。VLC作为开源跨平台多媒体播放器,支持IE、Chrome及Firefox低版本浏览器插件,移动端兼容性也非常好。然而,此方案需要额外安装VLC客户端软件,并对某些场景不适用。
其次,先转码再转流方案需要架设视频流转码服务器,利用ffmpeg转码串流成RTMP,然后前端使用VideoJS播放Adobe Flash Player。然而,基于Chromium内核的浏览器自年起全面取消了对Flash Player的支持,VideoJS因此失效。当前方案使用flv.js实现,要求服务端先把RTSP视频流转换为flv,然后通过Web Socket或WebRTC推送到前端,前端再转换为Video所支持的MP4播放。这种方案导致RTSP视频流需要经过两次转码,画面延迟时间大幅增加,且长期使用服务器端转码和转流对CPU、内存、网络带宽压力大,成本高,播放高分辨率视频流时经常出现花屏、卡顿现象。此方案要求浏览器支持流媒体扩展特性(MSE),无法利用本机硬件加速实现解码和渲染播放,适用于移动端网页播放。
第三,先转流再转码方案通过Streamedian公司的免插件播放器Html5 RTSP Player实现。此方案需要架设Web Socket视频流转发服务器,前端连接到服务器后,服务端不断转发RTSP视频流给前端JS处理库,后端库再转换为Video所支持的MP4播放。此方案不支持IE浏览器,画面延迟高达数秒,首屏显示慢,无法利用本机硬件加速,CPU占用高,播放时存在花屏、卡顿现象,体验差。此方案要求浏览器支持流媒体扩展特性(MSE),适用于单源播放,多路播放时服务器压力大,且兼容性较差,不适合作为商业用途。
扩展程序方案,如基于Chrome浏览器的PPAPI插件技术的VXG RTSP Player,不适用于IE、Firefox等浏览器,且谷歌已宣布将在年6月终止对NaCl、PNaCl和PPAPI API的支持,无讨论价值。双内核方案,如采用Chrome扩展程序IETab实现,存在大规模自主可控部署难问题,IE内核环境下播放控件控制困难,IE兼容性差,用户体验差,维护升级麻烦。
最后,Wasm方案采用Chrome等高版本浏览器支持的Wasm标准技术,实现RTSP视频流通过ffmpeg的Wasm版软解码为Video支持的MP4播放。Wasm不支持硬件解码,多路播放时终端电脑的CPU和内存占用高,性能差。此方案适用于需要支持H编码的场景,要求浏览器支持流媒体扩展特性(MSE),实际应用案例较少。
升级方案集中在实现不转码并充分利用终端电脑硬件加速特性的外接系统。这种系统需要在浏览器网页中实现一个内嵌到网页中的播放窗口,前端可控制播放窗口,并随浏览器窗口操作联动。播放窗口为本地原生程序,采用高性能C++语言开发,利用硬件加速,前端通过Web Socket连接播放窗口并发送JSON命令控制播放。市场上已有类似实现的软件,如猿大师中间件,提供全兼容性,包括低版本Chrome和IE浏览器,提供了类似ActiveX控件的安全机制。某视频监控大厂发布的版本采用QT框架,联动效果差,程序包大,未提供前端自动升级和安全调用机制。免插件方案中,外接程序的安全性可通过验证并开放源代码打消顾虑,部署和升级压力小,整体效果优于IE中的ActiveX控件。
综上所述,本文提供了一个稳定可靠、兼容性好、低延迟且可同时稳定播放多路RTSP的低成本半开源技术方案,特别适用于高分辨率RTSP播放。选择技术实施方案时,需考虑满足客户刚性需求、降低总成本、保证兼容性和稳定性,并确保技术方案不会因浏览器升级而失效。此方案适用于机场、地铁站、交管局等场景,实现低延迟、低成本的多路稳定播放。