如何转换视频和音频文件以通过Media Source Extension API流畅播放?

时间:2018-10-04 01:58:42

标签: javascript html5 video ffmpeg media-source

我已经使用Media Source Extension API构建了一个网络视频播放器。我一直在使用PC上的本地视频和音频文件测试视频播放器。一切正常,期望视频继续缓冲。我正在播放从YouTube下载的4k 60fps视频。我的电脑不是4k分辨率,但是视频可以通过YouTube和VLC Media Player流畅播放。我很惊讶为什么我的Media Source Extension Video Player缓冲区即使通过视频和音频文件也无法通过网络检索。我假设我正在使用的视频和音频文件导致了此问题。因此,我将首先解释如何创建视频和音频文件:

  1. 我使用4K视频下载器https://www.youtube.com/watch?v=KaCQ8SQ6ZHQ&t=3shttps://www.4kdownload.com/products/product-videodownloader下载了视频。

  2. 使用{{1}将mkv(对于我来说4K Video Downloader仅允许以mkv格式下载4k 60fps视频)文件转换为mp4 }在ffmpeg中:CMD

  3. 使用ffmpeg -i test.mkv -codec copy test.mp4中的test.mp43840x2160中的3840x1632文件从ffmpeg转换为我首选的4K分辨率CMD。 (不太重要

  4. 使用ffmpeg -i test.mp4 -s 3840x2160 -c:a copy test_changed.mp4中的test_changed.mp4video.mp4的视频和音频分离为audio.mp4的视频和MP4Box的音频:视频-{{ 1}}和音频-CMD

  5. MP4Box -single 1 test_changed.mp4 -out video.mp4MP4Box -single 2 test_changed.mp4 -out audio.mp4拆分为30个拆分部分,每个部分包含5秒钟的视频和音频文件。因此,我最终遇到了{video.mp4audio.mp4),(video_1.mp4audio_1.mp4),(video_2.mp4audio_2.mp4),... ..(video_3.mp4audio_3.mp4),(video_29.mp4audio_29.mp4)。使用video_30.mp4并一一指定audio_30.mp4中每个部分的时间范围:

    [对于第1部分:ffmpegCMD]

    [对于第2部分:ffmpeg -ss 00:00:00 -to 00:00:05 -i video.mp4 video_1.mp4ffmpeg -ss 00:00:00 -to 00:00:05 -i audio.mp4 audio_1.mp4],

    [对于第3部分:ffmpeg -ss 00:00:05 -to 00:00:10 -i video.mp4 video_2.mp4ffmpeg -ss 00:00:05 -to 00:00:10 -i audio.mp4 audio_2.mp4],

    .....

    [对于第29部分:ffmpeg -ss 00:00:10 -to 00:00:15 -i video.mp4 video_3.mp4ffmpeg -ss 00:00:10 -to 00:00:15 -i audio.mp4 audio_3.mp4]

    [对于第30部分:ffmpeg -ss 00:02:20 -to 00:02:25 -i video.mp4 video_29.mp4ffmpeg -ss 00:02:20 -to 00:02:25 -i audio.mp4 audio_29.mp4]。

  6. 使用ffmpeg -ss 00:02:25 -to 00:02:30 -i video.mp4 video_30.mp4中的ffmpeg -ss 00:02:25 -to 00:02:30 -i audio.mp4 audio_30.mp4对视频和音频部分进行分段(据我所知,分段的MP4Box文件仅是通过Media Source Extension API播放的文件) :

    [对于第1部分:CMDmp4]

    [对于第2部分:MP4Box -dash 1000 -rap -frag-rap video_1.mp4MP4Box -dash 1000 -rap -frag-rap audio_1.mp4],

    [对于第3部分:MP4Box -dash 1000 -rap -frag-rap video_2.mp4MP4Box -dash 1000 -rap -frag-rap audio_2.mp4],

    .....

    [对于第29部分:MP4Box -dash 1000 -rap -frag-rap video_3.mp4MP4Box -dash 1000 -rap -frag-rap audio_3.mp4]

    [对于第30部分:MP4Box -dash 1000 -rap -frag-rap video_29.mp4MP4Box -dash 1000 -rap -frag-rap audio_29.mp4]。

  7. 我收到每个文件的碎片文件,其中包含“ _dashinit”。对于第1部分:MP4Box -dash 1000 -rap -frag-rap video_30.mp4MP4Box -dash 1000 -rap -frag-rap audio_30.mp4。这些是我通过Media Source Extension API播放的文件。

因此,我将这些文件附加到我的video_1_dashinit.mp4中,并与audio_1_dashinit.mp4一起播放。我在此处提供了sourceBuffers文件(https://drive.google.com/file/d/1tyPBTxgpS601Xs5VEWznYhWw9PwhMHsB/view?usp=sharing),其中包含测试样本。

我在video中使用此命令来运行test.zip并测试我的文件:CMD

任何人都可以使用此测试示例,并查看视频是否也在为它们缓冲。请针对我做错的任何事情发表评论,或者帮助我为Chrome的可播放性构建更好的5秒视频和音频文件。谢谢

0 个答案:

没有答案