按照播放列表中的方式流式传输一组视频,过渡过程中没有间隙

5 html javascript php html5-video video.js

我一直在制作一个播放器。我应该通过从目录中读取来显示队列中的一组视频。

这是我的视频文件夹中视频的列出方式:

1.first_video.mp4

2. 第二视频.mp4

3.third_video.mp4

前任。当第一个视频结束时,我必须立即显示第二个视频。

我面临的问题是缓冲下一个视频有间隙。我想要的是将所有这些视频显示为一个视频,这样我就不会在从一个视频切换到另一个视频时出现间隙。

有没有js视频播放器或库可以解决这个问题?

可以用PHP或者js来完成吗?

任何建议表示赞赏。预先感谢。

Tre*_*eid 2

我想要的是将所有这些视频显示为一个视频,这样我就不会在从一个视频切换到另一个视频时出现间隙。

我的第一个想法是按需预处理视频片段。使用剪辑之间的平滑过渡之类的方式合并为一个 MP4 ffmpeg(如果对您的用例可行,则将其缓存)。video.src={pre_processed.mp4}然后您可以在客户端中使用常规。

Bountify 提供了一个使用 ffmpeg 和 ffprobe 交叉淡入淡出两个 mp4 文件的示例(请参阅 LayZee 所选的答案)。下面是该函数的精简版本。您可以递归地使用类似的函数来自定义您自己的过渡并组合目录中的文件。

function smoothtransition(
    $videoFilePath1,
    $videoFilePath2,
    $transitionDurationSeconds,
    $outputFilePath,
    $qualityFormatSettings)
{
    $firstVideoDurationCommand = implode(" ", ["...ffprobe_command..."]);
    $firstVideoFileDuration = (float)shell_exec($firstVideoDurationCommand);
    $firstVideoFileFadeStart = $firstVideoFileDuration
        - (float)$transitionDurationSeconds;
    $crossfadeCommand = implode(" ", ["...ffmpeg_command..."]);

    exec($crossfadeCommand, $output, $returnCode);

    return $returnCode === 1 ? $outputFilePath : $returnCode;
}

// Usage:
smoothtransition(
    "{PATH_TO_YOUR_FOLDER}/first_video.mp4",
    "{PATH_TO_YOUR_FOLDER}/second_video.mp4",
    10,
    "{PATH_TO_YOUR_FOLDER}/output_video.mp4",
    null);

Run Code Online (Sandbox Code Playgroud)