调研报告之流媒体

标签: 无 分类: 未分类 创建时间:2023-11-05 09:17:07 更新时间:2025-01-17 10:39:24

前言

最近有一个项目需求,就是需要进行大量的视频存储,同时同时需要满足20人进行观看,于是我想着要进行一个视频存储和播放的方案。

  • 1.RTMP、
    RTMP是Macromedia公司的专有协议(现在归Adobe公司所有),在基于Flash的应用程序流行时非常流行。它有几个品种,支持TLS/SSL加密,甚至还有基于UDP的变种,即RTFMP(实时媒体流协议,用于点对点连接)。RTMP将数据流分割成片段,其大小可以动态变化。在通道内,与音频和视频有关的数据包可以交错和复用

  • 2.CMAF
    CMAF(Common Media Application Format,通用媒体应用格式)是由苹果和微软邀请MPEG开发的协议,用于在HTTP上进行自适应广播(具有根据整个网络带宽速率变化而变化的自适应比特率)。通常情况下,苹果公司的HTTP直播(HLS)使用MPEG TS流,而MPEG DASH使用片段式的MP4。2017年7月,CMAF标准被发布。在CMAF中,片段式的MP4片段(ISOBMFF)通过HTTP传输,同一内容有两个不同的播放列表,用于特定的播放器:iOS(HLS)或Android/Microsoft(MPEG DASH)。

  • 3.LL-HLS
    2019年6月,苹果发布了低延迟HLS的规范。

  • 4.WebRTC
    WebRTC(网络实时通信)是由谷歌在2011年开发的一个开源协议。它被用于Google Hangout、Slack、BigClueButton和YouTube Live。WebRTC是一套标准、协议和JavaScript编程接口,并且使用DTLS-SRTP在点对点连接中实现了端到端的加密。此外,该技术不使用第三方插件或软件,可以在不损失质量和延迟的情况下通过防火墙(例如,在浏览器的视频会议期间)。在播放视频时,通常使用基于UDP的WebRTC实现。

  • 5.SRT
    SRT(Secure Reliable Transport,安全可靠传输)是由Haivision在2012年开发的一个协议。该协议在UDT(基于UDP的数据传输协议)和ARQ数据包恢复技术的基础上运行。它支持AES-128和AES-256加密。除了监听(服务器)模式,它还支持呼叫(客户端)和会合(当双方启动连接时)模式,这使得连接可以通过防火墙和NAT建立。SRT的“握手”过程是在现有的安全策略中进行的,因此允许外部连接,而不需要在防火墙中打开永久的外部端口。

参考文章:
【1】.最佳视频文件格式有8种,你对它们真的了解吗?值得收藏一下
【2】.实现在线视频播放 这里提到了 HLS 流媒体服务
【3】.基于 Nginx 配置 Web 视频流媒体服务器 Nginx 本身就提供了视频流传输和播放功能,对于 mp4 格式,只需要借用现成插件即可。nginx-1.15.9,nginx_mod_h264_streaming-2.2.7,播放器: JW Player
【4】.三种视频流浏览器播放解决方案 HLS,RTSP,RTMP。1.HLS与RTMP的播放解决方案:使用原生video;使用flv.js;video.js。2.RTSP流播放解决方案:利用VLC插件转流、html5_rtsp_player+ websocket_rtsp_proxy 实现视频流直播、ffmpeg + nginx + video,rtsp转rtmp播放、ffmpeg转码、video 播放。3.ffmpeg + video,rtsp转hls播放
【5】.快速学习-视频播放器解决方案
【6】.网页全终端h5浏览器视频流解决方案RTSP/FLV/HLS 流媒体传输协议:RTSP、HTTP。在 HTML5 中播放视频流有几种解决方案,以下是一些常见的方法:HTML5 Video 标签、HLS(HTTP Live Streaming)、MPEG-DASH(Dynamic Adaptive Streaming over HTTP)、WebRTC(Web Real-Time Communication)、RTMP(Real-Time Messaging Protocol)、服务器代理。
【7】.网站方案大视频短视频网站开发方案 1.视频存储在自己服务器:视频文件一般比较大,无法通过网站后台上传,同时不具有跨平台的特性,打开视频人数比较多的时候速度慢。而且因为流量带宽的原因,成本比较高。2.视频采用第三方优酷土豆等平台,然后做个HTML框架集合,这种方式不浪费网站空间流量,同时还能保证视频播放速度,唯一的缺点就是偶尔会出现广告,而付费可去除广告,但是费用比较高。
【8】.Web视频播放通用解决方案 1.Web 前端封装 FMP4 + H5 video 播放显示。2. Web 前端 WebAssembly 解码 + Canvas 显示。3.后端解转码 + H5 video 播放显示。我们决定在视频播放端使用后台程序,来实现视频封装、解码等动作。
【9】.低延迟流媒体协议SRT、WebRTC、LL-HLS、UDP、TCP、RTMP详解 这是上面的几种协议的说明
【10】.SRS - 为何不用WebRTC做直播 1.需要更长的起播时间,也就是黑屏时间更长,用户得看更久的黑黢黢的画面。2.目前CDN还不是广泛支持,当然已经有了一部分CDN开始在支持了,还是螃蟹阶段。3.需要更多的服务器分发流,因为加密、QoS、UDP性能三座大山,导致服务器成本更高。4.移动端设备适配WebRTC有各种问题,特别是H5浏览器,Native会适配好点但为何不用完全没问题的FLV呢。5.生态支持还不完善,特别是推流端,估计FFmpeg永远都不会支持WebRTC,他们已经被SRT还有RIST蒙蔽了闪亮的双眼。6.画质更差,由于WebRTC的核心诉求是保障延迟,所以它会牺牲画质,当然可以魔改魔改问题是真的不容易持久维护。7.画质更差,由于WebRTC的核心诉求是保障延迟,所以它会牺牲画质,当然可以魔改魔改问题是真的不容易持久维护。8.音频转码损耗很高,由于直播使用的是AAC,而WebRTC用的是Opus,转码总有成本还容易出问题,当然可以魔改,额。9.音频转码损耗很高,由于直播使用的是AAC,而WebRTC用的是Opus,转码总有成本还容易出问题,当然可以魔改,额。10.最后,基于UDP而有时候UDP就是被封了,嗯你说有TCP,那就干脆用FLV算了。
【11】.直播协议详解 RTMP、HLS、HTTP-FLV、WebRTC、RTSP 的区别 1.RTMP一般用作直播源推流,HTTP-FLV一般用作直播观看。RTMP协议的延迟是比较低的,大概在1-3秒左右。2.HTTP-FLV协议的延迟也是比较低的,大概在1-3秒左右,但实际体验下来 HTTP-FLV延迟会略高于RTMP,但是HTTP-FLV相对RTMP适配更多的播放场景。3.HLS协议一般只用作拉流观看,但是从严格意义上讲,HLS协议并不是流式协议。它工作原理很简单,就是通过HTTP协议下载静态文件。虽然HLS协议的直播流也可以适配很多播放场景,但是由于需要生成静态文件,直播延迟很大,大概在5-30秒左右,使用直播CDN的话,由于边缘节点同步等问题,直播延迟甚至可能会达到1分钟左右。4.WebRTC协议其实并不是为了直播场景而设计的,WebRTC是一种点对点的视频/语音通话协议。由于WebRTC是基于UDP的,建立通信后,会不断以流式发送数据,所以延迟会比RTMP还要低。5.RTSP一般不用作直播场景,RTSP一般用作摄像头、监控等硬件设备的实时视频流观看与推送上。尽管RTSP协议也支持推流/拉流,且支持TCP、UDP切换以及其他诸多优点。但是泛用性不足,特别是现在的浏览器都不支持RTSP的播放。

1.存储方案

其实刚开始的时候,就应该去确定视频存储方案。

1.视频格式

  • flv
  • mp4
  • hls
参考文章:
1.基本概念
2.WebM与MP4格式主要区别,详细比较哪个更好!
3.流媒体协议HLS
4.FLV 和 MP4 之间的区别 FLV 是一种文件格式,主要用来包装制作的媒体文件的他们在 internet 上使用。网上大多为 internet 上的可用的媒体文件以及关于下载,流媒体人士大都 FLV 格式。简单和容易上传和下载设施使它的第一选择。但在实际的 Flash 视频有两只 FLV 大多被认为是 Flash 视频格式: 一是支持小 web 格式的 FLV 和另一种是 F4V 大多用 iOS 的交易基于媒体文件。MP4 也是继续就像一样的 FLV 文件的容器。
5.流媒体传输协议HLS,FLV的功能和特点 HLS和FLV在使用和特点上有很大的差异。HLS在今天更为常见,因为它具有更好的兼容性、自适应流传输以及更广泛的支持。FLV则主要用于旧版Flash应用程序和特定的流媒体服务器环境,不再是现代互联网视频传输的首选格式。

2.视频加载速度

参考文章:
1.如何提高网站上的视频加载速度 1.使用适当的视频格式。2.压缩视频文件。3.使用内容分发网络(CDN)。4.使用流媒体技术。5.优化网站性能。

3.流媒体技术

4.测试地址

  • 1.hls视频测试
    测试hls可以通过hls demo 输入hls的地址查看当前的视频情况。

  • 2.flv视频测试
    flv在线播放器 这个网站实现了输入 flv 地址,就可以查看在线flv视频的功能。

参考文章:

2..rtmp、.rtsp、.flv、 .MP4、 .hls视频流测试地址 这里面的地址大部分的记录都无法使用了。
3. 在线测试视频地址flv,m3u8,rtsp(转) 这个也没有用。
4.H5播放HLS之video标签播放 由于HLS这种协议是由Apple公司定义的,所以苹果手机能够很好的支持.m3u8视频的播放;android手机浏览器只要支持H5的video标签就基本上支持.m3u8这种类型的视频播放;而PC端浏览器即使支持H5的video标签,也不支持.m3u8视频的播放。
5.HTML5原生 HTML5中的

6.oss动态签名

播放 .m3u8 格式的文件,就是先请求一个文件索引,然后再接着请求其他的分片文件,但是如果上传到了 oss ,那么就会导致出现只.m3u8的索引文件有权限,其他的没有权限访问的情况,这个时候就需要用到了动态的索引技术。

参考文章:
【1】.OSS生成m3u8文件动态签名 通过官网的方法,在header中添加上x-oss-proccess=hls/sign
【2】.M3U8签名 百度智能云的签名方法。
【3】.在URL中包含签名

8.带宽

如果要自建流媒体设备的话,就需要测算网络带宽。运营商说的 1M 宽带的 M 是指 Mb / s,也就是 Mbps,换算一下的话,1M 宽带下载速度也就是 128KB / s,再去掉损耗的话就是 120KB / s 左右。以此类推,10M 宽带的最快下载速度是 1.28MB/s,100M 的宽带最快下载速度是 12.8MB/s。MB,是我们通常说的数据量大大小,比如内存16G;Mbps,是每秒传输的bit位,转成数据量需要除以8。

  • bit(比特,1 比特代表 1 个位)是信息的最小单位,是二进制数的一位包含的信息或 2 个选项中特别指定 1 个的需要信息量。一般来说,n 比特的信息量可以表现出 2 的 n 次方种选择。
  • Byte(字节)是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最常用的字节是八位的字节,即它包含八位的二进制数。一个位就代表一个 0 或 1(即二进制),每 8 个位组成一个字节(Byte,简写为 B)。

(1)方案一
高清:720P,1280×720:1000kbps-2500kbps( 上行带宽4M,H.264压缩:3M ,H.265压缩:2M)
超清:1080P,1920×1080:1500kbps-4000kbps( 上行带宽10M,H.264压缩:7M ,H.265压缩:4M)
第3种:2K(2560×1440):2000kbps-8000kbps( 上行带宽20M,H.264压缩: 18M 的,H.265压缩:9M)

(2)方案二
流分辨率 流比特率
4K 13 - 34 Mbps
1080 3 - 6 Mbps
720P 1.5 - 4 Mbps
420P 0.5 - 2 Mbps
360P 0.4 - 1 Mbps

(3)方案三
流畅:960 * 540、512Kbps,标清:1280 * 720、1Mbps,高清:1280 * 720、1.5Mbps,超清:1920 * 1080、3Mbps

参考文章:
【1】.网络视频直播带宽估算 像素、分辨率、视频帧率、视频编码
【2】.Linux查看网络流量
【3】.使用不同清晰度发起直播时上行需要多少带宽 为了实现高质量的直播,可以采取以下几种方法:使用优秀的编码方式。2.降低分辨率和帧率。3.增加带宽。4.使用 CDN 加速。5.选择合适的直播平台。
【4】.一文看懂 Mbps、Mb / s、MB/s 有什么区别 其实运营商等在宣传的时候,Mbps 作为网络速率单位是最正确的,因为数据的传输以及运营商在流量收费的时候都是按照比特来计算的;但从消费者的角度来看,MB/s符合我们大众的生活习惯,而且也便于理解。
【5】.直播的带宽要求是什么? 观看 720p 直播需要 2 Mbps,同一企业内,最大公网出口带宽取决于同时观看直播的设备数,下行带宽可根据观看者设备最大并发数 * 2 Mbps 来估算。
【6】.视频直播带宽的最强计算过程 为确保您的广播具有足够的流上传带宽,我们通常建议将上传带宽与比特率相比提高两倍。如果您的720p视频(4 Mbps比特率)存储在服务器上以进行按需流式传输,并且此流可由50人同时使用单播协议查看,则要求为:视频比特率(Mbps)x访问人数估计值=需要的带宽(以Mbps / s为单位)
【7】.4K、2K、1080p、720p、480p、240p常见视频清晰度 字母P意为逐行扫描,多数情况下4k特指4096 * 2160分辨率。而根据使用范围的不同,4K分辨率也有各种各样的衍生分辨率,例如Full Aperture 4K的4096 * 3112、Academy 4K的3656 * 2664以及UHDTV标准的3840 * 2160等,都属于4K分辨率的范畴。
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。