问题标签 [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.
html - 如何让 HE-AAC v2 在 Chrome 的 MediaSource API 中播放?
我正在尝试使用MediaSource API在 Chrome 中播放分块的 HE-AAC v2。
Chrome 明确允许此编解码器 ( mp4a.40.29
) 并且据我所知能够对其进行解码。(例如,decodeAudioData
来自 Web Audio API 的方法确实解码了相同的数据)。
不幸的是,尝试在 Chrome 中使用 MediaSource API 播放 HE-AAC v2 的块会导致以下错误,即使完全相同的页面在 Safari 中完美运行。
我整理了一个测试页面,展示了问题(在 Chrome 中)和成功(在 Safari 中)。
我怎样才能让 Chrome 播放这些块?
错误:
管道:解码错误
启动解复用器
追加:流解析失败。数据大小=15634 append_window_start=0 append_window_end=inf
ffmpeg - FFmpeg - 具有非固定帧速率的分段 MP4
我正在创建一个片段的 MP4 用于在媒体源扩展中播放。命令行是:ffmpeg.exe -probesize 10000000 -r 10 -i - -vcodec copy -an -f mp4 -reset_timestamps 0 -blocksize 30000 -movflags empty_moov+default_base_moof+frag_keyframe -loglevel debug -
视频源是一个 IP 摄像机流式传输 H.264。配置和预期的帧速率是 10FPS,但不能保证 10FPS,例如帧可能偶尔会丢失,或者相机可能无法正常播放它所声明的内容。我模拟了 10% 的 p 帧下降来强调以下问题:
使用上述命令,输出视频的播放速度比实时播放快,这是一个问题,因为整个管道都是实时流。10%丢帧模拟,有效播放率1.1倍。我不想强制使用固定帧速率,因为无法保证固定速率。如果我完全删除 -r 10 标志,MP4 似乎以 2x-3x 的速度播放。
有没有办法以更动态的方式构建 MP4 时间戳?例如,给它RTP时间戳或以某种方式告诉ffmpeg用“feed”时间的时间戳构建MP4?
video - 媒体源扩展 - 识别何时没有更多数据
我正在创建具有恒定 10FPS 的实时实时内容的分段 MP4,但偶尔会在输入 MP4 创建过程之前丢帧。MP4 通过网络套接字传输到网络。
由于偶尔的丢帧,文件的播放速度实际上略大于 1x,因为播放器以 10FPS 播放。由于这是一个实况内容,在一段时间后,播放器到达当前时间并且没有数据可播放。
现在,对于 MSE 问题:Chrome 中似乎发生的情况是,当播放器没有足够的数据继续播放时,它会暂停 1-2 秒,然后播放得非常快,反之亦然。所以此时用户体验变得非常糟糕。此处讨论了该问题: https ://www.w3.org/Bugs/Public/show_bug.cgi?id=28379
我解决这个问题的想法是识别状态(没有更多数据),将播放速率更改为 0.9 几秒钟以允许一些缓冲,然后切换回 1.0。问题是我找不到识别状态的方法。即使问题开始,媒体元素的就绪状态似乎总是具有“HAVE_ENOUGH_DATA”的值。
MSE API 是否公开了一种识别我所描述的状态的方法?
html - FFMPEG:从网络摄像头创建连续视频
FFMPEG 可以(例如 10 秒)间隔从网络摄像头录制吗?我需要来自网络摄像头的连续小视频(用于我正在开发的 p2p 实时流媒体应用程序),这样我就可以在之后播放它们,而不会注意到实际上有多个视频。
我想,我必须打破关键帧或类似的东西,这样我才能有清晰的剪辑。
为了播放多个视频而不会卡顿,我使用了 Web MediaSource API,它实际上已经很好地工作了。
我只需要将网络摄像头流分割成多个可变视频文件。
谢谢!
html - 带有完整 mp4 文件的媒体源扩展
我正在尝试使用媒体源扩展来播放 mp4 文件。我正在关注的示例在这里:http ://html5-demos.appspot.com/static/media-source.html
我有这个示例同时处理 webm 视频和碎片化的 mp4 视频。媒体源扩展不适用于未分段的 mp4 视频吗?我不应该能够手动将视频块附加到源缓冲区吗?看起来附加的作品,但视频不会播放。
javascript - 我可以“重新启动”结束的 mediaSource 吗?
我实现了一个带有媒体源扩展的自适应 html5 播放器,并且卡在关于播放的逻辑到最后。
我发现mediaSource.endOfStream()
必须在播放结束之前调用它,以便查看元素ended
发出的事件。<video>
调用 endOfStream 后,mediaSource.readyState
将变为ended
,并且已经附加到它的 sourceBuffers 仍然存在。(未删除)
在 mediaSource 规范中结束了 readyState 描述:
源仍然附加到媒体元素,但 endOfStream() 已被调用。
换句话说,mediaSource 标记为已结束但仍附加到视频元素。
场景是:我想重播这个回放。
有什么方法可以“重启”这个 mediaSource?
b/c mediaSource 仍附加到视频元素,因此videoElement.src = window.URL.createObjectURL(mediaSource)
不起作用。而且也只能closed
附加一个 mediaSource,所以在调用它时,mediaSource 被关闭,并且 sourceBuffers 被删除。
我在规范中看不到任何其他方法,或者我的尝试(重新启动 mediaSource)完全错误?
有人有什么主意吗?任何评论/建议将不胜感激。
谢谢。
html - 如何使用 FFMPEG 以 ISO BMFF 格式录制视频,以便为媒体源扩展做好准备?
我正在尝试使用 ffmpeg 录制视频,然后使用 MSE 在播放器上播放。这是我正在使用的脚本:
除了在视频文件末尾有一个 mfra 框之外,这是可行的,我认为 MSE 不支持该框。如何删除此 mfra 框?
javascript - Firefox MediaSourceExtension 上的 mp3 支持
我正在研究在浏览器中实现自适应和渐进式音频流,没有插件。MSE 是我一直在等待的 HTML5 API,在 FF 42 中可用,但似乎 Firefox 中的音频格式支持不存在?... mp3 音频在使用 MSE API 时不起作用。
这是一个代码片段:
调用 addSourceBuffer 时出现 NotSupportedError 异常。
火狐不支持mp3吗?从 MDN 支持的格式列表(https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats)中,这意味着如果操作系统支持 mp3 支持应该存在 - 以及我正在测试的操作系统(OSX)确实支持它。
任何帮助表示赞赏!
javascript - 无法通过 MSE(媒体源扩展)播放视频
尝试使用 MSE(媒体源扩展)播放视频。我能够在 Ajax 响应中获取块并附加到 sourceBuffer 中,但是在播放时它不会播放。这是我编写的示例代码...
html - 可以使用 HTML5 MediaSource 动态生成任意尺寸和长度的单色视频吗?
假设我有一个允许用户选择宽度、高度、颜色和持续时间的页面。然后我希望页面生成具有这些尺寸和持续时间的视频,该视频只是该颜色的静态帧,然后将在该页面上的 <video> 标记中播放。我可以使用 HTML5 MediaSource API 来执行此操作吗?
例如:如果用户选择 704x396 + rgb(0, 0, 0) + 00:00:15,那么我想生成一个 <video> 标签来播放大小为 704x396、15 秒长且全黑的视频。如果您熟悉Aegisub 的虚拟视频功能,那基本上就是我想要模仿的。
据我所知,MediaSource 只允许我在浏览器支持的实际视频编解码器中提供原始视频字节。它没有任何“更高级别”的 API,例如让我提供单个帧的东西。
如果不是 MediaSource,还有其他方法可以做到这一点(当然除了捆绑编译为 JS 的 webm / MP4 编码器)?