问题标签 [media-source]

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 回答
2358 浏览

html - Firefox 和 IE 上的媒体源扩展

我正在使用 MediaSource 对象创建一个带有 HTML5 的音频播放器。

我的代码类似于MediaSource API Demo

但是在执行该行时

Firefox并且抛出异常Internet Explorer

Firefox 支持中表示此功能仅对Youtube和启用Netflix

有办法处理这个限制吗?

在 Chrome 中,我没有问题!

0 投票
3 回答
6121 浏览

ffmpeg - 在 FFMPEG 中创建分段 MP4 的刷新和延迟问题

我正在使用以下命令为 html5 流式传输创建一个分段的 mp4:

  1. “-i rtsp://172.20.28.52:554/h264”,因为源是来自 ip 摄像机的 rtp 数据包流中的 h264。为了测试起见,相机设置GOP为1(即所有帧都是关键帧)
  2. “-vcodec 复制”因为我不需要转码,只需要重新混合到 mp4。
  3. "-movflags empty_moov+default_base_moof+frag_keyframe" 根据媒体源扩展规范创建分段 mp4。
  4. 最后的“-”以便将 mp4 输出到标准输出。我正在获取输出并通过网络套接字将其发送到网络客户端。

一切运行良好,期待我试图解决的延迟问题。如果我每次从标准输出输入数据时都在记录,并带有到达的时间戳,我会得到以下输出:

16/06/2015 15:40:45.239 得到数据大小 = 24

16/06/2015 15:40:45.240 得到数据大小 = 7197

16/06/2015 15:40:45.241 得到数据大小 = 32768

16/06/2015 15:40:45.241 得到数据大小 = 4941

16/06/2015 15:40:45.241 得到数据大小 = 12606

16/06/2015 15:40:45.241 得到数据大小 = 6345

16/06/2015 15:40:45.241 得到数据大小 = 6339

16/06/2015 15:40:45.242 得到数据大小 = 6336

16/06/2015 15:40:45.242 得到数据大小 = 6361

16/06/2015 15:40:45.242 得到数据大小 = 6337

16/06/2015 15:40:45.242 得到数据大小 = 6331

16/06/2015 15:40:45.242 得到数据大小 = 6359

16/06/2015 15:40:45.243 得到数据大小 = 6346

16/06/2015 15:40:45.243 得到数据大小 = 6336

16/06/2015 15:40:45.243 得到数据大小 = 6338

16/06/2015 15:40:45.243 得到数据大小 = 6357

16/06/2015 15:40:45.243 得到数据大小 = 6357

16/06/2015 15:40:45.243 得到数据大小 = 6322

16/06/2015 15:40:45.243 得到数据大小 = 6359

16/06/2015 15:40:45.244 得到数据大小 = 6349

16/06/2015 15:40:45.244 得到数据大小 = 6353

16/06/2015 15:40:45.244 得到数据大小 = 6382

16/06/2015 15:40:45.244 得到数据大小 = 6403

16/06/2015 15:40:45.304 得到数据大小 = 6393

16/06/2015 15:40:45.371 得到数据大小 = 6372

16/06/2015 15:40:45.437 得到数据大小 = 6345

16/06/2015 15:40:45.504 得到数据大小 = 6352

16/06/2015 15:40:45.571 得到数据大小 = 6340

16/06/2015 15:40:45.637 得到数据大小 = 6331

16/06/2015 15:40:45.704 得到数据大小 = 6326

16/06/2015 15:40:45.771 得到数据大小 = 6360

16/06/2015 15:40:45.838 得到数据大小 = 6294

16/06/2015 15:40:45.904 得到数据大小 = 6328

16/06/2015 15:40:45.971 得到数据大小 = 6326

16/06/2015 15:40:46.038 得到数据大小 = 6326

16/06/2015 15:40:46.105 得到数据大小 = 6340

16/06/2015 15:40:46.171 得到数据大小 = 6341

16/06/2015 15:40:46.238 得到数据大小 = 6332

如您所见,前 23 行(包含约 1.5 秒视频的数据)几乎立即到达,然后每 2 行连续行之间的延迟约为 70 毫秒,这是有道理的,因为视频是每秒 15 帧。此行为引入了大约 1.5 秒的延迟。

这看起来像是一个刷新问题,因为我看不出 ffmpeg 需要在内存中保存前 23 帧的任何理由,特别是因为每一帧都是它自己在 mp4 中的片段。但是,我找不到任何可以使 ffmpeg 更快地刷新这些数据的方法。

有人有建议吗?

我想指出,这是对此问题的后续问题: Live streaming dash content using mp4box

0 投票
2 回答
148 浏览

javascript - 即使附加了足够多的内容,视频也无法播放

我有一个设置,我使用 websockets 协议发送一个 10 分钟长的视频(大象梦),每个 4 秒的短片段。
我使用浏览器作为客户端,使用Websocket API接收内容,使用 HTML5 视频标签作为播放器,我使用Media Source Extensions将块添加到视频中。

问题是某处似乎存在限制(最大接收缓冲区大小、最大媒体源源缓冲区大小、视频元素上的最大缓冲内容等),因此视频无法正确播放到最后,但即使有足够的数据。

所有片段都正确到达并及时附加。同时,视频从头开始播放。
您可以看到播放器上显示缓冲视频的灰线会增长,直到某个时间点停止增长并且视频在到达此位置时停止播放。
但是,完整的视频已附加到 mediasource 元素,关于输出消息,也可以通过手动跳转到将来或过去的另一个位置来测试。看起来总是只有一小部分内容“加载”。

由于我在 localhost 上对其进行测试,吞吐量非常高,所以我尝试将其降低到更常见的值(仍然优于视频比特率),以查看我是否使客户端超载,但这并没有改变任何东西。

还尝试了不同的段大小,结果完全相同,只是它停止的时间点不同。

视频播放器停止

那时的控制台输出

关于这个限制可能在哪里或可能发生什么的任何想法?

0 投票
2 回答
10768 浏览

javascript - Youtube Blob url 在浏览器中不起作用,但在 src 中起作用

我知道没有 blob url 只有对象。
我为视频缓冲区制作了自己的 blob 对象,然后在类似于blob://website.com/blablabbla的视频标签的 src 中使用它。我在它工作的浏览器中打开了这个网址

当我将 youtube 视频 src(blob url)的 url 打开到一个新标签时,它不起作用,但我的视频 src(blob url)有效

我想知道如何对我的 blob url 执行相同的操作,以便它们仅在 html 视频标签的 src 中工作并给出错误或在浏览器的外部选项卡/窗口中不起作用。我只是想知道这个和 blob 对象及其 url 属性背后的技术。

0 投票
1 回答
103 浏览

media-source - Mobicent Media 服务器如何使用 URL 播放音频

我想详细了解 Mobicent Media 服务器如何使用 URL 播放音频?它以哪种方法使用 URL 进行流式传输。对于本地存储,我理解,但对于远程存储(URL),我不知道它是如何工作的。我在用户指南或网站中没有找到任何内容。如果您告诉我详细信息或建议我任何网络链接,这将非常有帮助。

谢谢。

0 投票
2 回答
472 浏览

javascript - Firefox 视频标签 getVideoPlaybackQuality() 不是函数

根据MDN 文档getVideoPlaybackQuality()onHTMLVideoElement在 25.0 版本之后可用。

但是,我尝试在 Firefox 38.1.0 中的视频元素上调用它,但出现getVideoPlaybackQuality is not a function错误。

这个 api 实际上可用于 Firefox 吗?

0 投票
1 回答
165 浏览

http-live-streaming - 是否有任何详细的教程或案例研究用于使用带有 HLS 回退的 MPEG-DASH 构建在线视频交付服务?

是否有任何详细的教程或案例研究用于使用带有 HLS 回退的 MPEG-DASH 构建在线视频交付服务?我在这里和那里找到小块,但我不能把它们放在一起:(

0 投票
1 回答
8707 浏览

websocket - 如何使用 ffmpeg 通过 websocket 流式传输 mp4

我在 nodejs 中编写了一个示例,它通过 mp4 格式的 websocket 连接将一些输入流式传输到客户端。在客户端,mp4 包被添加到 MediaSourceBuffer。

这运行良好,但前提是客户端从第一个包的开头获取流。所以另一个客户端不能播放当前的Stream,因为他不会从一开始就得到Stream。

我尝试(尝试和错误)保存第一个包 ffmpeg 发送并在新连接开始时发送它,然后是当前流。然后 MediaSourceBuffer 由于编码错误而中断..

这是 ffmpeg 命令:

“empty_moov+omit_tfhd_offset+frag_keyframe+default_base_moof”部分应该使 Streampackages 独立于将 moovatom 放在每个部分的开头并按关键帧将各部分调整为 59 帧,所以我不明白为什么我不能查看Stream 开始后开始。

0 投票
2 回答
3974 浏览

javascript - 使用媒体源扩展在 IE/Edge 中进行视频缓冲

我们正在尝试使用 MSE(媒体源扩展)在网站上显示实时视频。我们正在通过 websocket 发送帧,并尽最大努力降低延迟。我们目前的原型在 IE、Edge、Chrome、Safari 等中流式传输非常好。我们遇到的问题是 IE 和 Edge 坚持在开始播放视频之前缓冲大约 3-5 秒。这在我们的用例(来自安全摄像头的实时视频)中是不可接受的。我们想知道是否有一些属性或类似的(我们尝试设置 preload=none,但没有成功)消除了这种缓冲?当第一帧添加到 sourceBuffer 时,所有其他浏览器都会愉快地开始播放,我们希望 IE/Edge 具有相同的行为。您可以为我们建议任何其他解决方法吗?

帧采用ISO BMFF 格式

这是我创建的一个复制示例,它测量从第一帧附加到视频开始播放的时间。它使用间隔来欺骗通过 websocket 到达的数据。

结果:

是 mp4 文件,如果您想检查它。

0 投票
1 回答
413 浏览

html - MPEG DASH 部分片段

当 DASH 段通过网络发送时,其中一些可能没有完全接收到。在我的应用程序中,如果将不完整的片段提供给播放器(带有 MSE 的 HTML5 视频),它会停止而不是跳过片段并继续下一个片段。为什么会这样以及如何处理这种部分分段的情况?