当从 uri 播放视频或音频时,它是流式传输还是完全下载并播放?

Posted

技术标签:

【中文标题】当从 uri 播放视频或音频时,它是流式传输还是完全下载并播放?【英文标题】:when video or audio is played from a uri is it streamed or downloaded fully and played? 【发布时间】:2021-12-25 05:04:08 【问题描述】:

我正在建立一个内容创建网站,但我对音频和视频感到困惑。

如果我有一个内容创建者的音频或视频存储在 s3 中,然后我想显示他们的文件,html 视频播放器或音频播放器会流式传输媒体还是完全下载然后播放?

我问是因为如果视频或音频很长怎么办。例如 2 小时。我需要知道如何解决用例。

最后,哪种文件类型最适合在网页上查看? MPEG-4 似乎是最好的选择。这是真的吗?

【问题讨论】:

【参考方案1】:

如果可以,大多数视频播放器客户端和浏览器都会尝试流式传输视频。

对于托管在服务器上的 mp4 视频文件,只要标头位于开头并且服务器接受范围请求,这意味着播放器会以块的形式下载视频并在有足够的决定权时立即开始播放第一帧。

对于更专业的流媒体服务,他们通常会使用自适应比特率流媒体协议,如 DASH 或 HLS(请参阅此答案:https://***.com/a/42365034/334402),并且视频将以块或片段的形式再次流式传输,并开始播放它正在流式传输。

要回答您的最后一个问题,您需要注意原始视频是经过编码的(egh264、VP9 等),而视频、音频、字幕等轨道存储在视频容器(例如 mp4、Web 等)中。

目前最常见的格式可能是 h.264 编码和 mp4 容器。

h.264 的特定配置文件也取决于设备 - 基线可能是目前最受支持的配置文件。您可以在线找到针对不同设备的媒体支持示例,例如安卓系统:https://developer.android.com/guide/topics/media/media-formats

【讨论】:

【参考方案2】:

@Mick 的回答很到位。我将添加 mp4(使用 h264 编码)将在几乎所有浏览器中工作。

mp4 文件(尤其是 2 小时长的电影)的问题不在于搜索和流式传输。如果您的创作者创建了 4K 视频 - 这就是您将提供给所有人(甚至是手机)的内容。另一方面,HLS 流具有自适应比特率——视频适应屏幕和可用的网络速度。您将通过更少的缓冲(如果您使用 AWS - 更少的数据出口)和视频流获得更好的播放结果。

(有很多 API 和服务可以帮助您做到这一点 - 包括 api.video(我工作的地方)、Mux 等)。

【讨论】:

以上是关于当从 uri 播放视频或音频时,它是流式传输还是完全下载并播放?的主要内容,如果未能解决你的问题,请参考以下文章

ExoPlayer 无法播放 Adob​​e 实时流编码器流式传输的音频/视频 (RTMP)

Android:尝试从 URI 播放视频时应用程序强制关闭

如何在我的应用程序上仅流式传输来自 youtube 视频的音频数据?

hls只播放音频,但视频是黑色的

使用url从python流传输youtube音频而无需下载python

流式传输 Youtube 视频