来自 HTML 页面内部的流媒体,通过示例

sme*_*eeb 12 vlc-media-player streaming video-streaming rtsp

所以我是一名软件工程师,试图了解有关流媒体如何工作的一些细节。我花了一天的大部分时间试图了解与我的应用程序相关的各种编解码器、容器格式和流协议。到目前为止,这是我对其工作原理的理解,这很可能会被误导:

  • 流媒体实际上归结为容器格式流协议
    • 所有音频数据都被编码(通过音频编解码器)成音频比特流
    • 所有视频数据都被编码(再次通过编解码器)到视频比特流中
    • 这两个流被合并(多路复用?)到一个容器中,最终成为一个文件(如 MP4 等)
    • 一个特殊的媒体服务器然后通过一些标准的流协议,如 RTSP 将这个容器(MP4 文件或其他格式)提供给客户端(可能是在某人的浏览器中运行的 HTML5 视频播放器)
      • 在浏览器客户端的情况下,我假设浏览器本身有一个 RTSP 客户端,然后它以某种方式呈现给用户 HTML5 视频播放器
  • 可以Web服务器(例如 nginx 或 httpd)托管 MP4 文件,但由于这些服务器不是 RTSP 服务器,因此只能将 MP4请求视为下载请求,因此无法流式传输媒体文件
    • 同样,如果我要使用curl从 nginx 服务器获取文件,由于curlnginx 和 nginx都不说 RTSP,它将被视为文件下载
  • 但是,当我从流媒体服务器(VideoLAN、Red5、Wowza 等)托管 MP4 文件,并且我使用 RTSP 客户端(或任何受支持的流媒体客户端)从该服务器请求流时,只有那么是否会发生 任何实际的流式传输
    • 因此,即使 YouTube 或 Vimeo“视频”托管在 HTTP 服务器通过 HTTP(S) 提供的 HTML 页面上,我也假设这些页面上的嵌入式视频播放器(视频实际播放的地方)实际上正在启动,随后连接到流媒体服务器,并且流媒体是通过 RTSP 或其他一些非 HTTP 协议进行的

所以这就是我的理解,我想我首先会问,如果我上面所说的任何内容不正确,请首先纠正我!假设我或多或少是正确的:

流媒体播放器在 HTML 页面内运行并由 HTML 服务器提供服务,如何与流媒体服务器(提供 RTSP 请求服务)建立流媒体(RTSP 等)连接?

Vom*_*yle 7

流媒体播放器在 HTML 页面内运行并由 HTML 服务器提供服务,如何与流媒体服务器(提供 RTSP 请求服务)建立流媒体(RTSP 等)连接?

常见应用

RTSP目前似乎更多地用于直接直播流(例如 IP 摄像机)或重新流(如引擎)的应用程序/设备接口,而不是通过 HTTP Web 播放接口从物理位置流式传输保存的媒体文件嵌入式播放器。

看起来RTSP是一个有状态的协议,它在流式传输时使用 UDP 多于 TCP,它更多地用作连接到 TCP/IP 网络的服务器设备(如 IP 摄像机),并通过 UDP 输出流等. 然后,您作为同一网络上的客户端连接到这些提要(服务器),您可以发出RTSP 请求以进行相应的利用。


协议指令

虽然在某些方面类似于 HTTP,但 RTSP 定义了用于控制多媒体播放的控制序列。HTTP 是 无状态的,而 RTSP 有状态;当需要跟踪并发会话时使用标识符。与 HTTP 一样,RTSP 使用 TCP 来维护端到端连接,虽然大多数 RTSP 控制消息是由客户端发送到服务器的,但有些命令是在另一个方向(即从服务器到客户端)传输的。

这里介绍的是基本的 RTSP 请求。一些典型的 HTTP 请求,如 OPTIONS 请求,也是可用的。TCP 和 UDP 的默认传输层端口号都是 554[3],后者很少用于控制请求。

来源


无国籍

无状态协议不要求服务器在多个请求期间保留有关每个通信伙伴的会话信息或状态。相反,需要在服务器上保持内部状态的协议称为有 状态协议。

无状态的一个缺点是可能需要在每个请求中包含额外的信息,而这些额外的信息需要由服务器解释。

来源


逻辑流程

我对这种形式的流媒体流程的理解是:

  • 媒体内容所在的服务器将对视频/音频数据内容进行封装、压缩、编码等,以适当的格式和片段进行流传输
  • 侦听连接以访问流媒体的 Web 服务器将提供流媒体所需的所有资源
  • 客户端请求和下载适用的资源和文件,然后通过配置的URL指针和其他参数以连续的方式组合它们进行播放。客户端级别的播放软件组合按顺序传输的数据包,以允许正确播放内容。

有关 HTTP 与 RTSP 的一般比较,请参阅下面的流技术部分。


此外

在下面的10 个你永远不应该托管自己的视频的原因部分中,我引用了有助于回答“一般”问题但不太具体的部分。

从本质上讲,它表示具有嵌入式媒体播放器控件的网站将:

  • (1)根据来自客户端的“连接和请求”检测客户端 Web 浏览器设置和
  • (2)这会将编解码器和任何其他客户端检测设置设置为适用的参数值,然后
  • (3)它将根据您的嵌入式媒体播放器配置中指向托管服务器上媒体文件 URL 的进一步代码,直接从您托管视频和音频文件的流媒体服务器流式传输视频

流媒体技术

客户端浏览器必须从服务器接收数据并将其传递给流应用程序进行处理。流应用程序将数据转换为图片和声音。此过程成功的一个重要因素是客户端接收数据的速度比应用程序显示信息的速度快。多余的数据存储在缓冲区中 - 为应用程序中的数据存储保留的内存区域。如果数据在两个系统之间传输延迟,则缓冲区会清空,材料的呈现将不顺畅。

HTTP 协议

HTTP 是在 Internet 上链接文档的主要方式。客户端与包含要流式传输的文件的服务器建立连接,检索文件并关闭连接。HTTP 服务器将要传输的文件类型传达给浏览器。

使用 HTTP 的好处

使用 HTTP 流式传输文件时,不需要特殊的流式传输服务器。只要您的浏览器理解 MIME 类型,它就可以从 HTTP 服务器接收流文件。使用 HTTP 流式传输文件的显着优势之一是它可以穿过防火墙并利用代理服务器。

一些缺点

HTTP 流使用 TCP/IP(传输控制协议和 Internet 协议)来确保文件的可靠传送。此过程检查丢失的数据包并要求重新传输它们。当您希望数据在传输过程中丢失时被忽略时,这在流场景中会成为问题,因此动态文件会继续播放。HTTP 无法检测调制解调器速度,因此服务器管理员必须有目的地为具有不同类型连接的服务器用户生成不同压缩率的文件。不建议在高需求情况下从 HTTP 服务器流式传输文件。

RTSP协议

RTSP 是大多数流媒体服务器供应商使用的标准协议。RTSP 服务器使用 UDP(用户数据报协议)来传输媒体文件。UDP 不会持续检查文件是否已到达目的地。这对于流应用程序来说是一个优势,因为它允许文件传输被中断,只要延迟不太长。这种方法的结果是有时会丢失数据,但如果延迟很小,文件会继续播放。

来源


永远不应该托管自己的视频的 10 个原因

我们正在谈论嵌入与自托管视频

首先,您将视频文件上传到第三方视频托管服务,如 YouTube、Vimeo 或 Wistia。

然后,您复制他们提供给您的一小段代码,并将其粘贴到您自己的 WordPress 网站上的帖子或页面中。视频将出现在您的站点上,在您粘贴嵌入代码的位置,但视频本身是从视频主机的服务器流式传输的,而不是您自己的 Web 服务器,您的 WordPress 站点托管在该服务器上。

4. 网络视频没有单一的文件格式标准

当前的 HTML5 草案规范没有指定浏览器应该支持哪些视频格式。结果,主要的网络浏览器出现了分歧,每个浏览器都支持不同的格式。Internet Explorer 和 Safari 将播放 H.264 (MP4) 视频,但不能播放 WebM 或 Ogg。Firefox 将播放 Ogg 或 WebM 视频,但不能播放 H.264。值得庆幸的是,Chrome 可以播放所有主要的视频格式,但是如果您想确保您的视频可以在所有主要的网络浏览器上播放,您必须将您的视频转换为多种格式:.mp4、.ogv 和 .webm

5. 希望你喜欢转换视频。很多。

受益于高速互联网连接,您的大多数观众可能会从他们的台式机或笔记本电脑上观看您的视频。对于这些人,您需要提供一个大的、高清质量的文件,以便他们可以选择全屏观看。通常,这意味着高流比特率 (5000 – 8000 kbps) 的 1080p 或 720p 文件。

但是,您还需要编码一个更小、分辨率更低的版本,以便传送到手机和平板电脑等移动设备,以及传送到 Internet 连接速度较慢的观看者。

6. 视频播放器

视频播放器是您在网站上安装的一小段网络软件,它会自动检测请求您的视频的设备及其连接速度,然后将适当的版本传送给该人。

7.繁琐的代码[或简码]

无论您使用第三方插件还是 WordPress 的内置视频功能,您都需要创建一些代码来告诉视频播放器您创建了哪些格式,以及它们在服务器上的位置。它看起来像这样……

<video poster="movie.jpg" controls>
<source src="movie.webm" type='video/webm; codecs="vp8.0, vorbis"'/>
<source src="movie.ogg" type='video/ogg; codecs="theora, vorbis"'/>
<source src="movie.mp4" type='video/mp4; codecs="avc1.4D401E, mp4a.40.2"'/>
<p>This is fallback content</p>
</video>
Run Code Online (Sandbox Code Playgroud)

那么将视频添加到您的网站的最佳解决方案是什么?

只需使用第三方视频托管服务,然后将您的视频嵌入到您的 WordPress 帖子或页面中即可。

第一步:将您的视频上传到一种流行的、完善的视频托管服务,如 Vimeo PRO。

第二步:一旦您的视频已上传并可供观看,请将 URL 复制到您的视频。返回您的 WordPress 网站并将 URL 粘贴到您希望视频出现的帖子或页面中。


当人们查看您的页面时,视频将显示在您粘贴 URL 的位置。但是视频文件本身将从视频主机的服务器流式传输,而不是从托管 WordPress 站点的您自己的服务器传输。

嵌入式视频播放器将自动检测用户的设备、浏览器和 Internet 连接速度,然后向他们提供适当版本的视频文件。无需在您的网站上安装任何内容。没有插件可以保持最新。没有棘手的代码。

来源