{"id":204666,"date":"2013-12-03T16:30:03","date_gmt":"2013-12-03T12:30:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=204666"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=204666","title":{"rendered":"<span class=\"post_title\">MPEG-DASH \u0432 nginx-rtmp-module: \u0436\u0438\u0432\u043e\u0435 \u0432\u0438\u0434\u0435\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0431\u0435\u0437 \u0444\u043b\u0435\u0448\u0430<\/span>"},"content":{"rendered":"<div class=\"content html_format\">\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 MPEG-DASH<\/h3>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/b43\/24a\/938\/b4324a938d32f84c4b1a7330442fe005.jpg\" align=\"right\"\/> MPEG-DASH \u2014 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0432\u0435\u0449\u0430\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0438\u0434\u0435\u043e-\u043f\u043e\u0442\u043e\u043a. \u0414\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 HTTP. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0434\u0435\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e HTTP-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0443\u043a\u0442\u0443\u0440\u0443, \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0441\u0435\u0442\u044c\u044e, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438\u0442\u0434.<\/p>\n<blockquote><p>DASH \u2014 Dynamic Adaptive Streaming over HTTP. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442 DASH ISO\/IEC 23009-1:2012 \u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0433\u0440\u0443\u043f\u043f\u043e\u0439 MPEG \u0432 2011 \u0433\u043e\u0434\u0443 <\/p><\/blockquote>\n<p>\u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f MPEG-DASH \u0432 \u0446\u0435\u043b\u043e\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 HLS (HTTP Live Streaming), \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Apple \u0438 \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0441 iOS \u0438 Android. \u041f\u043e\u0442\u043e\u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u0432\u0438\u0434\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u0430 (\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430), \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p>  <a name=\"habracut\"><\/a>\u0412 HLS \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 m3u8 (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 m3u), \u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u2014 \u0432 MPEG-TS (\u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 MPEG-2). \u0412 MPEG-DASH \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442 (\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442) \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 XML, \u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u043a\u0430\u043a \u0444\u043e\u0440\u043c\u0430\u0442 MPEG-TS, \u0442\u0430\u043a \u0438 <a href=\"http:\/\/en.wikipedia.org\/wiki\/ISO_base_media_file_format\">ISO BMFF<\/a> (\u043f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, mp4). \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 MPEG-TS \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 mp4.<\/p>\n<p>  \u0412 \u0447\u0435\u043c \u0436\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e MPEG-DASH? \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u044d\u0442\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0449\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u044f\u0436\u0435\u043b\u043e\u0433\u043e \u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u043d\u0430\u0434\u043e\u0435\u0432\u0448\u0435\u0433\u043e flash. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, MPEG-DASH \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u043c\u0438 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u043e\u0432 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/HbbTV\">HbbTV<\/a>.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0441\u0430\u043c\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438 \u043e\u043f\u0438\u0448\u0443, \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c live \u0432\u0435\u0449\u0430\u043d\u0438\u0435 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/github.com\/arut\/nginx-rtmp-module\">nginx-rtmp-module<\/a> \u0438 <a href=\"https:\/\/github.com\/Dash-Industry-Forum\/dash.js\">dash.js<\/a>.<\/p>\n<h3>\u041c\u0430\u043d\u0438\u0444\u0435\u0441\u0442<\/h3>\n<p>  \u041c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 MPEG-DASH \u2014 \u044d\u0442\u043e XML \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442. \u0415\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 ISO\/IEC 23009-1:2012. \u041c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442, \u043e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0438\u043e\u0434\u044b, \u0441\u0434\u0432\u0438\u0436\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u0414\u043b\u044f \u0436\u0438\u0432\u043e\u0433\u043e \u0432\u0435\u0449\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430 \u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u043a\u0430\u043d\u0430\u043b\u0430\u043c\u0438, \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0438\u0448\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439:<\/p>\n<ul>\n<li>\u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0432\u0438\u0434\u0435\u043e \u2014 \u0440\u0430\u0437\u043c\u0435\u0440\u044b, fps, \u043a\u043e\u0434\u0435\u043a, \u0448\u0438\u0440\u0438\u043d\u0430 \u043f\u043e\u0442\u043e\u043a\u0430<\/li>\n<li>\u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0430\u0443\u0434\u0438\u043e \u2014 \u0447\u0430\u0441\u0442\u043e\u0442\u0430, \u043a\u043e\u0434\u0435\u043a, \u0448\u0438\u0440\u0438\u043d\u0430 \u043f\u043e\u0442\u043e\u043a\u0430<\/li>\n<li>\u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b<\/li>\n<li>\u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u0442\u043e\u043a\u043e\u0432<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot;?&gt; &lt;MPD     type=&quot;dynamic&quot;     xmlns=&quot;urn:mpeg:dash:schema:mpd:2011&quot;     availabilityStartTime=&quot;2013-11-27T12:40:35+04:00&quot;     availabilityEndTime=&quot;2013-11-27T12:41:08+04:00&quot;     minimumUpdatePeriod=&quot;PT5S&quot;     minBufferTime=&quot;PT5S&quot;     timeShiftBufferDepth=&quot;PT0H0M0.00S&quot;     suggestedPresentationDelay=&quot;PT10S&quot;     profiles=&quot;urn:mpeg:dash:profile:isoff-live:2011&quot;&gt;   &lt;Period start=&quot;PT0S&quot; id=&quot;dash&quot;&gt;     &lt;AdaptationSet         segmentAlignment=&quot;true&quot;         maxWidth=&quot;768&quot;         maxHeight=&quot;576&quot;         maxFrameRate=&quot;24&quot;&gt;       &lt;Representation           id=&quot;video&quot;           mimeType=&quot;video\/mp4&quot;           codecs=&quot;avc1.42c028&quot;           width=&quot;768&quot;           height=&quot;576&quot;           frameRate=&quot;24&quot;           sar=&quot;1:1&quot;           startWithSAP=&quot;1&quot;           bandwidth=&quot;641000&quot;&gt;         &lt;SegmentTemplate             presentationTimeOffset=&quot;0&quot;             timescale=&quot;1000&quot;             media=&quot;mystream-$Time$.m4v&quot;             initialization=&quot;mystream-init.m4v&quot;&gt;           &lt;SegmentTimeline&gt;              &lt;S t=&quot;0&quot; d=&quot;5888&quot;\/&gt;              &lt;S t=&quot;5888&quot; d=&quot;6760&quot;\/&gt;              &lt;S t=&quot;12648&quot; d=&quot;6000&quot;\/&gt;              &lt;S t=&quot;18648&quot; d=&quot;8680&quot;\/&gt;              &lt;S t=&quot;27328&quot; d=&quot;6545&quot;\/&gt;           &lt;\/SegmentTimeline&gt;         &lt;\/SegmentTemplate&gt;       &lt;\/Representation&gt;     &lt;\/AdaptationSet&gt;     &lt;AdaptationSet         segmentAlignment=&quot;true&quot;&gt;       &lt;AudioChannelConfiguration           schemeIdUri=&quot;urn:mpeg:dash:23003:3:audio_channel_configuration:2011&quot;           value=&quot;1&quot;\/&gt;       &lt;Representation           id=&quot;audio&quot;           mimeType=&quot;audio\/mp4&quot;           codecs=&quot;mp4a.40.2&quot;           audioSamplingRate=&quot;48000&quot;           startWithSAP=&quot;1&quot;           bandwidth=&quot;125000&quot;&gt;         &lt;SegmentTemplate             presentationTimeOffset=&quot;0&quot;             timescale=&quot;1000&quot;             media=&quot;mystream-$Time$.m4a&quot;             initialization=&quot;mystream-init.m4a&quot;&gt;           &lt;SegmentTimeline&gt;              &lt;S t=&quot;0&quot; d=&quot;5888&quot;\/&gt;              &lt;S t=&quot;5888&quot; d=&quot;6760&quot;\/&gt;              &lt;S t=&quot;12648&quot; d=&quot;6000&quot;\/&gt;              &lt;S t=&quot;18648&quot; d=&quot;8680&quot;\/&gt;              &lt;S t=&quot;27328&quot; d=&quot;6545&quot;\/&gt;           &lt;\/SegmentTimeline&gt;         &lt;\/SegmentTemplate&gt;       &lt;\/Representation&gt;     &lt;\/AdaptationSet&gt;   &lt;\/Period&gt; &lt;\/MPD&gt; <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b<\/h3>\n<p>  \u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b MPEG-DASH \u0438\u043c\u0435\u044e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 mp4. \u041e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u0435 mp4, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f, \u044d\u0442\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 mp4. \u041e\u0431\u044b\u0447\u043d\u044b\u0439 mp4 \u0444\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u2014 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435. \u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0430\u0442\u043e\u043c\u0435 <code>moov<\/code>, \u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u2014 \u0432 \u0430\u0442\u043e\u043c\u0435 <code>mdat<\/code>. \u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0435\u043c\u043f\u043b\u0430 \u0443\u0437\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u0442\u0430\u0439\u043c\u0441\u0442\u0430\u043c\u043f, \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0440\u0430\u0437\u043c\u0435\u0440, \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u0430\u0439\u043b\u0430 \u0438\u0442\u0434. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 <code>moov<\/code> \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u043e\u0434\u0435\u043a\u0430\u0445 \u0438 \u0431\u043b\u043e\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u0434\u0435\u043a\u043e\u0432, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/3f4\/73a\/7b0\/3f473a7b0a9f827f40cc26e7eaa80b46.png\" \/><\/div>\n<p>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 mp4 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0438\u043d\u0430\u0447\u0435. \u0410\u0442\u043e\u043c <code>moov<\/code> \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0435\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0438\u0448\u044c \u043e\u0431\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0442\u043e\u043a\u0435 \u2014 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u0434\u0435\u043a\u043e\u0432, \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0432\u0438\u0434\u0435\u043e, \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u0443\u0434\u0438\u043e \u0438\u0442\u0434. \u041a\u0430\u0436\u0434\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0430\u0442\u043e\u043c\u043e\u0432 \u2014 <code>moof<\/code> \u0438 <code>mdat<\/code>. \u0410\u0442\u043e\u043c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 moof \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0435\u043c\u043f\u043b\u0430\u0445, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435. \u0424\u043e\u0440\u043c\u0430\u0442 moof \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 moov. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u0434\u0435\u043a\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u043d \u043a\u0430\u043a \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 mp4-\u0444\u0430\u0439\u043b.<\/p>\n<h3>MPEG-DASH \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/h3>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 1.0.8 \u0432 <a href=\"https:\/\/github.com\/arut\/nginx-rtmp-module\">nginx-rtmp-module<\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u0435\u0449\u0430\u043d\u0438\u044f \u0436\u0438\u0432\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0432 MPEG-DASH. \u041f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u044d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0432\u0435\u0449\u0430\u043d\u0438\u044e \u0432 HLS. \u0412 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f dash-\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0444\u0430\u0439\u043b \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u0435\u0449\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0443\u0434\u0430\u043b\u044f\u0442\u0441\u044f, \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f, \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 nginx \u0441 nginx-rtmp-module \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0432 <code>--add-module<\/code><\/p>\n<pre><code class=\"bash\">.\/configure --add-module=\/path\/to\/nginx-rtmp-module ... <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c MPEG-DASH<\/p>\n<pre><code class=\"nginx\">rtmp {     server {         listen 1935;          # \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f dash-\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430 \u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \/tmp\/dash         application myapp {             live on;             dash on;             dash_path \/tmp\/dash;         }     } }  ...  http {     server {         listen 8080;          # \u043e\u0442\u0434\u0430\u0447\u0430 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430 \u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432         location \/dash {             root \/tmp;             add_header Cache-Control no-cache;         }     } } <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0440\u0435\u0437 MPEG-DASH \u043f\u043e\u0442\u043e\u043a\u0430 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>mystream<\/code><\/p>\n<pre><code class=\"bash\"># \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b mystream-init.m4a mystream-init.m4v  # \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b # \u0444\u043e\u0440\u043c\u0430\u0442 \u0438\u043c\u0435\u043d\u0438: mystream-TIME.mp4X # \u0433\u0434\u0435 TIME-\u0442\u0430\u0439\u043c\u0441\u0442\u0430\u043c\u043f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0435\u043c\u043f\u043b\u0430 mystream-0.m4a mystream-0.m4v mystream-5888.m4a mystream-5888.m4v mystream-12648.m4a mystream-12648.m4v mystream-18648.m4a mystream-18648.m4v mystream-27328.m4a mystream-27328.m4v  # \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 (\u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442) mystream.mpd  # \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 mystream-raw.m4a mystream-raw.m4v <\/code><\/pre>\n<p>  <\/p>\n<h3>MPEG-DASH \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435<\/h3>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 MPEG-DASH \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u2014 \u044d\u0442\u043e \u043f\u043b\u0435\u0435\u0440 <a href=\"https:\/\/github.com\/Dash-Industry-Forum\/dash.js\">dash.js<\/a>, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 MPEG-DASH \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 <a href=\"http:\/\/dashif.org\/\">DASH Industry Forum<\/a>. \u041f\u043b\u0435\u0435\u0440 \u0442\u0440\u0435\u0443\u0435\u0442 \u043e\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 <a href=\"http:\/\/www.w3.org\/TR\/media-source\/\">Media Source Extensions<\/a>.<\/p>\n<p>  \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043b\u0435\u0435\u0440 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u043c \u0432\u0438\u0434\u0435\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u0441 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0436\u0438\u0432\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0443 \u043d\u0435\u0435\u0433\u043e \u0432\u0441\u0435 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0422\u0430\u043a, \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 live-\u0432\u0435\u0449\u0430\u043d\u0438\u0439 \u0432 Chrome \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043b\u0435\u0435\u0440. \u041c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043b\u0435\u0436\u0438\u0442 \u0432 \u0431\u0440\u0430\u043d\u0447\u0435 <code>live<\/code> <a href=\"https:\/\/github.com\/arut\/dash.js\/tree\/live\">\u043c\u043e\u0435\u0433\u043e \u0444\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a>. \u0410\u0432\u0442\u043e\u0440\u044b \u043f\u043b\u0435\u0435\u0440\u0430 \u043e\u0431\u0435\u0449\u0430\u043b\u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u0436\u0438\u0432\u044b\u043c\u0438 \u0432\u0435\u0449\u0430\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>  \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c dash.js \u0438\u0437 \u0444\u043e\u0440\u043a\u0430<\/p>\n<pre><code class=\"bash\"># \u0441\u043a\u0430\u0447\u0430\u0435\u043c dash.js \u0432 \/var\/www cd \/var\/www git clone https:\/\/github.com\/arut\/dash.js.git cd dash.js git checkout live <\/code><\/pre>\n<p>  \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 baseline.html \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0443\u0440\u043b\u043e\u043c<\/p>\n<pre><code class=\"bash\">url = &quot;http:\/\/dash.edgesuite.net\/envivio\/dashpr\/clear\/Manifest.mpd&quot;, <\/code><\/pre>\n<p>  \u0417\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430 \u043d\u0430\u0448 \u0443\u0440\u043b<\/p>\n<pre><code class=\"bash\">url = &quot;http:\/\/localhost:8080\/dash\/mystream.mpd&quot;. <\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043b\u043e\u043a\u0435\u0439\u0448\u0435\u043d \u0432 nginx \u0434\u043b\u044f \u043e\u0442\u0434\u0430\u0447\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u0438\u0433\u043e dash.js, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443<\/p>\n<pre><code class=\"nginx\">location \/dash.js {     root \/var\/www; } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0432\u0435\u0449\u0430\u043d\u0438\u0435 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c mystream<\/p>\n<pre><code class=\"bash\">ffmpeg -re -i ~\/Videos\/sintel.mp4 -c:v libx264 -profile:v baseline -c:a libfaac -ar 44100 -ac 2 -f flv rtmp:\/\/localhost\/myapp\/mystream <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <code>http:\/\/localhost:8080\/dash.js\/baseline.html<\/code>. \u0417\u0434\u0435\u0441\u044c, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0432\u0435\u0449\u0430\u043d\u0438\u044f \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/e95\/e0f\/bec\/e95e0fbec87df4baee9c2d29f8405744.jpg\" \/><\/div>\n<p>  <\/p>\n<h3>\u0411\u0440\u0430\u0443\u0437\u0435\u0440\u044b<\/h3>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b MPEG-DASH \u0447\u0435\u0440\u0435\u0437 dash.js \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c <a href=\"http:\/\/www.w3.org\/TR\/media-source\/\">Media Source Extensions API<\/a>. \u0421\u0438\u0442\u0430\u0443\u0446\u0438\u044f \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u044d\u0442\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442\u0441\u044f, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0435\u0449\u0435 \u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430.<\/p>\n<ul>\n<li>Chrome (\u0432 \u0442.\u0447. \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Android 4.2) \u2014 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438<\/li>\n<li>IE \u2014 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 11 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 <a href=\"http:\/\/msdn.microsoft.com\/ru-ru\/library\/ie\/bg182646(v=vs.85).aspx\">Windows 8<\/a><\/li>\n<li>Firefox \u2014 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043e\u0431\u0435\u0449\u0430\u044e\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 Media Source Extensions \u0432 <a href=\"https:\/\/wiki.mozilla.org\/Platform\/MediaSourceExtensions\">\u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435 \u043c\u0435\u0441\u044f\u0446\u044b<\/a><\/li>\n<li>Safari \u2014 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041e\u0434\u043d\u0430\u043a\u043e, Safari \u2014 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 HLS.<\/li>\n<\/ul>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/204666\/\"> http:\/\/habrahabr.ru\/post\/204666\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 MPEG-DASH<\/h3>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/b43\/24a\/938\/b4324a938d32f84c4b1a7330442fe005.jpg\" align=\"right\"\/> MPEG-DASH \u2014 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0432\u0435\u0449\u0430\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0438\u0434\u0435\u043e-\u043f\u043e\u0442\u043e\u043a. \u0414\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 HTTP. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0434\u0435\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e HTTP-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0443\u043a\u0442\u0443\u0440\u0443, \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0441\u0435\u0442\u044c\u044e, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438\u0442\u0434.<\/p>\n<blockquote><p>DASH \u2014 Dynamic Adaptive Streaming over HTTP. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442 DASH ISO\/IEC 23009-1:2012 \u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0433\u0440\u0443\u043f\u043f\u043e\u0439 MPEG \u0432 2011 \u0433\u043e\u0434\u0443 <\/p><\/blockquote>\n<p>\u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f MPEG-DASH \u0432 \u0446\u0435\u043b\u043e\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 HLS (HTTP Live Streaming), \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Apple \u0438 \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0441 iOS \u0438 Android. \u041f\u043e\u0442\u043e\u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u0432\u0438\u0434\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u0430 (\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430), \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-204666","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/204666","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=204666"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/204666\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=204666"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=204666"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=204666"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}