我已经使用Media Source Extension API构建了一个网络视频播放器。我一直在使用PC上的本地视频和音频文件测试视频播放器。一切正常,期望视频继续缓冲。我正在播放从YouTube下载的4k 60fps视频。我的电脑不是4k分辨率,但是视频可以通过YouTube和VLC Media Player流畅播放。我很惊讶为什么我的Media Source Extension Video Player缓冲区即使通过视频和音频文件也无法通过网络检索。我假设我正在使用的视频和音频文件导致了此问题。因此,我将首先解释如何创建视频和音频文件:
我使用4K视频下载器https://www.youtube.com/watch?v=KaCQ8SQ6ZHQ&t=3s从https://www.4kdownload.com/products/product-videodownloader下载了视频。
使用{{1}将mkv
(对于我来说4K Video Downloader仅允许以mkv
格式下载4k 60fps视频)文件转换为mp4
}在ffmpeg
中:CMD
。
使用ffmpeg -i test.mkv -codec copy test.mp4
中的test.mp4
将3840x2160
中的3840x1632
文件从ffmpeg
转换为我首选的4K分辨率CMD
。 (不太重要)
使用ffmpeg -i test.mp4 -s 3840x2160 -c:a copy test_changed.mp4
中的test_changed.mp4
将video.mp4
的视频和音频分离为audio.mp4
的视频和MP4Box
的音频:视频-{{ 1}}和音频-CMD
。
将MP4Box -single 1 test_changed.mp4 -out video.mp4
和MP4Box -single 2 test_changed.mp4 -out audio.mp4
拆分为30个拆分部分,每个部分包含5秒钟的视频和音频文件。因此,我最终遇到了{video.mp4
,audio.mp4
),(video_1.mp4
,audio_1.mp4
),(video_2.mp4
,audio_2.mp4
),... ..(video_3.mp4
,audio_3.mp4
),(video_29.mp4
,audio_29.mp4
)。使用video_30.mp4
并一一指定audio_30.mp4
中每个部分的时间范围:
[对于第1部分:ffmpeg
,CMD
]
[对于第2部分:ffmpeg -ss 00:00:00 -to 00:00:05 -i video.mp4 video_1.mp4
,ffmpeg -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.mp4
,ffmpeg -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.mp4
,ffmpeg -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.mp4
,ffmpeg -ss 00:02:20 -to 00:02:25 -i audio.mp4 audio_29.mp4
]。
使用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部分:CMD
,mp4
]
[对于第2部分:MP4Box -dash 1000 -rap -frag-rap video_1.mp4
,MP4Box -dash 1000 -rap -frag-rap audio_1.mp4
],
[对于第3部分:MP4Box -dash 1000 -rap -frag-rap video_2.mp4
,MP4Box -dash 1000 -rap -frag-rap audio_2.mp4
],
.....
[对于第29部分:MP4Box -dash 1000 -rap -frag-rap video_3.mp4
,MP4Box -dash 1000 -rap -frag-rap audio_3.mp4
]
[对于第30部分:MP4Box -dash 1000 -rap -frag-rap video_29.mp4
,MP4Box -dash 1000 -rap -frag-rap audio_29.mp4
]。
我收到每个文件的碎片文件,其中包含“ _dashinit”。对于第1部分:MP4Box -dash 1000 -rap -frag-rap video_30.mp4
和MP4Box -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秒视频和音频文件。谢谢