如何在PHP中添加视频片段(流)[Laravel]

cuxqih21  于 2023-05-27  发布在  PHP
关注(0)|答案(1)|浏览(226)

这是我第一次处理视频,有点不知所措。

问题

我想能够记录用户的屏幕,每5秒发送录制的屏幕到我的后端服务器。然后,在我的后端服务器上,每5秒添加一个完整的视频。
如果我发送3部分5秒,我想有完整的15秒视频。

我所尝试的

我有以下前端代码:

function accessRecord(id) {
    navigator.mediaDevices.getDisplayMedia({
        audio: false,
        video: true
    }).then(startStream).catch(failedStream)
}

function startStream(stream) {
    const mediaRecorder = new MediaRecorder(stream, {
        // I have tried adding a mimeType as well
        // mimeType: 'video/mp4'
    });

    mediaRecorder.start(5000);

    mediaRecorder.ondataavailable = (e) => {
        fetch('http://localhost/api/session/12/video/stream', {
            method: 'POST',
            body: new Blob([e.data]),
        }).then(() => {
            console.log('success')
        }).catch((e) => {
            console.log('error')
            console.log(e);
        })
    };
}

然后,在我的后端服务器[Laravel]上,我执行以下逻辑:

Route::post('session/{id}/video/stream', function (Request $request) {
    $videoData = $request->getContent();

    $filename = 'video_uuid-video.mp4';

    if (!file_exists(storage_path('app/videos/' . $filename))) {
        touch(storage_path('app/videos/' . $filename));
    }

    \Illuminate\Support\Facades\Storage::append('videos/' . $filename, $videoData);

    return response()->json(['message' => 'Video frame uploaded successfully']);
});

每当我停止流媒体,并尝试在我的Mac(MacOS)上打开视频时,视频无法打开:

我不知道我做错了什么。我想记录每5秒的视频,然后附加到当前的视频,并在年底(当流结束),我想能够播放视频。

yr9zkbsy

yr9zkbsy1#

你不能合并或追加视频文件到另一个视频文件使用正常追加一样追加文本文件。
您需要一个编码器,例如FFMPEG
下面是示例代码:

$existing_file = 'video_uuid-video.mp4';
    $filename = rand(0,9999999).".mp4";

    if (!file_exists(storage_path('app/videos/'.$filename))) {
        touch(storage_path('app/videos/'.$filename));
    }

    Storage::put('videos/'.$filename, $videoData);
    shell_exec("ffmpeg -i $filename -i $existing_file -filter_complex \"concat=n=2:v=0:a=1\" -vn -y output.mp4");

相关问题