当我尝试两次请求相同的视频流时,我遇到了某种超时,因此我认为分叉可以解决我的问题。
在开始之前,我将使用第三方类来传输视频流。使用我自己的路由系统可以工作,但我有上述问题。
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
}
}
出现的问题是响应包不包含任何数据,除了正确的标头等。有谁知道为什么会这样?
参数$res,只是另一个类设置标头,然后调用顶部链接的VideoStream类。
没有必要开始使用 forks 和 pthreads 来处理这个问题,即使我这样做了也不能解决我的问题。
发生的情况是,当我尝试刷新页面时,在缓冲完成之前它不会让我刷新。
那么如何停止在 html5 视频标签中缓冲呢?很简单,您必须暂停视频,缓冲将停止使您能够刷新页面。
甚至在开始视频之前停止缓冲区以避免进一步的问题也很重要(例如视频下次不会加载,不幸的是我不知道为什么会发生这种情况)。使用 Angular.js我通过收听页面刷新、将音量设置为 0(播放时静音)、启动视频并暂停它来解决这个问题。它工作得很好,这是我是如何做到的:
angular.element($window).on('beforeunload', function (event) {
vp.volume = 0;
vp.play();
vp.pause();
});