使用 fork 的流媒体视频不 return 内容

Streaming video using fork does not return content

当我尝试两次请求相同的视频流时遇到某种超时,因此我认为分支可以解决我的问题。

在开始之前,我使用的是 third party class for video streams。使用我自己的路由系统是可行的,但我遇到了上述问题。

public function stream ($req, $res) {
    $video = c_video_folder . $req->get_param('id') . '.mp4';

    if (file_exists($video)) {
        $res->videoStream($video);
    } else {
        $res->failure(204); // no content
    }
}

尝试使用叉子后,它看起来像这样:

public function stream ($req, $res) {
    $video = c_video_folder . $req->get_param('id') . '.mp4';

    if (file_exists($video)) {
        $pid = pcntl_fork();
        if ($pid == -1) {
            $res->videoStream($video);
        } else { //async
            $res->videoStream($video);
        }
    } else {
        $res->failure(204); // no content
    }
}

出现的问题是响应包不包含任何数据,除了正确的 headers 等。有谁知道为什么会这样?

PS。参数 $res,只是另一个 class 设置 headers,然后调用顶部链接的 VideoStream class。

没有必要开始使用 forks 和 pthreads 来处理这个问题,即使我这样做也不能解决我的问题。

当我尝试刷新页面时,在缓冲完成之前它不会让我刷新。

那么如何停止在 html5 视频标签中缓冲? 很简单,你必须暂停视频,然后缓冲将停止让你能够刷新页面。

在开始播放视频之前就停止缓冲以避免进一步的问题(例如视频下次无法加载,不幸的是我不知道为什么会这样)也很重要。使用 Angular.js 我通过听页面刷新解决了这个问题,将音量设置为 0(播放时静音),开始播放视频并暂停。 它工作得很好,我是这样做的:

angular.element($window).on('beforeunload', function (event) {
        vp.volume = 0;
        vp.play();
        vp.pause();
    });