Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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
flowplayer flash搜索第二次出错_Flash_Flowplayer_Seek - Fatal编程技术网

flowplayer flash搜索第二次出错

flowplayer flash搜索第二次出错,flash,flowplayer,seek,Flash,Flowplayer,Seek,我有一个问题,flowplayer的seek方法不会精确到指定的秒数,而是大约8秒,而不是10秒 很明显,点击链接后,在到达提示点之前,会有几秒钟的播放时间,也可以通过检查flowplayer控制栏中的时间来确认 提前感谢您的帮助。当Flowplayer搜索到当前剪辑的指定时间时,它将从附近的关键帧开始播放 关键帧概念在关于伪流()的Flowplayer页面上进行了描述: 关键帧是以给定间隔插入到视频剪辑中的完整视频帧(或图像)。关键帧之间的帧是“部分”的,因为它们需要显示其他帧(参考帧)。间

我有一个问题,flowplayer的seek方法不会精确到指定的秒数,而是大约8秒,而不是10秒

很明显,点击链接后,在到达提示点之前,会有几秒钟的播放时间,也可以通过检查flowplayer控制栏中的时间来确认


提前感谢您的帮助。

当Flowplayer搜索到当前剪辑的指定时间时,它将从附近的关键帧开始播放

关键帧概念在关于伪流()的Flowplayer页面上进行了描述:

关键帧是以给定间隔插入到视频剪辑中的完整视频帧(或图像)。关键帧之间的帧是“部分”的,因为它们需要显示其他帧(参考帧)。间隔可能会减小,以适应场景变化和高运动场景。在伪流中,用户只能搜索到存在完整关键帧的位置。如果没有足够的关键帧,则视频不适合进行细粒度搜索。使用好的编码软件,您可以设置关键帧间隔、最小关键帧间隔以及对场景更改的敏感度

我分析了JSFIDLE示例上的示例视频,它的关键帧为0.00秒、4.00秒、7.72秒、10.76秒、13.64秒等等。这就是为什么你的视频在7.72秒开始,而不是10.00秒,当你在寻找10秒


<>为了能够寻找到任何一秒,你应该考虑每秒添加关键帧到你的视频。Ffmpeg通过
-force_key_frames
()支持这一点。

实际上,您问题中提到的行为不是flowplayer的特殊问题,而是与
NetStream
对象和流本身有关

为了更好地理解,让我们从查看示例中使用的元数据开始:

avcprofile = 66
videocodecid = avc1
trackinfo = [object Object],[object Object]
avclevel = 30
duration = 25.309750566893424
width = 500
height = 300
aacaot = 2
videoframerate = 25
moovposition = 44
audiocodecid = mp4a
seekpoints = [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
    0 = [object Object]
        time = 0
        offset = 8556
    1 = [object Object]
        time = 4
        offset = 302415
    2 = [object Object]
        time = 7.72
        offset = 687933
    3 = [object Object]
        time = 10.76
        offset = 1169520
    4 = [object Object]
        time = 13.64
        offset = 1593324
    5 = [object Object]
        time = 17.64
        offset = 2082047
    6 = [object Object]
        time = 21.64
        offset = 2434386
audiosamplerate = 44100
audiochannels = 2
在这里,我们将重点关注
seekpoints
,它表示流(视频)的
关键帧。有时,
元数据
包含
关键帧
而不是
seekpoints
,有时视频既不包含
seekpoints
也不包含
关键帧
,在这种情况下,如果可能的话,我们必须注入它以避免播放问题

在我们的例子中,我们有7个关键帧:

- 1st keyframe : at 0:00
- 2nd keyframe : at 0:04
- 3rd keyframe : at 0:07.72
- 4th keyframe : at 0:10.76
- 5th keyframe : at 0:13.64
- 6th keyframe : at 0:17.64
- 7th keyframe : at 0:21.64
因此,当看到以下定义时:

查找最靠近指定位置的关键帧(在视频行业中也称为I帧)。关键帧放置在距流开始的偏移处(以秒为单位)

我们可以理解,
NetStream
对象将转到指定位置或时间最近的关键帧,我们可以说在指定时间之前最近的关键帧。这就是为什么,当您尝试搜索到
第10秒时,播放器将直接转到第2秒
7.72
处的关键帧。此外,如果您尝试进入
15
秒,播放器将从
13.64
处的关键帧开始播放

那么如何避免这样的问题呢

  • 每秒放置一个关键帧,它直接作用于视频文件的大小。为此,您可以使用
    ffmpeg
    ,例如,使用以下命令:

    ffmpeg-i original_video.mp4-force_key_frames“expr:gte(t,n_forced*1)”new_video.mp4

    当然,您必须使命令适应您的编码预设

  • 使用流媒体服务器,如Adobe Media server、Wowza、Red5。。。您可以对其进行配置以避免此类问题

  • 使用带有特定模块的web服务器来流式传输视频,例如针对Apache的H264流式传输模块、Nginx http mp4模块


希望所有这些都能对你有所帮助。

也许这会对你有所帮助:这很有道理。感谢您花额外的时间解释一些缓解这种行为的方法。好消息。
- 1st keyframe : at 0:00
- 2nd keyframe : at 0:04
- 3rd keyframe : at 0:07.72
- 4th keyframe : at 0:10.76
- 5th keyframe : at 0:13.64
- 6th keyframe : at 0:17.64
- 7th keyframe : at 0:21.64