Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cross browser 在HLS跨浏览器播放h.264 mpeg ts的情况下,如何在不跳过任何帧的情况下逐帧执行?_Cross Browser_H.264_Video.js_Http Live Streaming_Mpeg2 Ts - Fatal编程技术网

Cross browser 在HLS跨浏览器播放h.264 mpeg ts的情况下,如何在不跳过任何帧的情况下逐帧执行?

Cross browser 在HLS跨浏览器播放h.264 mpeg ts的情况下,如何在不跳过任何帧的情况下逐帧执行?,cross-browser,h.264,video.js,http-live-streaming,mpeg2-ts,Cross Browser,H.264,Video.js,Http Live Streaming,Mpeg2 Ts,我似乎无法通过视频进入某些帧,比如00:00:04:24 // javascript videojs("player").currentTime(4.96); // for 25 fps video 这是发生在每一秒的任何视频关闭共和党长度25 我想要实现的就是当我的用户觉得需要时,一帧一帧地(不跳过任何一帧)浏览视频 我正在使用的东西: videojs 5.11.9/5.19.1 videojs contrib hls 4.0.3/5.4.1 videojs逐帧 Chrome 57.0.2

我似乎无法通过视频进入某些帧,比如00:00:04:24

// javascript
videojs("player").currentTime(4.96); // for 25 fps video
这是发生在每一秒的任何视频关闭共和党长度25

我想要实现的就是当我的用户觉得需要时,一帧一帧地(不跳过任何一帧)浏览视频

我正在使用的东西:

  • videojs 5.11.9/5.19.1
  • videojs contrib hls 4.0.3/5.4.1
  • videojs逐帧
  • Chrome 57.0.2987.133(64位)/Firefox 51.0.1(32位)
  • Windows 7(64位)
详细信息(铬) 我把时间码叠加在我正在处理的视频上。幸运的是,我可以在“缺失”帧处暂停视频,这意味着帧就在那里。例如,00:00:03:24。如果我现在调用currentTime()

如果我打电话

videojs("player").currentTime(4.002128);
这就引出了00:00:04:00。所有停留在00:00:04:00的电话也是如此

videojs("player").currentTime(4);    // should be **00:00:03:23**
videojs("player").currentTime(4.04); // should be **00:00:03:24**
videojs("player").currentTime(4.08); // should be **00:00:04:00**, correct
但是这个

videojs("player").currentTime(3.999999999999999);
将带我到00:00:03:23,实际上完全跳过00:00:03:24

奇怪的是,当我把共和党的长度改为50时,同样的事情只会每2秒发生一次。意思是我可以跳到00:00:02:2400:00:04:24,但仍然不能跳到00:00:03:24

videojs("player").currentTime(4);    // should be **00:00:03:23**
videojs("player").currentTime(4.04); // should be **00:00:03:24**
videojs("player").currentTime(4.08); // should be **00:00:04:00**, correct
闭合的GOP长度25(GOP M=2,N=25)的布局每秒钟看起来如下:

易卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜

对于一个闭合的GOP,每秒钟的长度50(gopm=2,N=50)是这样的:

IBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPB

这让我怀疑每一个共和党结束时的p-frame都出了问题

由于我自己对GOP的工作原理了解有限,我搜索了I/p/B框架的其他可能布局。然后我看到打开了GOP。使用ffmpeg,我使用
-flags-cgop重新编码视频,如下所示

开放式GOP M=5,N=25

IBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

开放性GOP M=2,N=50

ibpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpb

这两个开放的共和党视频都可以跳转到任何帧。还有一个问题

开放式共和党“解决方案”的问题 HLS播放列表不再只下载视频的所需/播放部分,而是从一开始就尝试一个接一个地下载视频片段。也许是因为现在每一个共和党的末尾的B帧要求下一个共和党

寻找更多 当我把这个问题打出来的时候,我寻找了更多的答案,发现了。该帖子中的人提出了两件事:

  • 为Chrome重新编码不带B帧的视频
  • IE11、Safari8、Firefox34返回,然后精确搜索帧
  • 下面测试第一个建议

    关闭的GOP M=1,N=25

    IPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP

    闭合GOP M=1,N=50

    IPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP

    两个都成功了!(速度不太快,在Firefox上不起作用)

    详细信息(Firefox) 还记得你的第二个建议吗?起初,当我尝试Firefox与任何GOP长度25的视频,他们都很好(在寻找帧准确)。但在处理GOP长度50(M=1和M=2)和GOP长度25(M=1)时,它的问题与Chrome类似

    但是这个

    videojs("player").currentTime(2); // should be **00:00:02:00**
    
    随机给我00:00:02:0000:00:02:01(偏向后者,同时反复只拨打这一行)

    发现这一点的一个简单方法是使用videojs逐帧连续前进25帧。你会得到00:00:02:0100:00:03:0100:00:04:01,然后突然出现00:00:05:00。在那里停下来,来回移动1帧,您可能无法每次回到00:00:05:00

    编辑部分开始


    在提问之前进行更多搜索数据 遇到。快两年了。还有一个可下载的可变GOP长度的视频样本

    其布局(前几个GOP)

    ibpbpppppp
    IPPP
    IPPBPBPPPP
    ibpppbpp
    IPBPPPP
    ibpppppppppppppbp

    下面是我用来显示框架类型布局的内容 这是一个小的awk程序(iframe.awk)


    编辑部分结束

    问题 很抱歉发了这么长的帖子,谢谢你通读

  • 这是否意味着有些事情需要解决?(虫子?)
  • videojs是否参与了这个bug的创建
  • 编写我们自己的播放器会有帮助吗
  • 在当前的浏览器/脚本版本中,是否可以使用HTML5 videojs HLS player以一种格式跨浏览器(至少是Chrome和Firefox)逐帧搜索
  • (补充问题)是否同意或不同意
  • (补充问题)这是一个整体上不好的问题吗?太久了

  • 感谢您为解决此问题提供的任何帮助和/或建议!谢谢

    你有没有找到一个跨浏览器工作的GOP配置?不幸的是,没有。但我很久以前就停止了搜索,所以我不确定现在是否有任何一个配置可以工作。
    videojs("player").currentTime(2); // should be **00:00:02:00**
    
    // command prompt or bash
    ffprobe -show_frames -select_streams 0 video.ts | awk -f iframe.awk
    
    BEGIN {
        FS="=";i="";
    }
    /pict_type/{
        if (match($2, "I")) {
            print i;
            i=$2;
        } else {
            i=i$2;
        }
    }
    END {
        print i;
    }