vod格式文件用什么播放器(什么播放器可以播放所有格式)

橘子网 283

M3U8背景介绍

M3U8,用 UTF-8 编码。"M3U" 和 "M3U8" 文件都是苹果公司使用的 HTTP Live Streaming(HLS) 协议格式的基础;是 Unicode 版本的 M3U。

M3U8文件是M3U文件的一种,只不过它的编码格式是UTF-8。M3U使用Latin-1字符集编码。M3U的全称是Moving Picture Experts Group Audio Layer 3 Uniform Resource Locator,即mp3 URL。M3U是纯文本文件;

所以UTF-8编码的M3U文件也简称为 M3U8;

HLS 是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。M3U8只是它具体的表现形式,下面我们都称为HLS格式。

HLS 的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的 extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。

HLS 只请求基本的 HTTP 报文,与实时传输协议(RTP)不同,HLS 可以穿过任何允许 HTTP 数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。这是HLS应用在直播上的一大优势。

如果在直播中使用HLS技术,那么执行流程如下:图片来源于苹果官网;

我们播放一个HLS,首先要对HLS流对应的M3U8文件进行解析,解析M3U8文件,首先要搞清楚M3U8的封装格式。

音视频开发资料包:音视频流媒体高级开发FFmpegWebRTCRTMPRTSPHLSRTP播放器

M3U8格式解析

HLS流可以用于直播,也可以用于点播;这点很重要,开头的那张图千万别让你误会,M3U8是可以用作点播的。

M3U8 文件实质是一个播放列表(playlist),其可能是一个媒体播放列表(Media Playlist),或者是一个主列表(Master Playlist)。

1.M3U8类型

当 M3U8 文件作为媒体播放列表(Media Playlist)时,其内部信息记录的是一系列媒体片段资源,顺序播放该片段资源,即可完整展示多媒体资源。其格式如下所示:

EXTM3UEXT-X-TARGETDURATION:10EXTINF:9.009,http://media.example.com/first.tsEXTINF:9.009,http://media.example.com/second.tsEXTINF:3.003,http://media.example.com/third.tsEXT-X-ENDLIST

当 M3U8 作为主播放列表(Master Playlist)时,其内部提供的是同一份媒体资源的多份流列表资源。其格式如下所示:

EXTM3UEXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"http://example.com/low/index.m3u8EXT-X-STREAM-INF:BANDWIDTH=240000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"http://example.com/lo_mid/index.m3u8EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"http://example.com/hi_mid/index.m3u8EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"http://example.com/high/index.m3u8EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"http://example.com/audio/index.m3u8EXT-X-ENDLIST

2.M3U8基本字段

EXTM3UM3U8文件头,必须放在第一行;EXT-X-MEDIA-SEQUENCE第一个TS分片的序列号,一般情况下是0,但是在直播场景下,这个序列号标识直播段的起始位置;EXT-X-MEDIA-SEQUENCE:0EXT-X-TARGETDURATION 每个分片TS的最大的时长;EXT-X-TARGETDURATION:10每个分片的最大时长是10sEXT-X-ALLOW-CACHE 是否允许cache;EXT-X-ALLOW-CACHE:YESEXT-X-ALLOW-CACHE:NO 默认情况下是YESEXT-X-ENDLIST M3U8文件结束符;EXTINF extra info,分片TS的信息,如时长,带宽等;一般情况下是EXTINF:,[] 后面可以跟着其他的信息,逗号之前是当前分片的ts时长,分片时长 移动要小于<span id="d011f1be-6103-4132-b9bc-c25d566099f5">E</span>XT-X-TARGETDURATION 定义的值;<span id="bda2cccb-dad4-4ad3-90cb-a0e6fc9df480">E</span>XT-X-VERSION M3U8版本号<span id="6caf307b-d3a1-402b-b30a-cdb271cc3273">E</span>XT-X-DISCONTINUITY 该标签表明其前一个切片与下一个切片之间存在中断。下面会详解<span id="0eab6b9d-640e-4aa4-88e7-7fba4fedd703">E</span>XT-X-PLAYLIST-TYPE 表明流媒体类型;<span id="00325c89-4d74-4547-afc7-0d4254d3fe75">E</span>XT-X-KEY 是否加密解析,<span id="5275a2c9-3798-44ff-9a82-ce23ff0571a9">E</span>XT-X-KEY:METHOD=AES-<span id="29ab6c42-5f3c-4280-9162-bb84bfe7891f">128</span>,URI=<span id="95302ea8-2410-4c94-85d6-5f3333eb6696">"https://priv.example.com/key.php?r=52"</span>加密方式是AES-<span id="7d76216d-f2dd-44b0-b5ad-b80d7a5f824c">128</span>,秘钥需要请求 https://priv.example.com/key.php?r=<span id="d7fdff21-0a52-4275-808d-83a89eca2207">52</span>,请求回来存储在本地;</code></pre><p id="40637eb4-b91b-44d4-8984-56de6a2bcb79"><em id="e73b741b-eff8-4706-8b13-ab7886ff6aea"><span id="48407850-9473-4fe9-b1fe-4a95b9b79675">3.如何判断M3U8是否直播</span></em></p><ul id="fcff465b-99d9-4fb0-9f20-15077629404b"><li id="b2076077-f85f-4085-99a1-d9fe1b10343d"><span id="8526ad97-dbf8-46b3-8f40-82bad8a2fd1e">1.判断是否存在 EXT-X-ENDLIST</span></li></ul><p id="77ac782e-82ba-4dcb-84b2-ebb10ae2c928"><span id="dc53353e-6198-4955-bced-48cfb7de6fdf">对于一个M3U8文件,如果结尾不存在 EXT-X-ENDLIST,那么一定是 直播,不是点播;</span></p><ul id="55cdbb65-fc78-4709-ac55-78bddeccd8e7"><li id="15885812-6911-4cbf-afc5-b7f2b2a5716c"><span id="0f1e1555-5205-42c1-a09c-339db49373f1">2.判断 EXT-X-PLAYLIST-TYPE 类型</span></li></ul><p id="efa865f0-dde4-41e6-85f2-06f6be94a6a1"><span id="f0aab47e-c697-4088-b883-0384223d6e7f">EXT-X-PLAYLIST-TYPE 有两种类型,</span></p><p id="cc430be1-67ff-4e33-8f58-0965d609f87a"><span id="31eb330a-6ea2-4c56-8cbb-18be0f3d9114">VOD 即 Video on Demand,表示该视频流为点播源,因此服务器不能更改该 M3U8 文件;</span></p><p id="4e1fcc12-87ac-4e30-8fc1-12993a356593"><span id="a6586bdc-7cb5-4f7c-b357-8ece08b7dd73">EVENT 表示该视频流为直播源,因此服务器不能更改或删除该文件任意部分内容(但是可以在文件末尾添加新内容)(注:VOD 文件通常带有 EXT-X-ENDLIST 标签,因为其为点播片源,不会改变;而 EVEVT 文件初始化时一般不会有 EXT-X-ENDLIST 标签,暗示有新的文件会添加到播放列表末尾,因此也需要客户端定时获取该 M3U8 文件,以获取新的媒体片段资源,直到访问到 EXT-X-ENDLIST 标签才停止)。</span></p><p id="484b4d5a-5ea6-4fa5-9bf7-d9e3cff122bd"><em id="ac451c8c-16e6-4e22-9c54-98c9041fbd66"><span id="86bd81cc-2758-4330-812a-058ffa068039">4.M3U8多码率</span></em></p><p id="bc4ca715-23b3-48bd-90f8-7430fc9f22cd"><span id="0b43810b-f549-494f-be7c-723cb3e4ad76">上面的Master Playlist 就是会提供 多码率的列表资源,如下:</span></p><pre id="d67c0b0d-ef67-47a8-b3a7-e0cb1645d757"><code id="038cf59f-703a-4566-998e-7741d1ba54c1"><span id="63210297-aee7-4e8c-97ff-8dfee7ddaf31">EXTM3U</span><span id="d29cf222-7bb8-4495-a3c4-2b4cb8c40ff2">EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"</span>http:<span id="7ff3ad88-9b2d-4f0e-a438-2ae788762f65">//example.com/low/index.m3u8</span><span id="9176b61d-495d-4cb3-9cab-52743ca65a8d">EXT-X-STREAM-INF:BANDWIDTH=240000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"</span>http:<span id="65fb8356-5b5b-4117-842b-0a91d4388830">//example.com/lo_mid/index.m3u8</span><span id="aebcda5f-4af9-4394-8608-206bb181730e">EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"</span>http:<span id="681107d1-a551-4c77-a5a0-e04b39b90d71">//example.com/hi_mid/index.m3u8</span><span id="c6561330-69bf-4bbc-992c-65eb19fab6d4">EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"</span>http:<span id="e6c0edcc-162e-46ea-939b-0d4b6c0969e6">//example.com/high/index.m3u8</span><span id="e2c0450f-fbc0-486c-b62d-fee10d4bedc0">EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"</span>http:<span id="d3115a95-d908-40c0-b8d2-45ba11ace393">//example.com/audio/index.m3u8</span><span id="c58b7af5-833d-4378-9910-b30d6c5946d8">EXT-X-ENDLIST</span></code></pre><p id="00d7d69c-a6ad-47dc-9751-6e54e90ced8d"><span id="c8434dd3-0e21-444d-ae2d-6938dc4ec8d2">EXT-X-STREAM-INF 字段后面有:</span></p><p id="5efbcc33-b941-4d9f-957d-d5a1ed4bc0f5"><span id="27b8c1f4-a28f-490f-ae3d-ca588c575ce7">BANDWIDTH 指定码率</span></p><p id="6b2a67e2-79b1-4185-9d9b-186073fc7b10"><span id="8829e11f-8146-47a4-8f41-ed4ab73d0b3a">RESOLUTION 分辨率</span></p><p id="4dbb4c4f-86d7-428a-a775-19c58e918e17"><span id="d7c5165e-41dd-414f-a77b-169f52dada75">PROGRAM-ID 唯一ID</span></p><p id="97e6f29a-728e-48fb-97b1-031c6604e3e9"><span id="45665b6f-f5eb-4a95-b8e6-1bc10cf82e64">CODECS 指定流的编码类型</span></p><p id="9a80ef63-b668-4e43-9899-ceaf70b050c5"><span id="ee783320-d14c-48a1-884c-7d90a22ebb88">码率、码流是同一个概念,是数据传输时单位时间传送的数据量,一般用单位kbps表示。</span></p><p id="040b81d5-71bf-4542-9140-af0d2bc9fb75"><span id="8e9985fa-258d-42e3-bb6a-09ba3fa02761">视频码率就是指视频文件在单位时间内使用的数据量。简单理解就是要播放一秒的视频需要多少数据,从这个角度就不难理解通常码率越高视频质量也越好,相应的文件体积也会越大。码率、视频质量、文件体积是正相关的。但当码率超过一定数值后,对图像的质量影响就不大了。几乎所有的编码算法都在追求用最低的码率达到最少的失真(最好的清晰度)。</span></p><p id="3579a0a4-29c8-4166-8e8f-24c8b981e49d"><em id="8161fd36-4ff7-4d86-8804-137db8236112"><span id="e862919f-cbf6-4c45-9944-70bd7bbf4bd5">5.如何在M3U8中插入广告</span></em></p><p id="355bb998-bb87-48b8-b163-bbe9db7073c7"><span id="16c25c03-14bd-4a39-806c-56117de9d2c0">M3U8文件中插入广告,要想灵活的控制广告,则广告可以插入任何视频中,那么无法保证广告的编码格式和码率等信息和原视频的编码格式等信息保持一致,就必须告知播放器,在插入广告的地方,ts片段发生的信息变更,需要播放器适配处理。</span></p><p id="8a7ee0ba-13a7-48ec-8aca-d73e7b144e60"><span id="b893a24e-c2b6-4c97-8292-caf5b23baf5b">EXT-X-DISCONTINUITY 该标签表明其前一个切片与下一个切片之间存在中断。说明有不连续的视频出现,这个视频绝大多数情况下就是广告; EXT-X-DISCONTINUITY 这个字段就是来做这个事情的;</span></p><p id="fc7660c6-9a08-4b05-99d5-bbc477df963e"><span id="bfa7c3cf-ffc2-49f9-a525-60567411d1d9">下面展示一个插入广告的例子:</span></p><pre id="f69bcf21-df62-4f3b-8e80-788a7c2aa6c5"><code id="fc81fda7-3dd2-4d6e-9c86-dcaba3a42d4c"><span id="38525c0c-1d18-445d-90d6-464d4f518c42">EXTM3U</span><span id="4b154579-34d1-46c2-b517-7277a13f3702">EXT-X-TARGETDURATION</span><span id="06fff786-6c89-4b30-aec3-78f62761d621">:10</span><span id="74da6b29-eade-4ac2-92fc-eba6d44770b8">EXT-X-VERSION</span><span id="2f519aae-314e-4b12-825e-16f601d72942">:4</span><span id="dc7b9fab-8f8a-4c4b-81d5-30b37d28f5b5">EXT-X-MEDIA-SEQUENCE</span><span id="7b3ed69f-d9ec-490c-b750-b791976c8fb0">:0</span><span id="f8cc04d5-a0f8-4a98-b0d6-6a2aebb07054">EXTINF</span><span id="b9ef3a23-2ef0-46b0-81d2-b684788870d7">:10.0</span>,<span id="03dd93e8-fdbf-434e-a582-427821ef6051">movieA</span><span id="883e35dc-4788-4c1b-98bb-92bff7ae704a">.ts</span><span id="174faa3d-deab-47f1-be04-932c1de027f8">EXTINF</span><span id="d2f50726-ae76-4639-92f8-3ab86a308097">:10.0</span>,<span id="0c0afe8c-e477-4e03-ad92-b3a9f6b65701">movieB</span><span id="5e6c132c-d402-4abc-a724-130a7321d42a">.ts</span>...<span id="181f804d-d887-499b-a401-e913d38575ef">EXT-X-ENDLIST</span></code></pre><p id="345a648f-b109-47d0-b8f2-39ad637a8ae7"><span id="9f833fc3-4fdd-479e-9ebc-fbc9658823d4">想在开头插入广告:</span></p><pre id="51d88115-5809-42d7-8e0b-ca99a2179fb4"><code id="37ac8454-a8d5-4668-8bac-520ccf415203"><span id="92a7ac13-3086-442b-9388-2858c5c23d0e">EXTM3U</span><span id="24f278d5-7445-4d0c-9c77-8c4b921eb5b0">EXT-X-TARGETDURATION</span><span id="edec2be5-9337-47d4-86c6-f3fee5bf8dd2">:10</span><span id="dcc79153-cff9-4c98-aa0c-faaff4b594d9">EXT-X-VERSION</span><span id="385346c7-d58d-41f9-b328-d789cab85960">:4</span><span id="d7b1040f-76dd-4d9a-a8e7-31f28d1db51c">EXT-X-MEDIA-SEQUENCE</span><span id="83b3ead3-7ed5-4fb0-bd1a-fceb85889250">:0</span><span id="e2424b1e-fb2b-4cbe-8280-257535f1440c">EXTINF</span><span id="14b5e83f-a5d8-4c91-94c2-c19df3611cda">:10.0</span>,<span id="a90ba152-797c-416f-93f2-0e6cf7d572e5">ad0</span><span id="b9fd4c2a-2bc6-4b54-9c9e-983beeffc145">.ts</span><span id="b7fa8e5a-eb25-4582-a805-661b34605dff">EXTINF</span><span id="04e8dfcb-2ce5-424f-aea3-c6c41358b94e">:8.0</span>,<span id="87e14c3b-a64b-4715-9d4d-b1555bf4c7c4">ad1</span><span id="f2a38d09-f193-4b4d-8730-59cbf7f72487">.ts</span><span id="81ae0edb-66df-494d-8caa-7c08089b9a16">EXT-X-DISCONTINUITY</span><span id="75ac808b-0a39-4392-b6fe-9a75a4162ef2">EXTINF</span><span id="ee30bb47-f422-4080-bf3a-6dde32254a92">:10.0</span>,<span id="fcc289fc-6d86-4d2c-9a9b-2c24ad7d450f">movieA</span><span id="579dadd4-f5ff-4241-93f7-3d7c82d176d4">.ts</span><span id="03790c29-e3f8-4bd7-b980-07350c7c103c">EXTINF</span><span id="1b006603-0ca5-4e88-bd9d-1d827a1bd72d">:10.0</span>,<span id="61b2a1fd-ba4e-42e7-883a-180b0093fe2b">movieB</span><span id="c0f64a87-93a2-435a-b3f4-70acc93146fe">.ts</span>...<span id="0d5a8b37-8781-45ea-936e-c2f8ba6a3d3a">EXT-X-ENDLIST</span></code></pre><p id="a4735c26-5b77-4c12-a779-28101ee1279b"><span id="25d1207a-0815-4bdf-927b-526050c7687b">当然你可以在任意位置插入广告。</span></p><p id="3931df72-4103-4350-b047-8e3861b646dd"><span id="de9927d4-7aec-49f2-9959-824c7bb8b960"><span id="8aeac6f4-be39-4813-8cb3-08ad0c495acc">HLS协议草案:HLS协议中还有很多字段,但是有些字段其实就是协议,在实际应用中并不大;大家可以参考看看;https://tools.ietf.org/html/rfc8216</span></span></p><p id="1e6d61a2-44d2-4117-be7e-28c844950885"><strong id="0796df88-1e86-47d3-98ae-a4e7d6f3fff4"><span id="c6bc5009-7ea6-4b8e-bb3f-b45a0a36d876">M3U8实战</span></strong></p><p id="0f020c18-f7ba-45de-a2d0-6fbb46dc10ac"><span id="bf771a59-7841-4b5a-a42b-cfd98d883f6d">将一个mp4视频转化为m3u8视频:</span></p><pre id="ed042116-2095-4418-ab25-ded2ddba9ae7"><code id="d5b6f136-2e28-4548-908f-0fe8f2b324af"><span id="70fd8b29-31d6-46d3-a1cc-93c58a65517e">ffmpeg</span><span id="a2c803b0-bd80-4c3c-b11a-b22e4b00b607">-re</span><span id="f86b714d-8796-46c8-93dd-81ff6500c38d">-i</span><span id="a001569f-95f3-4d7e-961a-a364e2425738">test</span><span id="466b2a8c-e608-489c-a2fc-5cf50ed816c6">.mp4</span><span id="d6794216-0da5-4d9d-bc60-4eefdb5a9a71">-c</span><span id="1077ee96-6988-4772-8db9-d7f4b46d889f">copy</span><span id="af0593c3-3fec-43b6-afbd-9f8cf6b619b1">-f</span><span id="676b5573-f908-439b-9998-5f1e9ab42437">hls</span><span id="24b1b7a5-8793-4c1e-9379-17fac7257a39">-bsf</span><span id="84431f4d-340a-4886-bb88-9ce8695905fa">:v</span><span id="60f7cff3-eeca-4e7c-bae9-da8eea1d1295">h264_mp4toannexb</span><span id="e512ac5c-90bc-4826-a0b1-2c8c5789ba62">test</span><span id="75a2d6fb-e249-4bd2-ae4a-974e795a1818">.m3u8</span></code></pre><div id="1598eba1-c976-4f00-a027-c2d534003eac"></div><p id="7780685c-80f7-4f60-b6cf-d4d86ac11317"><span id="cad02149-3b16-442b-8294-b2bedee6c845">生成了一个m3u8和很多ts分片:</span></p><div id="b04469bf-194e-4dba-9e69-d3634f26cac7"></div><p id="793a706d-4dfe-4a9f-8746-97f8e0852a22"><span id="b3bc4c99-70c2-4c08-b807-d2a7b8ad2052">但是生成的test.m3u8发现了问题,如下,才有5个分片。这是因为ffmpeg 默认的list size 为5,所以只获得最后的5个片段。</span></p><div id="eb3b6640-4397-448e-999a-ba5421b295fa"></div><p id="fbbb721f-2c06-4c5f-8009-13d73f514683"><span id="f7e9c5a2-13d0-4831-a4bc-e9af21676f4c">要想解决这个问题,需要指定参数-hls_list_size 0,这样就能包含所有的片段。加上</span><em id="69996f1f-8fff-414b-9e08-c8c448f29dc3"><span id="3cd89692-0b14-474e-884d-3c02d845f351">-hls_list_size 0</span></em></p><pre id="0e221f79-5e62-4d87-a4c5-1a09e4b58a54"><code id="c55f9569-77a0-4bc0-9f56-70099007cb61"><span id="05f57a62-6eb4-479e-9530-befa2f1735e7">ffmpeg</span><span id="c281c5b5-6e19-439a-a89e-2821110e827c">-re</span><span id="71061261-118d-4819-a348-76a9eeede2ab">-i</span><span id="b2967cfb-f29a-4ef4-93bd-84136ccc4fd5">test</span><span id="b80e02a2-f1bf-4eb2-b1e4-87e1616a16ed">.mp4</span><span id="6b805030-8b36-411d-8c2a-d05b4f086dc0">-c</span><span id="3848d586-53fb-4304-9d9c-a457f02fa08e">copy</span><span id="5cf05d1e-4e8f-4690-ac7c-6b9e54bbb175">-f</span><span id="c9f385d5-0d2b-42fb-8dc5-dd9b196d10e2">hls</span><span id="6cf43f60-018f-442f-a6e0-8713c17de8e2">-hls_list_size</span>0<span id="6c53eb45-fa76-494b-bbbd-6f4172e2049c">-bsf</span><span id="a0944033-1863-44ea-8dee-a43c43dbf5a9">:v</span><span id="ecbcef2e-81db-4b7a-871e-d0e310e76c81">h264_mp4toannexb</span><span id="54bf2fe5-0114-4c55-b37b-878278cf51fa">test</span><span id="e76f0a8b-2537-4f85-8836-61ed99ed1b7d">.m3u8</span></code></pre><p id="e9a2b0a4-ee7b-4594-903e-280818f45168"><span id="c3a3f913-caee-4964-8837-82dba4271945">为什么还要加上参数-bsf:v h264_mp4toannexb ?</span></p><p id="965020f2-d466-43d9-98d8-5a1185fd3fb5"><span id="85b5a050-45a9-4391-a442-b3ed56076034">这个参数的作用是将MP4中的H.264数据转换成为H.264 AnnexB标准的编码,AnnexB标准的编码常见于实时传输流中。如果源文件为FLV、TS等可以作为直播传输流的视频,则不需要这个参数。</span></p><p id="8f982dcd-b8b7-419b-921b-c643ab727867"><em id="12fcd32c-b01d-4309-83a2-b4b17459aa73"><strong id="a75616e0-d855-434a-89a5-a1aad6856eca"><span id="e29b3d01-b4b0-4674-838c-fc337bd6f17f">这也非常强烈地说明了MP4不是流式文件,不能作为直播使用。</span></strong></em></p><p id="beaf19d7-50e1-4738-bcc6-5359cf0e0ce2"><strong id="53763aeb-cc9d-4986-a443-322c1519f6ef"><span id="488c0fd5-11f7-459a-9e03-f8bbebe4dff3">学习思考</span></strong></p><p id="848eec6e-05a2-4fc6-90ff-22b8397eb2c0"><strong id="6df57866-f949-439a-8d24-ee68b1451ae9"><span id="1aab7da5-6fac-4e72-aefd-cad9bba334fc">1.视频广告</span></strong></p><p id="a46668dd-651d-48f7-9917-4225dc961131"><span id="27226d03-cf5d-4569-a576-67f59172a3d9">目前M3U8视频占我们线上视频的比例是近60%,量非常大,我们可以在M3U8视频中任意位置插入一些广告,为探索商业化开辟新的路。</span></p><p id="686a46f5-415f-469a-8d59-956121bef7c2"><strong id="1abd904c-7093-460c-b48c-d72a33018fc3"><span id="a58c01e9-0c14-426f-877e-2e68aa81fe12">2.为什么M3U8中分片使用TS不用MP4</span></strong></p><p id="3b1430e9-cb2a-4902-a152-b7faf7b05682"><span id="b1a3a487-e084-4e38-85cd-3e89b0bd6c42">这是因为两个 TS 片段可以无缝拼接,播放器能连续播放,而 MP4 文件由于编码方式的原因,两段 MP4 不能无缝拼接,播放器连续播放两个 MP4 文件会出现破音和画面间断,影响用户体验。而且如果要在一段长达一小时的视频中跳转,如果使用单个 MP4 格式的视频文件,如果也用 HTTP 协议,那么需要代理服务器支持 HTTP range request 获取大文件中的一部分。这样的话,对于代理服务器的性能来说要求较高。而 HTTP Live Streaming 则只需要根据列表文件中的时间轴找出对应的 TS 片段下载即可,不需要 range request,对代理服务器的要求小很多。</span><strong id="aa2a76fa-c7ff-46cc-8407-fa22adb6e8b6"><span id="c1907259-2a56-4823-80f4-61460cef2b93">所有代理服务器都支持小文件的高效缓存。</span></strong></p></body></html>

上一篇:

下一篇:

相关阅读

分享