流媒体知识总结

一、流媒体协议

1.1 基本概念

  各种流媒体协议都是将视频分解为多个块,然后发送给视频播放端,播放端接收、重新组合、完成播放。根据传输是否顺序传输,还有实时流式传输和顺序流式传输的区别。接下来我们就介绍常用的几种常用技术:RTP、RTSP、RTMP、HLS、SRT、WebRTC。

1.1.1 HLS

  HLS是HTTP Live Streaming,由Apple公司提出的基于短连接HTTP的媒体流传输协议,用于实时音视频流的传输。由于其实基于HTTP协议的,所以网络支持很好,能方便穿透防火墙或代理服务器。任何播放器都可以播放。

  HLS协议将整条流切割成一个小的能够经过HTTP下载的媒体文件,而后提供一个配套的媒体列表文件M3U8。客户端拿到M3U8后,根据内容顺序地拉取媒体文件播放。

  HLS有很明显的优势,因为其针对HTTP协议进行针对设计,客户端只须要支持HTTP请求即可。另外,使用HTTP协议网络兼容性好,HTTP数据包也能够方便地经过防火墙或者代理服务器,CDN支持良好。还有就是Apple公司提出的HLS,Apple全系列产品支持HLS协议,Android也已经加入了对HLS的支持。

  但HLS由于采用切片式的多媒体文件,因为切片需要时间编码,所以切片的延时不可避免。另外使用HTTP短连接,需要不断的与server建立连接,且需要完成TCP的三次握手,四次挥手,交互耗时长。所以HLS的延时较高,难以用到时延要求更严格的直播场景。另外,由于HLS切片一般较小,海量碎片在文件分发、一致性缓存都有较大挑战。

协议:HLS使用HTTP协议进行传输,这使得它适用于通过Web服务器分发视频流。它利用HTTP的可靠性和广泛的支持。
容器格式:HLS通常使用.ts(MPEG Transport Stream)作为容器格式,但也可以使用.mp4等其他格式。这使得它能够包含音频、视频和字幕等多种流。
自适应流:HLS支持自适应流,它可以根据观众的网络速度和设备性能动态调整视频质量和比特率,以提供更好的用户体验。
广泛支持:由于苹果的推广和广泛支持,HLS在各种设备和平台上都有很好的兼容性,包括iOS、Android、Web浏览器等。

1.1.2 m3u8

学习链接:https://juejin.cn/post/7213240802378498104?searchId=2023122115444110F5C8E06C9094E62BDF

  m3u8 是「MPEG-3 Unicode UTF-8」的缩写,其中 MPEG-3 是一种音频压缩标准,而 Unicode UTF-8 是一种字符编码标准。因此,m3u8 文件是一种使用 MPEG-3 音频编码和 Unicode UTF-8 字符编码的多媒体文件格式。它用于指定分段视频文件的地址和顺序,以便于流媒体播放器能够按照正确的顺序请求和播放这些分段文件。m3u8 通常用于 HLS 协议的视频流媒体传输中。
下方是控制台中获取的 m3u8 格式文件:
在这里插入图片描述

一个 m3u8 格式的文件通常包含以下内容:

  • #EXTM3U:文件头,指示这是一个 m3u8 格式文件。
  • #EXT-X-VERSION:指定 HLS 版本号。
  • #EXT-X-MEDIA-SEQUENCE:指定第一个分段的序号。
  • #EXT-X-TARGETDURATION:指定每个分段的时长。
  • #EXTINF:指定每个分段的时长和 URL 地址。
  • URL地址:分段视频文件的 URL 地址。

m3u8 文件中的每个 URL 地址指向一个包含媒体数据的分段文件。播放器会按照m3u8 文件中指定的顺序依次请求这些分段文件,并在播放过程中动态地调整分段文件的请求顺序和质量,以实现更稳定和流畅的播放效果。

1.2.1 FLV(Flash Video)

  FLV是由Adobe Flash技术引入的,曾经是网络视频传输的主要格式。然而,随着HTML5的兴起和Flash的逐渐淘汰,FLV的使用已经大幅减少。
  FLV(Flash Video)是Adobe公司设计开发的一种流行的流媒体格式,由于其视频文件体积轻巧、封装简单等特点,使其很适合在互联网上进行应用。此外,FLV可以使用Flash Player进行播放,且任何播放器都可以播放,比较大众的一种格式,而Flash Player插件已经安装在全世界绝大部分浏览器上,这使得通过网页播放FLV视频十分容易。

原文链接:https://blog.csdn.net/zranxi/article/details/122866828

协议:FLV使用RTMP(Real-Time Messaging Protocol)或HTTP进行传输。RTMP在传输实时视频流方面表现出色,但需要专门的服务器支持,而HTTP-FLV则使用HTTP协议。
容器格式:FLV使用自己的容器格式,通常包含音频和视频轨道。
逐渐过时:由于HTML5视频标准的广泛支持,以及Adobe决定于2021年停止支持Flash Player,FLV的使用逐渐减少。许多现代浏览器不再支持Flash。
安全性:FLV曾经面临一些安全性和漏洞问题,这也是它逐渐被淘汰的原因之一。
总的来说,HLS和FLV在使用和特点上有很大的差异。HLS在今天更为常见,因为它具有更好的兼容性、自适应流传输以及更广泛的支持。FLV则主要用于旧版Flash应用程序和特定的流媒体服务器环境,不再是现代互联网视频传输的首选格式。

1.3.1 RTMP (Real-Time Messaging Protocol)

RTMP(Real-Time Messaging Protocol)

RTMP是由Adobe公司(前身Macromedia)开发的一种专有的实时流传输协议,主要用于将音频、视频和数据信息进行低延迟、高效率的传输。RTMP基于TCP协议,确保了数据传输的可靠性,并能在客户端(如Flash Player)和服务器(如Adobe Media Server)之间建立并维持持久连接。

特点:

  • 低延迟:RTMP在设计之初就注重实时性,能够提供相对较低的延迟,适合实时直播场景。
  • 全双工通信:支持双向通信,不仅可以用于流媒体推送,还可以用于实时交互数据传输,例如用户输入、聊天等互动功能。
  • 多路复用:在同一连接上可以同时传输音频、视频和数据消息,每个消息都有独立的时间戳保证同步播放。
  • 安全性:RTMP有多种加密变种,如RTMPS(基于SSL/TLS加密)、RTMPE(使用Adobe私有加密算法)等。

1.3.2 SRT (Secure Reliable Transport)

SRT(Secure Reliable Transport)

SRT是一种开源的、专为互联网不稳定环境设计的低延迟视频传输协议,由Haivision公司在2013年发起并贡献给开源社区。SRT既利用了UDP协议的高效性,也克服了其不可靠性的弱点,实现了类似于TCP的错误恢复和重传机制。

特点:

  • 低延迟:通过智能拥塞控制算法优化带宽使用,减少延迟,特别适合实时广播和远程协作场景。
  • 可靠性:尽管基于UDP,但通过引入ACK/NACK、重传、拥塞控制和带宽探测等机制,提供了接近TCP级别的可靠性。
  • 安全性:支持AES加密,保障数据传输安全。
  • 适应网络状况:能够在丢包率较高、带宽波动较大的网络环境下保持稳定、高质量的视频传输。

简而言之,RTMP是一个广泛应用的传统流媒体协议,尤其在Flash时代广泛应用于在线视频和直播领域,随着Flash退出历史舞台,现代流媒体解决方案更倾向于采用开放标准和更为灵活高效的协议。而SRT作为新一代流媒体传输协议,因其对网络条件的高度适应性和安全性,正逐渐成为业界的新宠,特别是在专业广电和远程通信领域得到广泛应用。

二、视频编码

       I帧(Intra-coded picture, I-frame 或者 Intra frame)在视频压缩技术中具有重要地位,尤其是在MPEGH.26x系列视频编解码标准中。I帧是一种采用帧内编码方式的图像帧,其主要特点包括:

       独立性:I帧是编码序列中的一个独立单元,它不依赖于视频序列中的其他帧进行解码。这意味着解码器仅需要I帧自身的数据就能够重构出完整的图像,无需参照其他帧的信息。

       关键帧:由于其独立性,I帧通常作为编码序列或GOP(Group of Pictures)的起始帧,也被称为关键帧。在流媒体传输、随机访问和编辑操作中,I帧起到了关键作用,因为它提供了随机访问点,用户可以从任意一个I帧开始解码和播放视频流。

       高数据量:相较于P帧和B帧,I帧由于包含了完整的图像信息,所以数据量较大,压缩率相对较低。

       重建基准:后续的P帧和B帧会根据与最近的I帧之间的差异来进行编码,从而节省带宽。P帧基于前向预测,B帧基于双向预测,它们都需要参考前面或后面的I帧或P帧来解码。

       总的来说,I帧在视频编码中扮演着基础参照的角色,是视频压缩传输的重要组成部分,用于保证视频质量和提供错误恢复机制的关键结构。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容由流媒体协议等基本知识,视频媒体基本知识流媒体服务器搭建实战,流媒体工具使用实战等内容组成。由本人“天地会珠海分舵”(http://blog.csdn.net/zhubaitian)耗时一个月整理而成,现分享给大家。 章节内容分布如下: 第1章Streaming 协议和服务器概览学习摘录 7 1.1 Protocol support 8 1.2 Media Container format support 12 第2章Streaming 协议学习摘录 15 2.1 MMS协议简介 15 2.2 RTP相关协议简介 15 2.2.1 RTP与RTCP协议简介 15 2.2.2 RTSP协议简介 16 2.2.3 流传输过程 17 2.3 RTMP vs RTMFP 18 2.3.1 RTMP协议简介 18 2.3.3 RTMFP 简介 19 2.3.4 RTMP VS RTMFP 20 2.4 MPEG-TS 20 2.4.1 MPEG2-TS与MPEG2-PS的区别 20 2.4.2 PES/ES/TS简介 20 2.5 Smooth Streaming 21 2.5 HLS简介 24 2.6 MPEG-DASH 26 2.6.1 简介 26 2.6.2 Dash播放器列表 28 2.6.3 MPD格式 30 2.6.5 MPD在线检查器 31 2.6.5 MPD 格式理解个人小结 31 2.6.6 PMD格式的多样性 32 2.6.7 MPD 支持的Profiles 44 2.6.8 DASH传输协议支持 44 2.7 HLS VS MPEG-DASH 45 2.8 Real Data Transport Protocol 45 2.9 webM 45 第3章 视频容器格式学习摘录 47 3.1 视频容器VS 视频编码 47 3.2 3GP容器 48 3.2 AVI容器(.avi) 49 3.3 WMV vs ASF 容器(.wmv/.asf) 49 3.3.1 ASF高级串流格式简介以及和WMA/WMV的区别 49 3.3.2 ASF和WMA/WMV的区别官方解析 50 3.4 QuickTime容器(.mov) 50 3.5 Ogg vs Ogm容器(.ogg) 51 3.5.1 Ogg容器格式 51 3.5.2 Ogm 51 3.5.3 Ogg vs Ogm 52 3.6 Matroska容器(.mkv|.mka|.mks) 52 3.7 MP4容器 53 3.7.1 简介 53 3.7.2 MP4格式详解 53 3.8 MPEGE TS容器 61 3.9 FLV容器 62 3.10 ABS – Adaptive Bitrate Streaming 自适应串流容器 62 3.11 码率 63 3.12 流媒体的3种格式 63 3.12.1 压缩媒体文件格式 63 3.12.2 流文件格式 64 3.12.3 流媒体发布格式 64 第4章 视频编码格式学习摘录 66 4.1视频编码格式简介 66 4.2主流视频编码格式比较 67 4.2.1 MPEG编码格式 67 4.2.2 DivX/XviD编码格式 68 4.2.3 H.264/X264编码格式 69 4.2.4 WMA-HD/VC-1编码格式 71 4.2.5 各主流编码格式比较 72 4.3 视频解码 73 第5章ffmpeg学习摘录 74 5.1 简介 74 5.2 功能 74 5.3 支持的格式和编码 75 5.4 支持的流媒体协议 76 5.5 ffmpeg视频解码架构示例简略 76 5.5.1 解复用(Demux) 77 5.5.2 解码 (Decode) 78 5.5.3 Ffmpeg中解码流程对应的API函数 78 第6章GStreamer学习摘录 80 6.1 GStreamer简介 80 6.2 GStreamer编写MP3播放器实例 80 6.2.1 初始化GStreamer 80 6.2.2 创建GStreamer管道元件 81 6.2.3 创建元件三元组之GStreamer数据源 81 6.2.4 创建元件三元组之解码器 (即GStreamer过滤器) 插件 81 6.2.5 创建元件三元组之GStreamer接收器 81 6.2.6 链接GStreamer元件三元组到管道 – 播放 82 6.2.7 启动GStreamer管道数据处理流程 82 6.2.8 MP3命令行播放器源代码完整实例 82 第7章 ffmpeg VS GStreamer比较学习摘录 85 7.1 Pipeline设计模式简介 85 7.2 ffmpeg vs GStreamer 86 7.2.1 网上解析翻译 86 7.2.1 FFmpeg和GStreamer异同小结 87 第8章 流媒体服务器搭建摘录 88 8.1 VLC 88 8.1.1 VLC编码和容器兼容性 88 8.1.1 VLC 配置VOD点播 88 8.1.2 VLC 配置组播服务器 90 8.2 Wowza Streaming Engine 91 8.2.1 简介及安装 91 8.2.2 MPEG-DASH 支持 92 8.2.3 如何使用VLC作为直播源 95 8.2.4 点播VOD配置 112 8.3 Nex Gen Media Server (NGMS) 114 8.3.1 Introduction 114 8.3.2 Feature List 115 8.3.3 Practice in Action 116 8.4 IIS Smooth Streaming(IIS Media Service) 117 8.4.1 Getting Started with IIS Smooth Streaming 117 8.4.2 Use VLC to play the Smooth Stream 128 8.4.3 创建Smooth Stream 文件 129 8.4.4 提供DASH服务时IIS的关键设置 129 8.4.5 Dash on IIS步骤 130 第9章 相关工具学习摘录 137 9.1 Bento4 MP4工具包 137 9.1.1 Introduction 137 9.1.2 所包含的工具简介 138 9.1.3 MPEG DASH Adaptive Streaming 139 9.1.4 Serving DASH Streams 147 9.2 MP4Box 149 9.2.1 简介 149 9.2.2 对DASH的支持命令帮助 150 9.2.3 MP4Box: fragmentation, segmentation, splitting and interleaving 153 9.2.4 把MP4转换成TS 155 9.2.5生成不同profile的MPD 155 9.2.6指定每个Representation的bandwidth 156 9.2.7生成多个period的MPD 156 9.2.8生成多个Representation的MPD 156 9.2.9 生成多个Segment的MPD 156 9.2.10 生成(Subsegment) SegmentBase拥有 indexRangeExact 为true的MPD 157 9.2.11 生成多个AdaptionSet的MPD 158 9.2.12 模拟live直播 158 第10章 流媒体服务器搭建指导 159 10.1 所需搭建服务器Matrix 159 第11章 附录 163 11.1 Wowza支持格式 163 11.2 ISO Base Media File Format (IBMFF) 163 11.3 DASH所支持Profile分类 164
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值