在他们的开发者文档中,他们说他们支持以下内容:
•容器:MP4/CENC,WebM,MPEG-DASH,SmoothStreaming
但是,MPEG-DASH和SmoothStreaming是允许各种容器的流协议.MPEG-DASH规范允许MPEG2-TS块,但我没有看到任何有关DASH清单内支持的容器格式的信息.
我目前正在使用JavaScript和MediaSource API处理DASH播放器
流媒体工作正常,但我坚持改变表示.在播放期间更改表示的最强制方式可能是替换HTML文档中的<video>元素.
Hovewer,我想知道是否有一种简单的方法来使用Media Source API实现适应(更改表示).我已经读过单个Media Source对象可以处理许多源缓冲区,但是在添加第二个视频缓冲区之后会引发异常.
我使用的是Chrome 43.0.2357.65m
var mediaSource = MediaSource();
var url = URL.createObjectURL(mediaSource);
videoElement.src = url;
mediaSource.addEventListener('sourceopen', function () {
var buffer1 = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.4d4015"');
var buffer2 = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.4d4015"');
}
Run Code Online (Sandbox Code Playgroud)
例外:
Uncaught QuotaExceededError: Failed to execute 'addSourceBuffer' on 'MediaSource': This MediaSource has reached the limit of SourceBuffer objects it can handle. No additional SourceBuffer objects may be added.
Run Code Online (Sandbox Code Playgroud) 我知道我的术语不正确,但在视频方面我是一个完整的新手。
我有一个普通的 .mp4 视频文件。我使用 MP4Box 来分割视频文件,这样我就可以使用支持 MPEG dash 的视频播放器播放它。它不是通过创建多个较小的视频文件来分割的。它会创建一个比旧视频文件大一点的新的大视频文件。
我想将常规视频文件与虚线视频文件进行比较,看看 MP4Box 对它做了什么来分割它。我相信它正在向新视频文件添加某种类型的标题。显然,当我在文本编辑器中打开它时,它是不可读的。我该如何比较这些文件?
用JavaScript构建MPEG-DASH播放器.但是,我在实现搜索时遇到了问题,并且似乎没有太多关于如何使用MSE和相应的Source Buffer对象处理它的参考资料.
据我所知,只要段正确编码(我通过SegmentTemplate使用单独的m4s文件,而不是字节范围),就应该只需要为所需的任意点附加段(比如10秒标记) ),然后将VideoElement的currentTime参数设置为标记.所有这些都有效,我可以确认段缓冲区没有错误,并且段的第一帧甚至可以在VideoElement中直观地加载.但是,它不会播放,擦洗是不可能的.也没有错误.它只是在等待更多数据.
这可以通过添加所有先前的段来解决,直到任意点,但这是不切实际的.例如,dash.js不会这样做(但是我不能确切地确定它做什么不同以允许正确的搜索).我猜我必须以某种方式动态修改sidx,mfhd和/或tfdt框,以欺骗浏览器相信我正在按顺序加载段 - 但这对于这样的标准来说似乎过于顶层.
当将碎片化的MP4段馈送到MSE源缓冲区时,任何人都知道如何跳转到任意点并继续播放?
我使用dash.js将以下清单中的内容加载到HTML5视频中:MPD文件。它包含一个视频和四个音轨。我试图弄清楚如何枚举和启用/禁用可用的不同音轨。
我知道,如果将它们作为TRACK元素添加到元素中,则VIDEO可以通过它们启用/禁用它们,video.audioTracks但这是不可能的,因为它们是从清单中加载的。
我将如何解决这个问题的任何指针将不胜感激。
我正在尝试对Google Shaka播放器进行转码和DASH(使用Clear Key加密)示例H.264文件.我已经能够在线拼凑的每一组步骤都会在未加密的情况下生成可播放的版本,然后在我尝试加密时进行分解.
以下是我处理未加密版本的步骤:
将视频与音频分开
ffmpeg -i input.mp4 -an -c copy video_only.mp4
ffmpeg -i input.mp4 -map 0:2 -c copy audio_only.m4a
Run Code Online (Sandbox Code Playgroud)将视频转码为工作变体(目前只有1个)
ffmpeg -i video_only.mp4 -an -vcodec libx264 -s 1280x720 -c:v libx264 -b:v 384k -bf 2 -g 90 -sc_threshold 0 -an -strict experimental video_only_384kbps.mp4
Run Code Online (Sandbox Code Playgroud)3A.创建mpd
MP4Box -dash 5000 -segment-name 'outputseg-%s' -url-template -bs-switching no \
-out output.mpd -rap \
audio_only.m4a \
video_only_384kbps.mp4
Run Code Online (Sandbox Code Playgroud)
4A.将视频加载到Osmo4或Google Shaka中播放.
现在,我尝试分层加密.从上面的第2步开始:
3B.使用Clear Key加密变体
MP4Box -crypt drm.xml audio_only.m4a -out audio_only_encrypted.m4a
MP4Box -crypt drm.xml …Run Code Online (Sandbox Code Playgroud) 我目前正在研究在浏览器中加密和播放加密视频的主题。在使用 Widevine 的同时,我已经通过castlabs 的 DRMToday 和 Shaka Player 取得了一些成功。
现在我正在尝试使用 ClearKey 在没有外部服务的情况下加密视频,并在 Chrome 中播放它(使用任何可以处理的 js 播放器)。
我确实设法使用 MP4Box(以及用于创建 crypt 配置的 mse-eme)加密单个 mp4 文件,但我不知道如何在浏览器中播放它。HTML5 的视频甚至没有触发“加密”事件。加密本身工作得很好 - 我能够使用相同的工具和正确的密钥将其解密。
我尝试用这个加密文件创建一个 DASH 并在 Shaka Player 中播放它。我使用 MP4Box 创建了清单。我必须手动将缺少的 xmlns 添加到此文件 (xmlns:cenc="urn:mpeg:cenc:2013"),以便 DOMParser 正确解析它。我不知道我该如何处理许可证。
我发现了一些播放编码 webm 文件的工作示例(包括 Shaka Player 的演示页面)。如何加密 webm 文件?我确实找到了https://github.com/webmproject/webm-tools但它似乎需要构建整个 Chromium 才能工作。
还有其他可以加密 webm 文件的工具吗?
首先,我有一个文件夹,其中包含以 DASH 视频形式直播的视频的大约 200 个视频和音频片段(m4v 和 m4a)。现在 - 没有原始文件 - 我想将这些部分连接到一个可播放的视频文件。
提一下我已经测试过的:
我绝对不是专家(否则我可能不会问),但问题也可能是缺少 mpd 和/或 init 文件(据我可以浏览标准)。
不要误会我的意思:我不想得到与原始文件完全相同的结果。我想要实现的只是上述视频的单个可播放 mp4 文件。
我还尝试制作自己的 mpd 文件,但“流”无法播放。仅供参考,我尝试在当前的 VLC 3.0.0 git 中播放它,因为当前的稳定版本似乎不支持 DASH。如果有帮助,这里是视频编解码器:
id="live-hd_H264"
mimeType="video/mp4"
codecs="avc1.4d401f"
width="396"
height="704"
Run Code Online (Sandbox Code Playgroud)
那么,有人可以帮助我吗?
亲切的问候!
所以我正在尝试设置自适应流,我认为已经解决了 80-90% 的问题。现在,我提取源视频,将其转码为 5 种分辨率,每种分辨率具有 3 种比特率(低、中、高),然后将所有这些视频分成 5 秒的块,以便用户始终能够获得最佳观看效果。现在我需要生成/创建我的 MPD 清单文件,但我很难弄清楚如何生成/创建我的 MPD 清单文件。几乎每个人都说要使用 MP4Box,但他们的许可证对于我的项目来说限制太多。
当我分割视频时,是否可以使用 FFMPEG 生成 MPD 文件?或者也许生成一个 HLS,然后我可以将其转换为 MPD 清单?任何信息都会很棒,这是我当前的 FFMPEG 命令(工作)
请注意,$变量是 bash 脚本的输入,用于设置输入文件、比特率和比例。
/usr/bin/ffmpeg \
-re \
-i $1 \
-an \
-c:v libx264 \
-b:v $7 \
-b:a 196k \
-strict -2 \
-movflags faststart \
-pix_fmt yuv420p \
-vf "scale='$4:trunc(ow/a/2)*2'" \
-flags -global_header \
-map 0 \
-f segment \
-segment_time 5 \
-segment_list test.m3u8 \
-segment_format mpegts \
$2%05d.mp4
Run Code Online (Sandbox Code Playgroud) 此用例是一项服务,手动将一系列未压缩的 .wav 媒体片段编码为.m4s片段,以便通过MPEG-DASH广播,使用ffmpeg将 .wav 压缩为 .aac,并使用sannies/mp4parser将 aac 音频组装为 .m4s 片段。 m4s媒体片段。
我创建了这个公共 GitHub 项目来完整重现该问题。
例如,下面是自定义CustomFragmentMp4Builder.java类。
至关重要的是,我们能够使用序列号(索引)来指定这个单个 .m4s 片段,我们将为每个媒体片段手动递增该序列号。
目标是构建一个包含框类型、和 的.m4s片段。作为参考,我使用mp4parser来检查通过 生成的.m4s片段。该规范可在此处以 .yaml 文件形式提供SegmentTypeBoxSegmentIndexBoxMovieFragmentBoxffmpeg -f hls
我的实现创建 MP4 时没有错误。但是,当单元测试尝试读取 ChunkMp4Builder 刚刚写入临时文件夹的文件时:
java.lang.RuntimeException: A cast to int has gone wrong. Please contact the mp4parser discussion group (3724673092)
at org.mp4parser.tools.CastUtils.l2i(CastUtils.java:30)
at org.mp4parser.support.AbstractBox.parse(AbstractBox.java:97)
at org.mp4parser.AbstractBoxParser.parseBox(AbstractBoxParser.java:116)
at org.mp4parser.BasicContainer.initContainer(BasicContainer.java:107)
at …Run Code Online (Sandbox Code Playgroud) mpeg-dash ×10
html5-video ×4
ffmpeg ×3
javascript ×2
media-source ×2
video ×2
chromecast ×1
dash.js ×1
drm ×1
encryption ×1
ffmpeg-php ×1
fmp4 ×1
google-cast ×1
html ×1
mp4 ×1
mp4parser ×1
mpeg ×1
php ×1
webm ×1