流媒体学习笔记

最近开发的项目进入收尾阶段,我负责的功能模块已经上线运行,导致手头上没有什么工作,于是趁这段时间学习并整理了关于流媒体的知识。

HLS:Http Living Streaming是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,HLS点播,基本上就是常见的分段HTTP点播,不同在于,它的分段非常小。要实现HLS点播,重点在于对媒体文件分段。

        相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播,HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,延迟一般总是会高于普通的流媒体直播协议。

分段策略和m3u8文件:

  • HLS的分段策略,基本上推荐是10秒一个分片,当然,具体时间还要根据分好后的分片的实际时长做标注
  • 通常来说,为了缓存等方面的原因,在索引文件中会保留最新的三个分片地址,以类似“滑动窗口”的形式,进行更新。
  • m3u8,是HTTP Live Streaming直播的索引文件。m3u8就是.m3u格式文件
#EXTM3U                     m3u文件头,必须放在第一行
#EXT-X-MEDIA-SEQUENCE       第一个TS分片的序列号
#EXT-X-TARGETDURATION       每个分片TS的最大的时长
#EXT-X-ALLOW-CACHE          是否允许cache
#EXT-X-ENDLIST              m3u8文件结束符
#EXTINF                     extra info,分片TS的信息,如时长,带宽等

通过HLS协议在浏览器上播放视频流:移动端 iOS 和 Android 都天然支持HLS协议,做好视频采集端、视频流推流服务之后,便可以直接在H5页面配置 video 标签播放直播视频, HLS 在 PC 端仅支持safari浏览器,类似chrome浏览器使用HTML5 video标签无法播放 m3u8 格式。

移动端可直接通过 <video> 标签来播放 .m3u8 格式的视频: 

1 <video class="vjs-tech" width="100%" height="100%"
2 controls="controls" autoplay="autoplay"
3 x-webkit-airplay="true" x5-video-player-fullscreen="true"
4 preload="auto" playsinline="true" webkit-playsinline
5 x5-video-player-typ="h5">
6 <source type="application/x-mpegURL" src="http://dlhls.cdn.zhanqi.tv/zqlive/22578_yKdJM.m3u8">
7 </video>

PC端需要通过其他手段(videojs-contrib-hls)来解码 .m3u8 格式的视频, 才能够通过 <video> 标签或者 flash 来播放。网页端如果播放 rtmp 或者 flv 形式 的直播流,需要flash插件支持,由于手机web端基本无法调用flash插件,所以手机web端一般使用hls(即m3u8)的形式进行直播。

posted @ 2020-05-12 10:34  leviH  阅读(333)  评论(0编辑  收藏  举报