前主流的流媒体服务器主要有 nginx-rtmp、crtmpd、wowza、red5、adobe fms等。
协议是服务器的基础,协议决定了关键应用场景,譬如毫秒级别延时只能用udp,秒级别延迟用RTMP,十秒级别可以用HLS。
Feature | SRS | NGINX | CRTMPD | AMS | WOWZA |
RTMP | Stable | Stable | Stable | Stable | Stable |
HLS | Stable | Stable | X | Stable | Stable |
HTTP FLV | Stable | X | X | X | X |
HLS(aonly) | Stable | X | X | Stable | Stable |
HDS | Experiment | X | X | Stable | Stable |
MPEG-DASH | Experiment | X | X | X | X |
HTTP Server | Stable | Stable | X | X | Stable |
比起YY的那种UDP私有协议,RTMP算延迟大的(延迟在1-3秒),比起HTTP流的延时(一般在10秒以上)RTMP算低延时。
一般的直播应用,只要不是电话类对话的那种要求,RTMP延迟是可以接受的。在一般的视频会议(参考SRS的视频会议延时)应用中,RTMP延时也能接受,原因是别人在说话的时候我们一般在听,实际上1秒延时没有关系,我们也要思考(话说有些人的CPU处理速度还没有这么快)。
技术一定要知道弱点,RTMP有个弱点就是累积误差,原因是RTMP基于TCP不会丢包。所以当网络状态差时,服务器会将包缓存起来,导致累积的延迟;待网络状况好了,就一起发给客户端。这个的对策就是,当客户端的缓冲区很大,就断开重连。当然SRS也提供配置。
SRS集群(边缘)不会增加延迟
C++音视频学习资料免费获取方法:关注音视频开发T哥,点击「链接」即可免费获取2023年最新C++音视频开发进阶独家免费学习大礼包!
配置SRS为低延时模式,可以将RTMP延迟降低到0.8-3秒:
# conf/realtime.conf
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
tcp_nodelay on;
min_latency on;
play {
gop_cache off;
queue_length 10;
mw_latency 100;
}
publish {
mr off;
}
}低延时模式影响性能,更多参考如下:
github.com/ossrs/srs/w…
可以将HLS延迟降低到3-5秒:
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
hls {
enabled on;
hls_path ./objs/nginx/html;
hls_fragment 0.2;
hls_window 2;
hls_wait_keyframe off;
}
}HLS还可考虑使用FLV协议替换
GOP = 1;Profile = baseline; Tune = zerolatency (主要是GOP编码参数),例如OBS的编码设置如下:
测试结果,RTMP为1秒、m3u8为3秒:
作者:郎涯技术 链接:https://juejin.cn/post/6996664571117174798
#音视频开发#
LS (HTTP Live Streaming),Apple的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。
HLS (HTTP Live Streaming)
常用的流媒体协议主要有 HTTP 渐进下载和基于 RTSP/RTP 的实时流媒体协议,这二种基本是完全不同的东西,目前比较方便又好用的是用 HTTP 渐进下载方法。在这个中 apple 公司的 HTTP Live Streaming 是这个方面的代表。它最初是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的流.现在见到在桌面也有很多应用了,HTML5 是直接支持这个。
但是HLS协议的小切片方式会生成大量的文件,存储或处理这些文件会造成大量资源浪费。如果要实现数天的时移,索引量将会是个巨额数字,并明显影响请求速度。因此,HLS协议对存储I/O要求相当苛刻。对此,也有公司提出了非常好的解决方案。
新型点播服务器系统,独创了内存缓存数据实时切片技术,颠覆了这种传统实现方法,从根本上解决了大量切片的碎片问题,使得单台服务器的切片与打包能力不再是瓶颈。其基本原理如下:
不将TS切片文件存到磁盘,而是存在内存当中,这种技术使得服务器的磁盘上面不再会有“数以吨计”的文件碎片,极大减少了磁盘的I/O次数,延长了服务器磁盘的使用寿命,极大提高了服务器运行的稳定性。同时,由于使用这种技术,使得终端请求数据时直接从服务器的内存中获取,极大提高了对终端数据请求的反应速度,优化了视频观看体验。
使用下面两个工具
1、ffmpeg(下载地址:http://ffmpeg.org/download.html)
ffmpeg用来负责把直播流(RTSP)切片成*.ts文件
主要参数:
-i 设定输入流
-f 设定输出格式
-ss 开始时间
视频参数:
-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器
-keyint_min 60 最小关键帧间隔
-g 60 GOP 长度
-sc_threshold 0 根据视频的运动场景,自动为你添加额外的I 帧,所以会导致你编出来的视频关键帧间隔不是你设置的长度,
这是只要将它设为0
音频参数:
-ar 设定采样率
-ac 设定声音的Channel 数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频
----------------------------------------------------分隔线----------------------------------------------------
主要参数
-i 设定输入档名。
-f 设定输出格式。
-y 若输出档案已存在时则覆盖档案。
-fs 超过指定的档案大小时则结束转换。
-ss 从指定时间开始转换。
-title 设定标题。
-timestamp 设定时间戳。
-vsync 增减Frame 使影音同步。
影像参数
-b 设定影像流量,默认为200Kbit/秒。( 单位请参照下方注意事项)
-r 设定FrameRate 值,默认为25。
-s 设定画面的宽与高。
-aspect 设定画面的比例。
-vn 不处理影像,于仅针对声音做处理时使用。
-vcodec 设定影像影像编解码器,未设定时则使用与输入档案相同之编解码器。
声音参数
-ab 设定每Channel(最近的SVN 版为所有Channel 的总合)的流量。( 单位请参照下方注意事项)
-ar 设定采样率。
-ac 设定声音的Channel 数。
-acodec 设定声音编解码器,未设定时与影像相同,使用与输入档案相同之编解码器。
-an 不处理声音,于仅针对影像做处理时使用。
-vol 设定音量大小,256 为标准音量。(要设定成两倍音量时则输入512,依此类推。)
注意事项
以-b 及ab 参数设定流量时,根据使用的ffmpeg 版本,须注意单位会有kbits/sec 与bits/sec 的不同。(可用ffmpeg -h 显
示说明来确认单位。)
例如,单位为bits/sec 的情况时,欲指定流量64kbps 时需输入‘ -ab 64k ’;单位为kbits/sec 的情况时则需输入‘ -ab 64 ’。
以-acodec 及-vcodec 所指定的编解码器名称,会根据使用的ffmpeg 版本而有所不同。例如使用AAC 编解码器时,会有输入aac
与libfaac 的情况。此外,编解码器有分为仅供解码时使用与仅供编码时使用,因此一定要利用ffmpeg -formats 确认输入的
编解码器是否能运作。
2、WEB服务器(IIS,Apache,Nginx)分发切片
web服务器配置在这里就不多说了。
demo:http://live.16it.wang
如有需要源码的可以联系我:519468341
是一种将直播流模拟成FLV文件,通过HTTP协议进行下载的模式来实现流媒体传输的协议,端口号80
一般建议使用HTTP FLV,实时性和RTMP相等。
优点:HTTP相比于RTMP省去了一些协议交互时间,首屏时间更短。HTTP可拓展的功能更多。
Adobe公司的流媒体传输协议,端口号1935
普通网络用户均可使用,包括非IOS平台用户,对非80端口(如1935)无限制的网络环境用户。
优点:防HTTP下载,延时短。
缺点:web端播放rtsp流的话,需要写插件,而且对浏览器也很挑剔,flash不支持rtsp,需要做activeX插件
目前的CDN都是基于RTMP的
HLS
IOS平台下的流媒体传输协议 ,端口号80
优点:H5浏览器支持比较好,IOS,安卓原生支持。
缺点:延迟性比较大。楼上说的切片,关键帧改变后切片时间可以缩短,而且可以自己设定首次产生多少分片。
音视频开发教学视频:【免费】FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发-学习视频教程-腾讯课堂
*请认真填写需求信息,我们会在24小时内与您取得联系。