流媒体网络协议 -- HLS

HLS协议详解 详细介绍HLS的推拉流过程 和 HTTP、m3u8、ts的详细介绍 阅读详情


HLS介绍

HLS(HTTP Live Streaming)全称为http直播流,是一个由Apple公司提出的基于HTTP的媒体流传输协议,用来实现实时音视频流的传输。

1. 原理

服务器将码流切割成一个个小的(通常是10秒一个)可以通过HTTP下载的媒体分片(segment),并提供一个配套的媒体列表文件(M3U8文件);客户端下载媒体列表文件,并按照规范解析文件,获取每个媒体分片的地址并按顺序下载,从而实现看起来播放一个码流的效果。
这其中,HTTP是网络协议,媒体播放列表为Apple官方定义的M3U8文件,媒体文件格式为TS或fMP4。

2. HLS多媒体系统

该系统结构如下图:
在这里插入图片描述
主要由四个部分组成:

  • 媒体资料输入源
    采集音视频数据
  • 媒体编码封装服务器
    对裸流进行编码,封装,切割,使之成为连续的、时长很短的媒体文件。
  • 分发服务器
    标准的网络服务器组成,接收客户端的请求和分发资源(M3U8文件和媒体文件)
  • 客户端
    拉流播放

3. HLS的优势和不足:

  • 优势:
    1. 使用HTTP协议传输数据,不会被防火墙屏蔽掉,易于分发。
    2. 码率自适应,提高播放流畅度。
    3. 无状态协议,便于负载均衡。
    4. 浏览器支持好,无需安装插件。
  • 不足:
    实时性差,延迟高,两个原因:
    1>采用切片式的多媒体文件,因为切片需要时间编码,所以一个切片的延时不可避免。
    2>使用http短连接,需要不断的与server建立连接,且基于tcp,需要三次握手,四次挥手,交互耗时长。

媒体描述文件

M3U8文件,HLS的媒体描述文件,UTF-8编码。
可以是一个主列表(Master Playlist),也可以是一个媒体列表(Media Playlist)。
如下图为列表和媒体文件的关系,共两级列表。
在这里插入图片描述

1. 主播放列表(Master Playlist)

用来表示多个不同码率码流的媒体播放列表url及相关信息。
如下:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000,CODECS="avc1.640028,mp4a.40.2"
http: //example.com/low.m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000,CODECS="avc1.640028,mp4a.40.2"
http: //example.com/mid.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000,CODECS="avc1.640028,mp4a.40.2"
http: //example.com/hi.m3u8
TAG以及形式意义
#EXTM3U表示该文件一个拓展的M3U8文件,必须放在第一行。
#EXT-X-STREAM-INF:用于指定一个Variants Stream,指定一个包含多媒体信息的Media URI作为playlist
一般做M3U8的嵌套使用,它只对紧跟后面的URI有效。
attribute-list有以下参数:
· BANDWIDTH: 要求的带宽,该参数必须有,实现码率自适应的关键参数。
· PROGRAM-ID: 十进制整数,唯一地标识playlist文件范围内的特定描述。
· CODECS: 指定视频和音频编码类型,非必须的。
· RESOLUTION: 分辨率,非必须的。

2. 媒体播放列表(Media Playlist)

用来表示同一码率码流的一系列切片url及相关信息。

  • 点播的媒体播放列表:
    #EXTM3U
    #EXT-X-PLAYLIST-TYPE:VOD  // 播放列表类型
    #EXT-X-VERSION:3         // 版本信息
    #EXT-X-TARGETDURATION:11 // 每个分片的目标时长
    #EXT-X-MEDIA-SEQUENCE:0  // 该文件第一个分片的序号
    #EXTINF:10.922578,       // 分片实际时长
    test000.ts               // 第一个分片文件,序号为0
    #EXTINF:9.929578,        // 第二个分片实际时长
    test001.ts               // 第二个分片文件,序号为1
    ...
    #EXT-X-ENDLIST           // 该列表结束标志
    
  • 对于加密的码流,多了EXT-X-KEY tag,用以表示加密方法、key的请求地址和IV(偏移量)
    注意需要将IV转化为十六进制(char --> hex)
    其媒体播放列表是这样的:
    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:10
    #EXT-X-MEDIA-SEQUENCE:12616381
    #EXT-X-KEY:METHOD=AES-128,URI="3M_key",IV=0x4F1E7B58678D094361DF3F0FFDEDD333
    #EXTINF:10,
    720p_aes_0.ts
    #EXT-X-KEY:METHOD=AES-128,URI="3M_key",IV=0x4F1E7B58678D094361DF3F0FFDEDD333
    #EXTINF:10,
    720p_aes_1.ts
    #EXT-X-ENDLIST
    
  • 对于直播流,其媒体播放列表末尾没有ENDLIST tag,是这样的:
    EXT-X-PLAYLIST-TYPE为EVENT,而且列表末尾没有EXT-X-ENDLIST tag!
    #EXTM3U
    #EXT-X-PLAYLIST-TYPE:EVENT
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:11
    #EXT-X-MEDIA-SEQUENCE:0
    #EXTINF:10.922578,
    test000.ts
    #EXTINF:9.929578,
    test001.ts               
    ...
    
  • 下面说明各个TAG的意义:
    TAG以及形式意义
    #EXTM3U一个拓展的M3U8文件,必须放在第一行,以此TAG来说明该文件为M3U8文件
    #EXT-X-PLAYLIST-TYPE播放列表类型。有两个取值:VOD --> 点播;EVENT --> 直播。
    #EXT-X-VERSION:协议的版本号,n为3,HLS v3;n为4,HLS v4
    #EXT-X-TARGETDURATION:该列表中每个切片的最大时长
    #EXT-X-MEDIA-SEQUENCE:该文件第一个切片的序号。如没有,则默认为0
    #EXTINF:duration(float),title一个切片的实际时长和文件名,文件名与url拼接就可以得到切片url。
    #EXT-X-KEY解密信息,有三个参数:
    • METHOD:加密算法,hls协议规定三个枚举值:NONE, AES-128(CBC), SAMPLE-AES
    • URI:解密key相对资源路径
    • IV:解密偏移量
    #EXT-X-ENDLISTM3U8文件结束符,直播场景没有这个tag

3. 播放列表中URL生成规则:

播放列表中有以下几种不同的URL生成规则。

  1. 直接给出URL
    也就是绝对路径,拿到之后直接用来请求既可。如:

    #EXTM3U
    #EXT-X-TARGETDURATION:10
    #EXT-X-VERSION:3
    #EXTINF:9.009,
    http ://media.example.com/first.ts
    #EXTINF:9.009,
    http ://media.example.com/second.ts
    #EXTINF:3.003,
    http ://media.example.com/third.ts
    #EXT-X-ENDLIST
    

    那我们直接请求http://media.example.com/first.ts,就可以拿到切片了

  2. 单文件名相对路径
    只给出文件名,说明资源文件与m3u8文件放在一个目录,需要进行url拼接。如:

    #EXTM3U
    #EXT-X-TARGETDURATION:10
    #EXT-X-VERSION:3
    #EXTINF:9.009,
    first.ts
    #EXTINF:9.009,
    second.ts
    #EXTINF:3.003,
    third.ts
    #EXT-X-ENDLIST
    

    拼接规则:将请求该m3u8文件的url去掉m3u8文件名后,再将切片文件名拼接上去,就是正确url了。

    如该m3u8的url为:http://media.example.com/index.m3u8
    那么每个切片url前缀就是:http://media.example.com/
    所以第一个切片url就是:http://media.example.com/first.ts
    
  3. 带文件路径的相对路径
    给出资源文件的路径,说明资源文件与m3u8文件不放在同一个目录,需要进行url拼接,如:

    #EXTM3U
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608
    1000k/hls/index.m3u8
    或者:
    #EXTM3U
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608
    /1000k/hls/index.m3u8
    

    拼接规则同2)。

    如该m3u8的url为:http://media.example.com/index.m3u8
    那么每个媒体播放列表url前缀就是:http://media.example.com/
    所以该媒体播放列表的url就是:http://media.example.com/1000k/hls/index.m3u8
    

    还有一种:

    #EXTM3U
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608
    /15467_73a719b2/1000k/hls/index.m3u8
    

    而请求该m3u8的url是:

    http://media.example.com/123/15467_73a719b2/index.m3u8

    可以看到文件路径和请求url有重复的地方,这种情况需要去重。
    按2)的拼接规则,那么就是:

    http://media.example.com/123/15467_73a719b2/15467_73a719b2/1000k/hls/index.m3u8

    显然不对,需要去重,所以应该是:

    http://media.example.com/123/15467_73a719b2/1000k/hls/index.m3u8

  4. 双斜杆相对位置:
    双斜杆后面一般直接就是域名,如:

    #EXTM3U
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608
    //douban.donghongzuida.com/20210109/15467_73a719b2/1000k/hls/index.m3u8
    

    拼接规则:直接添加请求该m3u8列表的协议。

    如该m3u8为http://media.example.com/index.m3u8,
    那么就是:http://douban.donghongzuida.com/20210109/15467_73a719b2/1000k/hls/index.m3u8
    如该m3u8为https://media.example.com/index.m3u8,
    那么就是:https://douban.donghongzuida.com/20210109/15467_73a719b2/1000k/hls/index.m3u8
    

4. 扩展

  1. HLS高版本中支持了ISO profile,也就是支持fragment MP4,为此HLS新增了EXT-X-MAP这个tag来标识。
    如:

    #EXTM3U
    #EXT-X-TARGETDURATION:15
    #EXT-X-ALLOW-CACHE:YES
    #EXT-X-PLAYLIST-TYPE:VOD
    #EXT-X-VERSION:6
    #EXT-X-MEDIA-SEQUENCE:1
    #EXT-X-MAP:URI="init-v1-a1.mp4"
    #EXTINF:13.000,
    seg-1-v1-a1.m4s
    #EXTINF:12.000,
    seg-2-v1-a1.m4s
    #EXT-X-ENDLIST
    

    fragment mp4的moov和mdat是分开的,在hls中,承载moov的切片叫做init segment;而承载mdat的切片叫做media segment。
    而为了区分两者,就有了EXT-X-MAP这个tag,用以表示init segment的url。meidia segment中可能有audio和video fragement。
    而对于TS profile,也可以使用EXT-X-MAP,其init segment就是PAT和PMT的packet,这可以提高ts的负载率。

  2. 低延时HLS的实现
    1>第三方公司提出的LHLS方案
    HTTP 1.1 分块传输(chunk)
    参考链接:https://www.theoplayer.com/low-latency-hls-streaming

    2> apple官方提出的low-latency HLS方案
    最大的改进是将最新的那个切片分解成更小的切片,也就是请求的数据颗粒度更小了,可访问切片的生成时间减小,时延减小。
    为此,特别新增了#EXT-X-PART这个tag.
    如:

    #EXTINF:6.003,
    LLHLS_Video1_67750710.mp4
    #EXT-X-PROGRAM-DATE-TIME:2021-03-18T09:20:29.482Z
    #EXT-X-PART:DURATION=1.000,URI="LLHLS_Video1_67750711.0.mp4",INDEPENDENT=YES
    #EXT-X-PART:DURATION=1.000,URI="LLHLS_Video1_67750711.1.mp4",INDEPENDENT=YES
    #EXT-X-PART:DURATION=1.000,URI="LLHLS_Video1_67750711.2.mp4",INDEPENDENT=YES
    #EXT-X-PART:DURATION=1.000,URI="LLHLS_Video1_67750711.3.mp4",INDEPENDENT=YES
    #EXT-X-PART:DURATION=1.000,URI="LLHLS_Video1_67750711.4.mp4",INDEPENDENT=YES
    #EXT-X-PART:DURATION=1.000,URI="LLHLS_Video1_67750711.5.mp4",INDEPENDENT=YES
    

    可见LLHLS_Video1_67750710.mp4这个切片被切分成更小的切片,这样就不用等待该切片整个生成之后,再去访问了。

  3. 搭建HLS服务器。
    使用nginx或Apache2搭建Http server即可…

  4. 如何在hls播放过程中插播广告?
    同一个广告视频应当可以插入到任意hls片源的任意切片前面,因此无法保证广告视频的编码格式和码率等信息和HLS片源是一致的,这会影响客户端播放器的正常播放,因此有必要告知播放器广告插入在hls片源插入的时间点以及广告的metadata等信息。HLS专门设置了#EXT-X-DISCONTIUITY这个TAG来表明前面切片和后面切片是完全不同的,需要播放器做出对应的处理。播放器检测的这个tag之后就需要重新初始化解码器,因为切片的编码类型发送变化。
    例子:
    一个普通的M3u8文件:

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:11
    #EXT-X-MEDIA-SEQUENCE:0
    #EXTINF:10.922578,
    test000.ts
    #EXTINF:9.929578,
    test001.ts
    ...
    

    如果想在原视频开头前插入广告:

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:11
    #EXT-X-MEDIA-SEQUENCE:0
    #EXTINF:10.0,
    ad0.ts
    #EXTINF:8.0,
    ad1.ts
    #EXT-X-DISCONTINUITY
    #EXTINF:10.922578,
    test000.ts
    #EXTINF:9.929578,
    test001.ts
    ...
    

    如果想在原视频中间插入广告:

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:11
    #EXT-X-MEDIA-SEQUENCE:0
    #EXTINF:10.922578,
    test000.ts
    #EXT-X-DISCONTINUITY
    #EXTINF:10.0,
    ad0.ts
    #EXTINF:8.0,
    ad1.ts
    #EXT-X-DISCONTINUITY
    #EXTINF:9.929578,
    test001.ts
    ...
    
  5. 码率切换策略:
    综合考虑网络带宽和buffer水位。
    当前带宽小于当前播放码率且buffer中的数据也不充足(不足够一个切片)的时候,降到对应的码率。
    当前带宽大于当前播放码率且buffer中的数据充足(大于一个切片)时,升到对应的码率。
    怎么计算当前buffer中的切片数量?
    通过buffer中数据量和上一个已下载的切片平均比特率来计算当前buffer中是否足够一个切片的时长(targetduration)


实际应用遇到的问题

  1. 直播时,playlist请求的间隔是多少?
    答:一般是间隔一个切片的时长更新一次播放列表,以减少服务器负担。

  2. 直播时,第一个播放片段的选择?
    答:HLS协议规定直播时,客户端应该选择距离播放列表中最后一个切片大于两个目标时长的切片作为首个切片进行播放。
    First_req_segment_sequence <= last_segment_in_list_sequence – 3。
    为了兼顾实时性和流畅度,一般而言,客户端应该从m3u8文件中倒数第三个或倒数第四个segment开始播放。

  3. 如何判断播放源是直播还是点播?
    答:有两种方法进行判断
    1>判断媒体播放列表是否存在#EXT-X-ENDLIST标签,有,点播;无,直播。
    2> 判断#EXT-X-PLAYLIST-TYPE的类型:

    #EXT-X-PLAYLIST-TYPE: VOD // 点播源
    #EXT-X-PLAYLIST-TYPE: EVENT // 直播源

  4. 如何判断某个M3U8文件是主播放列表还是媒体播放列表?
    答:通过列表中是否存在EXT-X-STREAM-INF,存在,主m3u8列表;不存在,媒体播放列表。

  5. 直播时,如何判断当前请求的m3u8文件相比上一次请求的m3u8文件,是否有新的segment url加入?
    答:一个效率比较高的方法是比较上一次请求的m3u8文件和当前m3u8文件的md5码是否一样。一样,无更新,可跳过解析;不一样,有更新。

  6. 如果m3u8列表请求不到,downloader会怎么处理?
    答:retry两次,每次retry等待时长为10秒,如果还请求不到的话,就返回error给player。

  7. 为什么HLS的实时性差?
    答:两个原因:
    1>采用切片式的媒体形式,颗粒度大,切片需要编码完成才可以被请求,一个切片的时延不可避免。
    2>采用http短连接进行数据请求,需要不断跟服务器请求响应,每次请求需要耗费一个RTT时间,交互时间长。

流媒体协议-HLS协议简介 HLS是苹果公司提出的基于HTTP的流媒体传输协议,广泛应用于视频点播和直播领域。 通过将音视频流切割成TS(Transport Stream)切片,并生成m3u8播放列表文件,实现边下载边播放的效果。类似于实时在线播放。 由于传输层只采用HTTP协议,HLS因此具有HTTP的优势,如易于穿越防火墙、负载均衡和CDN分发,支持码率自适应,但缺点是直播时延时较高,TS切片较多,特别是实时视频流,需要动态的生成和删除TS切片文件,为了实现高性能、低碎片化,对于文件存储的逻辑需要更加复杂的设计 阅读详情

相关推荐

流媒体协议HLS和DASH

简要介绍流媒体协议HLS和DASH

夏日 の blog 4424

HLS直播协议详解

本文对 HLS 协议进行了详细的讲解,由浅入深,一点儿点儿揭开其神秘面纱。首先我们先使用 ffmepg 对一段视频文件进行切片,视频所在路径:D:\Work\test这个命令是使用FFmpeg工具进行视频转码和分段处理的操作。ffmpeg: FFmpeg命令行工具的名称,用于处理音视频文件。: 指定输入文件的路径和文件名。这里的输入文件是名为 “SampleVideo_1280x720_20mb.mp4” 的视频文件。: 强制立即刷新输出文件的数据包。

明天你好的博客 7184

工作多年精通C++该具备哪些技能,你会了吗?(进阶C++职业规划)

一、C++服务器程序员(流媒体后台,游戏后台,高性能服务器后台) 1. 精通C++,STL,Linux等,熟悉设计模式; 2. 熟练掌握一门脚本语言(Lua, Python, Perl等); 3. 对多线程环境编程有一定的理解,能独立完成服务器端模块的开发、维护和优化; 4. 熟练掌握MySQL数据库的开发维护、性能优化; 1.精通C++编程,3年以上服务器开发经验; 2.有手机游戏或...

小白的逆袭 5382

流媒体协议(一):HLS 协议

一、HLS 概述 HLS 全称是 HTTP Live Streaming,是一个由 Apple 公司提出的基于 HTTP 的媒体流传输协议,用于实时音视频流的传输。目前HLS协议被广泛的应用于视频点播和直播领域。 1. 原理介绍: 通过将整条流切割成一个小的可以通过 HTTP 下载的媒体文件, 然后提供一个配套的媒体列表文件, 提供给客户端, 让客户端顺序地拉取这些媒体文件播放, 来实现...

weixin_30364147的博客 690

流媒体网络协议全解析:从实时传输到自适应流,如何选择最优方案?

流媒体网络协议全解析:从实时传输到自适应流,如何选择最优方案?

世界那么大,我想去看看~【随心更新,看世界去了😄】 655

[zz] 为什么流媒体直播的延迟很高

为什么流媒体直播的延迟很高 原文 -为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。 背景 通信技术的发展促进了视频点播和直播业务的兴起,4G 和 5G 网络技术的进步也使得流媒体技术变得越来越重要,但是网络技术并不能解决流媒体直播的高延迟问题,本文不会介绍网络对直播业务的影响,而是会分析直播中常见的现象 —

突围 584

流媒体网络协议之HLS(一)

HLS一、HLS简介二、HLS框架三、M3U8文件结构四、 参考链接: 一、HLS简介 HTTP Live Streaming(HLS)是一个由苹果公司提出的基于HTTP的流媒体传输协议。HLS的工作原理是把媒体文件或媒体流按照不同的码率分成一个个小片段进行传输,客户端可以根据自身的网络带宽选择合适码率的码流进行下载播放。在传输会话开始时,客户端首先需要下载描述媒体码流数据的M3U8索引文件。 ...

Joker_N的博客 1010

【CSP-J/S初赛知识点整理】

CSP-J/S初赛知识点整理

qq_43884946的博客 1万+

流媒体及流媒体传输协议

文章目录1、网络协议2、流媒体概述3、流媒体传输协议4、拓展 1、网络协议 计算机网络知识 网络协议 系列 计算机网络中,传输层协议分为: TCP UDP HTTP(源自TCP)和RTP(源自UDP)属于应用层协议; 2、流媒体概述 流媒体(streaming media):是指将一连串的媒体数据压缩后,经过网上分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送;如果不使用此技术,就必须在使用前下载整个媒体文件。 流媒体及流媒体传输协议简介 (荐) 音视频&a

唐诺 948

基于Unity引擎利用OpenCV和MediaPipe的面部表情和人体运动捕捉系统

增加了模型的绑定,利用Mediapipe这个强大的库可以实现识别面部表情的捕捉和人体结构运动的捕捉,基于以上的特性加入到Unity的人物模型中,实现实时的面部表情和人体运行的捕捉

BIgbossyii的博客 1万+

海思方案定制hi3531dv200/SS528 DVR方案解析:从硬件选型到编解码实战应用

海思方案,Hi3518EV100,Hi3518CV100,Hi3515CV100,Hi3516CV100,Hi3516ECV100,Hi3516D,Hi3516A,Hi3519,Hi3520D,Hi3521A,Hi3535,Hi3531,Hi3536,Hi3536C,Hi3536D,Hi3518EV200,Hi3518EV201,Hi3520DV200,Hi3516CV200,Hi3516CV300,Hi3516AV200,Hi3520DV300,Hi3519V101,sd3403,hi3519av200

1585

【流媒体|从入门到出家】:零,开始

说在开始 这个标题取得大了点,貌似所有编程语言都有一部类似标题的教程,但本小编还是不得不说齁得住。观止云团队多年来默默耕耘在流媒体底层技术开发,在“巨头”林立的夹缝中依然成长越来越迅速,技术是观止云不断前行的灯盏。前两天销售同学问我,你看看周围做云服务的都是些什么公司,某B某A某...

chuangpaluo7578的博客 243

当预编译包失效时:手把手教你在Nvidia Orin (JetPack 5.1.1) 上源码编译onnxruntime-gpu

本文详细指导在Nvidia Orin (JetPack 5.1.1) 上源码编译onnxruntime-gpu的全流程,解决预编译包兼容性问题。涵盖环境准备、工具链配置、源码编译、常见问题解决及性能优化技巧,帮助开发者在边缘计算设备上实现高效AI模型推理。

weixin_29062823的博客 135

流媒体技术笔记(协议相关)

1、RSVP:资源预留协议   由于音频和视频数据流比传统数据对网络的延时更敏感,要在网络中传输高质量的音频、视频信息,除带宽要求之外,还需其它更多的条件。RSVP(ReSource reserVe Protocol)是Internet上的资源预留协议,使用RSVP预留一部分网络资源(即带宽),能在一定程度上为流媒体的传输提供QoS。资源预留协议使Internet应用传输数据流时能够获得特殊

yuyin86的专栏 804

spring boot 集成cas(一) 服务端搭建

简单点就是统一服务认证,多个系统一次登录。俗称单点登录。

慕孑晨的博客 1956

CH340驱动安装全攻略:从Windows到MacOS的避坑指南(2025最新版)

本文提供2025年最新版CH340驱动安装全攻略,涵盖Windows、MacOS和Linux三大操作系统。详细解析了驱动安装的核心原理、标准流程,并针对Windows设备管理器报错、MacOS系统安全限制等常见“坑点”提供了深度排错与解决方案,旨在帮助开发者快速稳定地完成USB转串口通信配置。

earth的博客 426

直播平台软件开发的流媒体直播为什么延迟很高

直播平台软件开发的流媒体直播为什么延迟很高 通信技术的发展促进了视频点播和直播业务的兴起,4G 和 5G 网络技术的进步也使得流媒体技术变得越来越重要,但是网络技术并不能解决流媒体直播的高延迟问题,本文不会介绍网络对直播业务的影响,而是会分析直播中常见的现象 — 主播和观众之间能够感觉到的明显网络延迟。除了业务上要求的延迟直播之外,有哪些因素会导致视频直播的延迟这么高呢? 图 1 - 流媒体直播 当观众通过弹幕与主播进行互动时,从我们看到弹幕到得到主播的响应可能要经过 5s 甚至更长的时间,虽然主

云豹直播源码 793

开心消消乐

1)当点击一个1时,该1变被反转为0,同时相邻的上、下、左、右,以及左上、左下、右上、右下8个方向的1(如果存在1)均会自动反转为0;2)进一步地,一个位置上的1被反转为0时,与其相邻的8个方向的1(如果存在1)均会自动反转为0;上述样例中,四个角上的1均在中间的1的相邻8个方向上,因此只需要点击一次即可。给定一个N行M列的二维矩阵,矩阵中每个位置的数字取值为0或1。在上述4 * 4的矩阵中,只需要点击2次,即可将所有的1进行消除。接下来N行表示矩阵的初始值,每行均为M个数,取值范围[0,1]

面试高手的博客 2730

http抓包实战 pdf_HLS实战之Wireshark抓包分析

0.引言Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。在过去,网络封包分析软件是非常昂贵的,或是专门属于盈利用的软件。Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源...

weixin_39525118的博客 585

手把手教你用LabelImg打造专属YOLO数据集:从标注到训练全攻略!

YOLO(You Only Look Once)是一种快速、高效的目标检测算法。它使用一种简洁的.txt文件格式来保存每张图片中的标注信息,适合构建自定义目标检测数据集。🔹 图像文件.jpg.png等;每张图片将对应一个同名的标签文件(.txtdog.jpg对应dog.txt;图像在训练前通常会被缩放成统一尺寸,例如 YOLOv3 默认输入为416x416。🔹 标签文件(.txt)是一个纯文本文件;每一行表示一个标注目标;字段说明类别编号,从0开始,例如:狗是0,猫是1x_center。

FJN110的博客 2466

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

为什么在直播系统源码的流媒体直播的延迟很高

通信技术的发展促进了视频点播和直播业务的兴起,4G 和 5G 网络技术的进步也使得流媒体技术变得越来越重要,但是网络技术并不能解决流媒体直播的高延迟问题,本文不会介绍网络对直播业务的影响,而是会分析直播中常见的现象 — 主播和观众之间能够感觉到的明显网络延迟。除了业务上要求的延迟直播之外,有哪些因素会导致视频直播的延迟这么高呢? 图 1 - 流媒体直播 当观众通过弹幕与主播进行互动时,从我们看到弹幕到得到主播的响应可能要经过 5s 甚至更长的时间,虽然主播看到弹幕的时间与观众看到弹幕的时间不会有太大

云豹直播源码 770

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

直播服务器推流了解

搭建直播服务器需要结合流媒体技术网络协议和服务器架构知识。确定直播类型:推流端:主播使用的设备(手机/PC/专业摄像机)传输协议:RTMP(低延迟)、HLS(兼容性高)、WebRTC(实时交互)播放端:Web浏览器、移动App、智能电视等。

QingTC 394

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

直播加速所用的网络协议与网速比我们平常使用的有什么特殊

直播加速所用的网络协议设计上强调实时性和低延迟,与日常使用的HTTP/TCP协议相比,更加注重在网络不稳定或拥塞情况下的适应能力和流畅度。这些特殊的协议和技术使得直播应用能够在高负载情况下依然保持良好的用户体验。

KookeeyLena1的博客 1100

各种协议HTTP WebRTC

TCP/IP协议族是互联网通信基石,采用四层架构实现跨网络稳定传输。传输层以TCP(可靠连接)和UDP(高速无连接)为核心,支撑网页、文件传输与实时音视频。流媒体领域,RTMP适配推流,HLS利于分发,WebRTC实现浏览器点对点实时互动,RTSP则广泛用于监控系统。应用层协议如FTP、SMTP、DNS、DHCP等完成文件、邮件、域名解析与网络配置。安全方面,HTTPS加密、SSH远程管理、ICMP/ARP辅助诊断与寻址。典型直播架构为:主播用RTMP推流,服务器转码分发HLS给观众,同时通过WebRTC支

博客 173

MediaMTX国产化平台深度实战指南:龙芯与鲲鹏架构的流媒体服务器编译与优化

MediaMTX作为一款零依赖的实时媒体服务器和媒体代理,支持多种流媒体协议的发布、读取、代理、录制和播放功能,在国产化平台适配中展现出卓越的跨平台兼容性。本文将从技术架构、编译适配、性能优化等多个维度,深入解析在龙芯和鲲鹏两大国产平台上的完整部署方案。 ## 技术挑战与解决方案概述 国产化平台适配面临的核心技术挑战主要集中在指令集差异、内存管理优化、网络协议栈兼容性以及性能调优等方面。龙芯平

gitblog_00790的博客 967

抖音在线去水印:短视频流的M3U8/API解析与反爬虫工程

通过构建一个能够高效处理深度链接、破解 API 签名并重组 M3U8 视频流的自动化流水线,可以实现对高清无水印视频资源的高效获取。这种技术的实现,展示了 Web 工程在处理复杂多媒体数据流方面的强大能力。短视频平台的分享链接到最终的无水印视频资源之间,存在复杂的视频流解析、多层API调用和加密机制。高效的视频资源提取工具,需要构建一个涉及多层网络协议、加密机制解析和视频流处理的自动化流水线。将复杂的视频流解析、加密逆向和视频重组技术集成到 Web 工具中,具有显著的工程价值。,阻止未经授权的外部调用。

xinyu_Jina的博客 1374
上一篇: 封装格式 -- FLV
下一篇: 流媒体网络协议 -- DASH
Ritchie_Lin
博客等级 码龄7年 11粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值