aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn
diff options
context:
space:
mode:
authorNEWCIH <newcih@foxmail.com>2022-01-19 01:38:32 +0800
committerGitHub <noreply@github.com>2022-01-19 01:38:32 +0800
commit7f32c023ab113bae4b321a0ffcbb2f67946eecf7 (patch)
tree60cd762bd03a56515435632d62f347d15cdc1a1d /files/zh-cn
parent167bc67cbe3c274ba922780af240f59974c56aca (diff)
downloadtranslated-content-7f32c023ab113bae4b321a0ffcbb2f67946eecf7.tar.gz
translated-content-7f32c023ab113bae4b321a0ffcbb2f67946eecf7.tar.bz2
translated-content-7f32c023ab113bae4b321a0ffcbb2f67946eecf7.zip
translate live_streaming_web_audio_and_video (#3708)
Diffstat (limited to 'files/zh-cn')
-rw-r--r--files/zh-cn/web/guide/audio_and_video_delivery/live_streaming_web_audio_and_video/index.md190
1 files changed, 190 insertions, 0 deletions
diff --git a/files/zh-cn/web/guide/audio_and_video_delivery/live_streaming_web_audio_and_video/index.md b/files/zh-cn/web/guide/audio_and_video_delivery/live_streaming_web_audio_and_video/index.md
new file mode 100644
index 0000000000..c3a86ed21c
--- /dev/null
+++ b/files/zh-cn/web/guide/audio_and_video_delivery/live_streaming_web_audio_and_video/index.md
@@ -0,0 +1,190 @@
+---
+title: 实时传输Web音频与视频
+slug: Web/Guide/Audio_and_video_delivery/Live_streaming_web_audio_and_video
+tags:
+ - 指引
+ - 自适应流
+---
+实时流技术经常应用在一些现场输出的转播活动,类似体育活动、演唱会和更平常的电视播放及广播节目。这通常称为流媒体,实时流就是将媒体“实时”传输到计算机和设备的过程。这是一个包含多个元素的、非常复杂且较为新生的主题,所以我们会通过这篇文章,向你介绍它并让你知道如何开始。
+
+将媒体传输到浏览器的关键考虑因素是,我们不是在播放一个大小明确的文件,而是在转播一个即时创建的文件,并且它没有预先确定的开始或结束位置。
+
+## 流媒体与静态媒体的主要区别
+
+在这里,无论是mp3还是WebM文件,我们都称之为静态媒体。这些文件存放在服务端,可以像其他文件那样传输到浏览器端。这通常被称为渐进式下载。
+
+跟静态媒体文件比起来,实时流媒体没有有限的开始和结束时间,它通常是一种自适应的、从服务端向下传输到浏览器端的数据流(见下文)。通常我们需要不同格式和特定的服务端软件来实现这个。
+
+## 自适应流
+
+实时流最优先考虑的事项之一就是让播放器保持与流同步:自适应流是一种可以在低带宽下执行此操作的技术。这种方法就是通过监控数据传输速率,如果速率慢,跟不上,我们就降低到低带宽(因此质量较低)的数据流。为了拥有这种能力,我们需要使用能实现该功能的数据格式。实时流格式通常是把流分割成许多不同质量和比特率的小片段,以此来实现自适应流的特性。
+
+## 流式音频与视频的点播
+
+流式技术不只是用于直播。它也能用来替换传统的渐进式下载点播音频和视频:
+
+优点如下:
+
+- 延迟通常较低,所以媒体可以快速播放
+- 自适应流可以在不同设备上获得更好的体验
+- 媒体实时下载,提高带宽效率
+
+## 流式协议
+
+静态媒体通常是使用HTTP协议传输,但是自适应流媒体却有很多种协议,让我们看一下这些选择。
+
+### HTTP
+
+目前来说,HTTP是媒体点播或直播最常使用的协议。
+
+### RTMP
+
+实时消息协议(RTMP)是由Macromedia(即现在的Adobe)公司研发的专有协议,并且它支持Adobe Flash插件。RTMP共有RTMPE(加密的)、RTMPS(基于SSL/TLS的安全协议)和RTMPT(封装成HTTP请求)这几种形式
+
+### RTSP
+
+> **注:** 实时流协议(RTSP)控制媒体在两端传输的会话,且同时使用实时传输协议(RTP)和实时控制协议(RTCP)来传输媒体流。将RTP与RTCP结合使用可以实现自适应流。目前大部分浏览器还无法原生支持,但请留意 [Firefox OS 1.3 支持RTSP](https://www.mozilla.org/en-US/firefox/os/notes/1.3/)。
+
+> 某些厂商实现了专有的传输协议,类似RealNetworks以及他们的真实数据传输(RDT)。
+
+### RTSP 2.0
+
+RTSP 2.0 目前处于开发阶段,并且无法向后兼容RSTP 1.0。
+
+> **警告:** 虽然 {{ htmlelement("audio") }} 与 {{ htmlelement("video") }} 标签与协议无关,但是目前没有浏览器可以在无插件的情况下支持除了HTTP外的协议,尽管这种局面可能会有所转变,但除了HTTP以外的协议可能会被防火墙或代理服务器拦截。
+
+## 使用流式协议
+
+如果你习惯于通过HTTP传输媒体,那么使用其它的协议也会让你感到熟悉。
+
+举个例子:
+
+```html
+<video src="rtsp://myhost.com/mymedia.format">
+ <!-- Fallback here -->
+</video>
+```
+
+## 媒体源扩展 (MSE)
+
+[Media Source Extensions](https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html) 是一个W3C的工作草案,计划用来扩展 {{ domxref("HTMLMediaElement") }} 使其支持使用JavaScript来生成用于播放的媒体流。使用JavaScript来生成流对于自适应流和时移实时流来说非常好用。
+
+比如,[在卸载MSE解码器后,你可以通过JavaScript实现MPEG-DASH](https://web.archive.org/web/20170504035455/https://msopentech.com/blog/2014/01/03/streaming_video_player/).
+
+> **注:** 时移是在直播流发生后使用实时流的过程。
+
+## 视频流文件格式
+
+一些基于HTTP的实时流视频格式开始得到跨浏览器支持。
+
+> **注:** 你可以通过 [设置自适应流媒体源](/zh-CN/docs/Web/Guide/Audio_and_video_delivery/Setting_up_adaptive_streaming_media_sources) 找到在web中使用的HLS和MPEG-DASH的编码指南。
+
+### MPEG-DASH
+
+DASH意即基于HTTP的动态自适应流,最近已经被Chrome、以及运行在Window 8.1的IE 11浏览器所支持。它依赖于媒体源扩展(MSE),这些扩展被[DASH.js](https://github.com/Dash-Industry-Forum/dash.js/)之类的JavaScript库所使用。这种方式允许我们通过XHR下载视频流的数据块,并且将它“添加”到 {{ htmlelement("video") }}元素正在播放的流中。正因如此,如果我们检测到网络缓慢,我们可以从下一段开始请求低质量(较小)的数据块。这种技术也允许添加广告片段到流中。
+
+> **注:** 你也可以 [将MPEG-DASH自适应流式系统与WebM一起使用](http://wiki.webmproject.org/adaptive-streaming/webm-dash-specification).
+
+### HLS
+
+HLS(HTTP Live Streaming)是由苹果公司研发的协议,支持在IOS、Safari及安卓上最新版本的浏览器/Chrome浏览器。HLS也是自适应的。
+
+HLS也能被JavaScript解码,这意味着我们能在最新版本的Firefox,Chrome和IE10+浏览器上使用。看这个 [HTTP Live Streaming JavaScript player](https://github.com/dailymotion/hls.js).
+
+在流式会话的开始阶段, [extended M3U (m3u8) playlist](https://en.wikipedia.org/wiki/M3U8#Extended_M3U_directives) 已经下载完成。它包含了所提供的各个子流的元数据。
+
+### 流式文件格式支持
+
+| Browser | DASH | HLS | Opus (Audio) |
+| ------------------------ | ----- | ----- | ------------ |
+| Firefox 32 | ✓ [1] | ✓ [2] | ✓ 14+ |
+| Safari 6+ | | ✓ | |
+| Chrome 24+ | ✓ [1] | ✓ | |
+| Opera 20+ | ✓ [1] | | |
+| Internet Explorer 10+ | ✓ 11 | ✓ [2] | |
+| Firefox Mobile | ✓ | ✓ | ✓ |
+| Safari iOS6+ | | ✓ | |
+| Chrome Mobile | ✓ | ✓ [2] | |
+| Opera Mobile | ✓ [1] | ✓ | |
+| Internet Explorer Mobile | ✓ 11 | ✓ [2] | |
+| Android | ✓ | | |
+
+\[1] 使用JavaScript与MSE
+
+\[2] 使用JavaScript与跨域代理
+
+### 视频备选方案
+
+DASH与HLS可以在很大一部分主流浏览器上获得支持,但我们仍需要备选方案来支持其余的浏览器。
+
+一个流行的方案是通过Flash播放器来支持RTMP。当然,这就有个问题,我们需要编码三个不同的格式。
+
+## 音频流文件格式
+
+目前也有一些音频格式开始在不同浏览器上获得支持。
+
+### Opus
+
+Opus 是一个无版权的开放格式,针对不同类型文件使用不同的比特率来优化音频质量。音乐或演讲会可以通过不同方式来优化,Opus就借助了SILK和CELT来实现。
+
+目前,Opus被桌面端和移动端的Firefox以及桌面端的Chrome和Opera浏览器所支持。
+
+> **注:对于浏览器端实现WebRTC功能来说,** [Opus 是必须要用到的格式](https://datatracker.ietf.org/doc/html/draft-ietf-rtcweb-audio-05)。
+
+### MP3, AAC, Ogg Vorbis
+
+大部分通用的音频格式能够通过特殊的服务端技术进行传输。
+
+注:相对于视频来说,音频没有键帧,可能更容易通过非流式格式来传输。
+
+## 服务端流式技术
+
+为了实时传输音频和视频,你需要在你的服务器上运行特定的流式软件,或者使用第三方服务。
+
+### GStreamer
+
+[GStreamer](https://gstreamer.freedesktop.org/) 是一个开源的跨平台的多媒体框架,它可以让你创建各种媒体处理组件,包括流式组件。GStreamer通过它的插件系统,支持了一百多种编码 (包括 MPEG-1, MPEG-2, MPEG-4, H.261, H.263, H.264, RealVideo, MP3, WMV, 和 FLV。)
+
+GStreamer 的插件如 [souphttpclientsink](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-plugin-soup.html) 和 [shout2send](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/gst-plugins-good-plugins-shout2send.html) 通过HTTP来传输媒体。你也可以集成Python的Twisted框架或者使用一些类似 [Flumotion](http://www.flumotion.net/features/) (open source streaming software)的东西。
+
+至于传输RTMP,你可以使用 [Nginx RTMP Module](https://github.com/arut/nginx-rtmp-module)。
+
+### SHOUTcast
+
+[SHOUTcast](https://en.wikipedia.org/wiki/SHOUTcast) 是一种跨平台的,针对流式媒体的专有技术。它由Nullsoft开发,可以播放MP3或AAC格式的数字音频内容。对于Web端使用,SHOUTcast通过HTTP传输流。
+
+> **注:** [SHOUTcast 的URL可能需要加上分号](https://stackoverflow.com/questions/2743279/how-could-i-play-a-shoutcast-icecast-stream-using-html5).
+
+### Icecast
+
+[Icecast](https://www.icecast.org/) 服务是一种针对流式媒体的开源技术。它由 [Xiph.org Foundation](https://www.xiph.org/) 进行维护,通过SHOUTcast协议来传输Ogg Vorbis/Theora以及MP3和AAC格式。
+
+> **注:** SHOUTcast 和 Icecast 是最流行的已确立的技术之一,但也有 [更多流媒体系统可用](https://en.wikipedia.org/wiki/List_of_streaming_media_systems#Servers).
+
+### 流式服务
+
+虽然你可以安装类似GStreamer,SHOUTcast和lcecast的软件,但也可以从 [第三方流式服务](https://en.wikipedia.org/wiki/Comparison_of_streaming_media_systems) 中找到大量的服务帮助你完成工作。
+
+## 参见
+
+- [HTTP 实时流式传输](https://en.wikipedia.org/wiki/HTTP_Live_Streaming)
+- [HLS 浏览器支持](https://www.jwplayer.com/html5/hls/)
+- [基于HTTP Live Streaming的JavaScript播放器](https://github.com/RReverser/mpegts)
+- [HTTP Live Streaming的基础知识](https://larryjordan.com/articles/basics-of-http-live-streaming/)
+- [用于HTML 5视频的DASH自适应流](/en-US/docs/Web/Media/DASH_Adaptive_Streaming_for_HTML_5_Video)
+- [HTTP上的动态自适应流式传输 (MPEG-DASH)](https://en.wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP)
+- [MPEG-DASH媒体源演示](https://dash-mse-test.appspot.com/media.html)
+- [DASH 参考客户端](https://dashif.org/reference/players/javascript/1.0.0/index.html)
+- [HTTP上的动态流式传输](https://en.wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP)
+- [MPEG-DASH的部署状态](https://www.streamingmediaglobal.com/Articles/Editorial/Featured-Articles/The-State-of-MPEG-DASH-Deployment-96144.aspx)
+- [看,无需插件:使用媒体源扩展和MPEG-DASH实时流式传输到浏览器](https://www.bbc.co.uk/rd/blog/2014/03/media-source-extensions)
+- [媒体源扩展(W3C)](https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html)
+- [Icecast](https://en.wikipedia.org/wiki/Icecast)
+- [SHOUTcast](https://en.wikipedia.org/wiki/Shoutcast)
+- [GStreamer](https://en.wikipedia.org/wiki/GStreamer)
+- [通过HTTP流式传输GStreamer管道](https://coaxion.net/blog/2013/10/streaming-gstreamer-pipelines-via-http/)
+- [在web上使用GStreamer传输媒体](http://www.svesoftware.com/passkeeper/cms/article/streaming-media-using-gstreamer-web/)
+- [GStreamer和树莓派](https://nginx-rtmp.blogspot.it/2013/07/gstreamer-and-raspberry-pi.html)
+- [接受媒体源扩展(MSE)作为W3C候选推荐将加速dash.js的使用](http://msopentech.com/blog/2014/01/09/acceptance-media-source-extensions-w3c-candidate-recommendation-will-accelerate-adoption-dash-js/)
+- [流媒体系统对比](https://en.wikipedia.org/wiki/Comparison_of_streaming_media_systems)
+- [Mozilla Hacks - 使用媒体源扩展(MSE)传输媒体](https://hacks.mozilla.org/2015/07/streaming-media-on-demand-with-media-source-extensions/)