问题标签 [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 投票
3 回答
523 浏览

html - 怎么玩

我有两个这样的标签:

我想一个一个地播放它们,即 .play() 第一个,当它启动 onend 事件时,我将 .play() 第二个。不幸的是,这给了我一个流行的声音。有没有正确的跨浏览器方法可以在不点击的情况下做到这一点?

文件本身很好,如果我在 ffmpeg 中将它们粘合在一起,声音就完美了。

谢谢。

0 投票
2 回答
3591 浏览

html - MediaSource API - 将多个视频附加/连接到一个缓冲区中

更新:

所以我能够通过使用 offsetTimestamp 属性(在附加每个视频后增加它)来让它工作。

我现在的问题:1)为什么在将 MediaSource.mode 设置为序列时没有正确完成?

2) 为什么我的 MediaSource.duration 总是“无限”而不是正确的持续时间?


我正在尝试使用 MediaSource API 附加多个视频文件并无缝播放它们,就好像它是 1 个视频一样。

我已经根据规范(DASH-MPEG)正确地对我的视频进行了转码,并且在单独播放它们时,它们工作正常。

但是,当我尝试追加多个时,我遇到了片段相互覆盖、持续时间不正确等问题。即使一切似乎都按预期执行。

我尝试过使用 offsetTimestamp,但根据文档将 MediaSource.mode 设置为 'sequence' 应该会自动处理这个问题。此外,出于某种原因,MediaSource.duration 似乎总是“无限”,即使在附加一个段之后也是如此。

这是我的代码:

这是日志:

0 投票
1 回答
65110 浏览

media - What exactly is Fragmented mp4(fMP4)? How is it different from normal mp4?

Media Source Extension (MSE) needs fragmented mp4 for playback in the browser.

0 投票
1 回答
932 浏览

javascript - 我在哪里可以找到 dash.all.js 的未混淆版本?

我需要调试 DASH 播放器。我使用了本教程。但我需要 dash.all.js 的未混淆版本,我不明白我可以把它放在哪里。我已经检查了来自这个 github 的来源:

https://github.com/Dash-Industry-Forum/dash.js

并用 grunt 构建了 dash.all.debug.js:

但这个文件不是我需要的,因为它不包含 Dash 对象。所以来自wiki的代码不起作用,我在这里得到一个错误:

我究竟做错了什么?

谢谢。

0 投票
1 回答
543 浏览

javascript - 哪些字节的视频数据指的是当前播放位置

我正在使用媒体源扩展在浏览器中播放视频。

我的 JavaScript 程序将视频文件分成 1200 字节的片段。视频采用以下编解码器编码:video/mp4;编解码器="avc1.42E01E,mp4a.40.2"。
以秒为单位给出时间 X 我想找到在位置 X 播放视频所需的相应第一个片段(或靠近但不在此位置之后的片段)。更具体地说,我想在 HTMLMediaElement 的 currentTime 属性中找出哪个片段属于时间。可以预先分析视频文件。

0 投票
1 回答
1837 浏览

javascript - 在 Chrome 中创建 MediaStream 对象?

据我所知,MediaStream 对象是从 getUserMedia 返回的,但有没有办法从本地 .mp4 或 .webm 文件创建 MediaStream 对象?(或任何其他黑客方式)

对此进行调查,以尝试自动化一些非常特定于需要此的测试。

编辑:这是 Chrome 特定的。目前在 Firefox 中有一个画布操作可以满足我的需要,但它不在 Chrome 上(还没有?)

编辑 2:这是用于 Firefox https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/captureStream

Chrome有什么等价物吗?或者真的没有办法以其他方式重新创建 MediaSteam 对象。. .

现在我唯一能想到的就是在 Firefox 上将它用于 webrtc peerconnection 以将其发送到 chrome peerconnection 并希望接收到的流是有效的。

0 投票
3 回答
3853 浏览

html - 获取 MediaSource.isTypeSupported 的 MIME 类型

如何获得我需要 MediaSource.isTypeSupported使用 ffprobe/ffmpeg 传递给的 Mime 类型?

例如,在我的电脑上,返回true

虽然那没有

我不确定如何获得与avc1.64000d,mp4a.40.2给定视频的部分相对应的内容。是这部分可能看起来像的更大列表。

ffprobe -show_streams -i video.mp4返回许多有趣的信息,包括

我不确定我应该继续,'video/mp4; codecs="avc1.0x31637661,mp4a.0x6134706d"'因为这会返回false,我不知道是不是因为它不是例外参数,还是因为确实不支持视频。

0 投票
1 回答
160 浏览

html - 媒体源 - 是否可以有不以关键帧开头的缓冲区?

使用媒体源扩展,是否可以以缓冲区不以关键帧开始但以正常帧开始的方式进行缓冲?

例如,是否可以逐帧缓冲视频?(并不是说这样做会很聪明!)

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 地址
  • 流式信息,如格式

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