相关疑难解决方法(0)

MediaSource错误:此SourceBuffer已从父媒体源中删除

我正在尝试Chrome中提供的新MediaSource API.

我正试图将二进制数据从WebSocket动态附加到视频媒体源.

https://html5-demos.appspot.com/static/media-source.html上的示例开始,我的代码目前是:

var websocket = new WebSocket('ws://localhost:8080');
websocket.binaryType = 'arraybuffer';

var mediaSource = new MediaSource();
var buffer;
var queue = [];

var video = $('.video')[0];
video.src = window.URL.createObjectURL(mediaSource);

mediaSource.addEventListener('sourceopen', function(e) {
  video.play();

  buffer = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.64001E"');

  buffer.addEventListener('updatestart', function(e) { console.log('updatestart: ' + mediaSource.readyState); });
  buffer.addEventListener('update', function(e) { console.log('update: ' + mediaSource.readyState); });
  buffer.addEventListener('updateend', function(e) { console.log('updateend: ' + mediaSource.readyState); });
  buffer.addEventListener('error', function(e) { console.log('error: ' + mediaSource.readyState); });
  buffer.addEventListener('abort', function(e) { console.log('abort: ' + mediaSource.readyState); }); …
Run Code Online (Sandbox Code Playgroud)

javascript html5 media-source

25
推荐指数
1
解决办法
1万
查看次数

将FFMPEG编码为MPEG-DASH(或带有关键帧集群的WebM) - 用于MediaSource API

我目前正在向Chrome发送视频流,以通过MediaSource API播放.

据我了解,MediaSource仅支持使用MPEG-DASH编码的MP4文件,或者支持以关键帧开头的集群的WebM文件(否则会引发错误:媒体段不以关键帧开头).

有没有办法用FFMPEG实时编码MPEG-DASH或关键帧WebM格式?

编辑:

我只是试了一下,ffmpeg ... -f webm -vcodec vp8 -g 1所以每一帧都是一个关键帧.不是理想的解决方案.它现在可以与MediaStream一起使用.有没有办法将段与WebM中的关键帧同步,所以不是每个帧都需要是一个关键帧?


关于WebM/MP4和MediaSource的参考问题:

Media Source Api无法用于自定义webm文件(Chrome版本23.0.1271.97 m)

MediaSource API和mp4

video html5 ffmpeg h.264 webm

18
推荐指数
3
解决办法
3万
查看次数

将媒体源扩展与原始视频帧一起使用

我正在尝试从服务器到浏览器实时实时传输H264视频.H264流不包含在MP4容器内,而是通过原始H264帧的形式找到它到浏览器(通过Web套接字)的方式.

问题是:是否可以使用原始帧而不是MP4或WebM等文件容器来提供媒体源扩展?

诸如MPEG-DASH之类的mp4解决方案在低延迟,多视频同步和我需要实现的其他元素方面不具备我所需的灵活性.

video video-streaming h.264 html5-video media-source

8
推荐指数
1
解决办法
2933
查看次数

FFMPEG中创建碎片MP4的刷新和延迟问题

我正在使用以下命令为html5流创建一个支离破碎的mp4:

-i rtsp://172.20.28.52:554/h264 -vcodec copy -an -f mp4 -reset_timestamps 1 -movflags empty_moov+default_base_moof+frag_keyframe -loglevel quiet -
Run Code Online (Sandbox Code Playgroud)
  1. "-i rtsp://172.20.28.52:554/h264"因为源是来自ip camera的rtp数据包流中的h264.为了测试,摄像机的GOP设置为1(即所有帧都是关键帧)
  2. "-vcodec copy"因为我不需要转码,只能转换到mp4.
  3. "-movflags empty_moov + default_base_moof + frag_keyframe"根据媒体源扩展规范创建一个分段的mp4.
  4. " - "最后为了输出mp4到stdout.我抓住了输出并通过网络套接字将其发送到webclient.

一切都运行良好,期待我试图解决的延迟问题.如果我每次从stdout进入数据时都会记录,并且到达时间戳,我得到这个输出:

16/06/2015 15:40:45.239数据大小= 24

16/06/2015 15:40:45.240得到的数据大小= 7197

16/06/2015 15:40:45.241得到数据大小= 32768

2015年6月16日15:40:45.241数据大小= 4941

2015年6月16日15:40:45.241数据大小= 12606

2015年6月16日15:40:45.241数据大小= 6345

16/06/2015 15:40:45.241得到数据大小= 6339

2015年6月16日15:40:45.242得到数据大小= 6336

2015年6月16日15:40:45.242得到数据大小= 6361

2015年6月16日15:40:45.242获得数据大小= 6337

16/06/2015 15:40:45.242得到数据大小= 6331

2015年6月16日15:40:45.242得到数据大小= 6359

16/06/2015 15:40:45.243得到的数据大小= 6346

16/06/2015 15:40:45.243得到的数据大小= 6336

2015年6月16日15:40:45.243数据大小= 6338

2015年6月16日15:40:45.243得到数据大小= 6357

2015年6月16日15:40:45.243得到数据大小= 6357

16/06/2015 15:40:45.243得到的数据大小= 6322

16/06/2015 15:40:45.243得到数据大小= 6359

2015年6月16日15:40:45.244数据大小= 6349

16/06/2015 …

mp4 ffmpeg video-streaming media-source mpeg-dash

8
推荐指数
1
解决办法
5027
查看次数