Javascript MediaSource API和H264视频
Javascript MediaSource API和H264视频,javascript,video,video-streaming,html5-video,media-source,Javascript,Video,Video Streaming,Html5 Video,Media Source,我在使用javascript MediaSource扩展API播放H264视频时遇到问题
我将在下面详细描述该场景
我已经成功地实现了播放音频和视频源的效果
对于vp8、vp9、opus和vorbis编解码器,也可以从范围请求(如果服务器有能力,使用任何字节范围)或分块文件,分块使用shaka packager完成
当源是H264视频时,问题就出现了,在我的例子中有详细说明
编解码器为avc1.64001e和mp4a.40.2,完整编解码器字符串为
视频/mp4;codecs=“avc1.640
我在使用javascript MediaSource扩展API播放H264视频时遇到问题
我将在下面详细描述该场景
我已经成功地实现了播放音频和视频源的效果
对于vp8、vp9、opus和vorbis编解码器,也可以从范围请求(如果服务器有能力,使用任何字节范围)或分块文件,分块使用shaka packager完成
当源是H264视频时,问题就出现了,在我的例子中有详细说明
编解码器为avc1.64001e和mp4a.40.2,完整编解码器字符串为
视频/mp4;codecs=“avc1.64001e,mp4a.40.2”但任何其他avc1编解码器仍存在此问题
我想做的是播放一段10兆字节的完整视频,
byterange curl请求生成的块,使用-o在本地保存响应
下面是shaka packager将此文件作为输入传递的流信息
[0530/161459:INFO:demuxer.cc(88)] Demuxer::Run() on file '10mega.mp4'.
[0530/161459:INFO:demuxer.cc(160)] Initialize Demuxer for file '10mega.mp4'.
File "10mega.mp4":
Found 2 stream(s).
Stream [0] type: Video
codec_string: avc1.64001e
time_scale: 17595
duration: 57805440 (3285.3 seconds)
is_encrypted: false
codec: H264
width: 720
height: 384
pixel_aspect_ratio: 1:1
trick_play_factor: 0
nalu_length_size: 4
Stream [1] type: Audio
codec_string: mp4a.40.2
time_scale: 44100
duration: 144883809 (3285.3 seconds)
is_encrypted: false
codec: AAC
sample_bits: 16
num_channels: 2
sampling_frequency: 44100
language: und
Packaging completed successfully.
区块可通过外部媒体播放器应用程序(如VLC)播放
更重要的是,使用
这是我在Chrome控制台中看到的错误
Uncaught (in promise) DOMException: Failed to load because no supported source was found.
下面是html和js代码(我使用内置的php7.2开发服务器进行了所有本地测试)
视频测试
录像带{
宽度:98%;
高度:300px;
边框:0px实心#000;
显示器:flex;
}
下面是JS代码(scripjs)
classmediatest{
构造函数(){
}
初始化(链接){
this.link=link;
this.media=new MediaSource();
this.container=document.getElementsByTagName('video')[0];
this.container.src=window.URL.createObjectURL(this.media);
返回新承诺(解决=>{
this.media.addEventListener('sourceopen',(e)=>{
this.media=e.target;
返回解析(本);
});
});
}
addSourceBuffer(){
让编解码器='video/mp4;codecs=“avc1.64001e,mp4a.40.2”;
让sourceBuffer=this.media.addSourceBuffer(编解码器);
//这些标题与
我想要实现的是使用MediaSourceAPI播放文件,因为它使用