问题标签 [adaptive-bitrate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1498 浏览

video-streaming - 在大多数浏览器和设备上保持一致的自适应流媒体策略

我已经研究了很多关于视频流和在网络上播放的当前状态。我正在发布我总结的内容以及我认为应该遵循的策略,以支持跨大多数设备和浏览器的自适应流媒体。如果我正在制定的策略有任何重大漏洞/改进,我只是想从社区获得反馈。

概括

  • 为了支持当今大多数浏览器以 html<video>元素播放视频,我们需要以至少 3 种格式 WEBM、OGG 和 MP4 对视频进行编码
  • 要为视频点播服务提供自适应流媒体,可用的选项有 MPEG-DASH、Apple 的 HLS、Microsoft 的 Smooth Streaming 和 Adob​​e 的 HDS
  • 最初我更喜欢使用 MPEG-DASH,因为它是一种类似于 HDS、HLS 和平滑流的开放标准,并且被发明为提供一个通用平台来在任何浏览器和操作系统上提供音频/视频内容。
  • 但截至目前,在 iOS 上运行 Safari 和在 Mac 上运行 Safari 的 Apple 设备并不完全支持 MPEG-DASH 标准,因为 Apple 尚未支持 MPEG-DASH 所基于的 html5 的媒体源扩展 API。
  • 所以我要实现 MPEG-DASH(对于非苹果设备)+ HLS(对于苹果设备)
  • 这意味着我必须在服务器端生成.mpd(由 mpeg-dash 使用)和.m3u8(由 HLS 使用)文件,然后将其提供给客户端。我在服务器端使用 Node.js 进行编码。

现在据我所知,当使用 mpeg-dash 时,它的基本作用是从源文件和包含关于将哪个流发送到客户端的描述/规则的配置文件创建具有不同比特率的各种不同媒体文件取决于带宽。

相同的逻辑适用于 HLS,但它创建的配置文件具有与 mpeg-dash 不同的扩展名。

如果我计划支持具有 3 种不同分辨率的 3 比特率,例如 1020*720、800*600、400*300 的视频,那么我需要为我将要支持的 3 种格式(即 WEBM、 OGG, MP4)

因此,对于客户端上传的任何一个视频,我总共需要生成 3*3 = 9 个视频,同时生成一个 .mpd 和 .m3u8 文件以支持非 Apple 和 Apple 设备。

这似乎是一个好习惯吗?或者我是否缺少跨浏览器自适应流媒体解决方案?

欢迎提示/建议/建议。

谢谢 !

0 投票
4 回答
59308 浏览

mpeg-dash - 如何播放mpd文件

. 我试图了解 mpd 文件的播放方式,我指的是以下数据集: http ://www-itec.uni-klu.ac.at/ftp/datasets/mmsys12/Valkaama/MPDs/Valkaama_1s_act_isoffmain_DIS_23009_1_v_2_1c2_2011_08_30.mpd

在 mpd 文件格式中,段库由 mp4 块组成,其中包含扩展名为 .m4s 的块列表。我使用以下方式下载了 mpd 文件:

http://www-itec.uni-klu.ac.at/ftp/datasets/mmsys12/Valkaama/valkaama_1s/valkaama_1s_50kbit/valkaama_50kbit_dash.mp4

和 m4s 块通过以下链接:

http://www-itec.uni-klu.ac.at/ftp/datasets/mmsys12/Valkaama/valkaama_1s/valkaama_1s_50kbit/valkaama_1s1.m4s

我尝试在 vlc 播放器中播放 mp4 和 m4s,但无法播放这两个中的任何一个,所以我想问一下 mpd 文件格式中的哪些块链接我可以在 vlc 播放器中独立播放。

如果我的任何观察结果有误,请纠正我:

问候马扬克

0 投票
1 回答
67 浏览

video - [Apple][HLS] 视频的自适应比特率元数据

我的供应商说我的一些转码的 .ts 视频的 ABR(自适应比特率)元数据的标记/位置与其他元数据不同。

我做了什么

我用谷歌搜索了什么是自适应比特率,并知道这是苹果公司推出的。但我找不到什么是“自适应比特率元数据”以及在哪里可以找到它

我还通过MediaInfo比较了正常的视频和不正常的视频,似乎没有任何原因导致失败


我可以在这里得到一些帮助吗?无论如何参考文件的“元数据”或测试视频的东西,如果它适用于 Apple HLS

0 投票
2 回答
2015 浏览

nginx - Nginx 点播转码

我正在尝试使用 nginx 设置 MPEG-DASH 视频点播流。我遇到了nginx vod 模块,它与 dash.js 配合得很好,但我想知道是否有人设法让实时转码工作。

我目前已将其设置为播放 H264 MP4 本地文件,为单个 MP4 生成 MPD 清单。我知道我可以对视频的多个版本进行转码并将它们存储在服务器上,创建一个多 URL 清单,但我在服务器上的空间有限,所以无法做到这一点。相反,我正在尝试找到一种实时转码的方法,以允许使用nginx rtmp 模块和 ffmpeg 进行更自适应的比特率流式传输(但是使用 MPEG-DASH 而不是 RTMP,因为我不想使用闪存)。

有谁知道这样做的方法?先谢谢了。

0 投票
1 回答
1172 浏览

audio - 具有多个音频和文本轨道/流的视频 URL 流?

我正在测试在给定流中切换不同音频或文本轨道的能力(自适应流,如 HLS/Smooth/Dash)。有人可以提供包含多个音轨(Dolby、Stereo、DTS)、音频轨道(英语、西班牙语、法语)和文本轨道(例如:不同语言的字幕)的示例视频 URL 吗?

如果没有,是否有推荐的工具可以将音频或文本轨道组合到视频文件中?

0 投票
1 回答
10418 浏览

ffmpeg - 创建 MPEG-DASH 初始化段

我希望在 HLS 和 MPEG Dash 之间进行转换。我不访问原始的完全连接的视频文件,只访问单独的 HLS 片段。

在对 MPEG Dash 进行这种转换时,我需要为 Dash manifest .mpd 文件提供一个初始化段。

我的问题是:

  1. Dash 视频初始化段的结构是什么?
  2. 如何在不需要原始完整文件的情况下生成/创建一个?

也许解决方案将涉及MP4Box将“.ts”HLS 段转换为自初始化的 Dash“.m4s”段,但我不确定如何解决这个问题?

任何想法都非常感谢。

非常感谢。

更新:片段使用原始 hls 段进行流式传输。视频一直播放,但只是黑色。

0 投票
1 回答
292 浏览

javascript - html 播放由大量排队的小视频组成的视频

如何管理由许多小视频部分组成的视频?例如,原始视频被分割成 1s 个视频,每个视频都以不同的字节率提供,这样我就可以根据当前带宽选择每个部分。或者原始视频是 360 度视频,并被分成 1s 块,这些块在不同区域具有更好的质量,这样我就可以流式传输与用户当前正在查看的位置相对应的块。

似乎 MPEG-DASH 播放器正在解决这个问题以适应字节速率,尽管它们可能做得更多。

使用桌面中的一堆 html5 视频 + javascript 来执行此操作听起来并不复杂,同时要小心流式传输的内容和处理转换。但是,在移动设备上,我需要用户交互来加载视频并播放。但我不希望用户每秒都点击他的手机......

理想情况下,最终的东西应该有一个与 html5 视频非常相似的 api,并有额外的可能性来定期选择流媒体源。它在移动设备上工作对我来说非常重要。

非常感谢!

0 投票
1 回答
383 浏览

video-streaming - 自适应流 - 避免有很多关键帧

语境:

我正在构建一个基于媒体源扩展协议的具有自适应流媒体的 html5 视频播放器。我正在使用 mp4。

问题:

我有同一个视频的两个版本(假设质量高和质量差),我希望能够在版本之间切换而几乎没有延迟。问题是在更改版本时,我需要有一个以关键帧开头的片段,并且视频中经常出现关键帧对带宽非常不利。

我正在寻找一种方法来发送一个在用户更改版本时以关键帧开头的片段,以及一个没有其他关键帧的片段(我知道Chromium 中有一个关于有一个没有关键帧的片段的错误,但让我们暂时忽略它,它即将被修复)

我想在一个有很多关键帧的视频中复制每个流,在另一个没有(显然第一帧除外)的视频中复制每个流,然后在切换视频版本时只使用带有关键帧的流。看起来像这样的东西:

所以每一帧要么是关键帧,要么是可以成功解码其前身的正常帧。这会将通过网络发送的关键帧的数量限制在最低限度。

但是,嘿!浏览器将切换 from A1toA2理解为更改视频流并且不起作用,因为A2它不是从关键帧开始的。

有没有人知道如何实现这样的结果?我目前正在考虑重写客户端中的 moov 和 moof 原子,以欺骗玩家认为一切都与它不同。但是我对它了解不多...

动机:

我正在开发 360 播放器。360 很难,因为有很大一部分视频是流式传输但未显示的,这意味着在带宽有限的情况下,显示的视频部分质量比人们习惯的要低得多。有一些工具和技术可以生成多个版本的视频,每个版本都以不同的视图方向为中心,然后播放器决定在运行时播放哪个版本。

由于用户可以随时改变视图方向,因此能够对这种变化做出快速反应是非常重要的,这比对字节速率适应更重要。而且由于这个东西的目标是节省带宽,所以从添加大量关键帧开始会很糟糕!

此外,由于 iOS Safari 不支持内联视频,这是 360 播放器的关键,我可以依靠 iOS Safari 不支持的 MSE(说真的,那些人在做什么?)

0 投票
1 回答
122 浏览

video-streaming - 可以在媒体源扩展中检测到以下哪些值

我正在尝试检测有关媒体源扩展中的流的以下信息

  • 音频/视频比特率
  • 带宽
  • 流的 IP 地址
  • 流式信息,如格式

我一直在阅读文档,但找不到对这些文档的任何直接引用。是否可以提取这些信息?

0 投票
1 回答
135 浏览

ios - MPMoviePlayer 中的自适应比特率支持

iOS MPMoviePlayer 或 AVPlayer 是否支持直播中的“自适应比特率”?