我正在尝试创建一个仅提供一次视频的网址。 我会将其用作视频标签的src。
这个想法是。 创建一个临时且有效的URL。 当页面打开时,我检查页面是否有效(有一个带有效寄存器的临时表),获取数据,删除临时寄存器并打开文件。
问题是,如果我删除临时寄存器,在获取数据后,视频流不起作用。
它似乎不像文件描述符那样,当它打开后,即使我删除它保持打开的节点。
我使用的代码是:
$temp=Temporaryvideo::model()->findByAttributes(array("video_id" => "$content", "hash" => "$key"));
if(count($temp)==1){
$video=Video::model()->findByPk($content);
$filename=$video->attributes['video_url'];
header('Pragma: public');
header('Expires: -1');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false); // required for certain browsers );
header('Content-Type: video/mp4');
header('Content-Length: ' . filesize("videos/$filename"));
//$temp->delete();
readfile("videos/$filename");
}
在我从数据库中删除寄存器之前一切正常。有没有办法让网址只有一次有效? 我想这样做是为了避免人们下载视频。我知道他们还有其他方式来获取视频,但这会避免一些人这样做。
将内容类型更改为application / octet-stream解决了这个问题,但我无法继续前进或视频的开头。
答案 0 :(得分:0)
最后,最好的解决方案是使用
$temp=Temporaryvideo::model()->findByAttributes(array("video_id" => "$content", "hash" => "$key"));
if(count($temp)==1){
$video=Video::model()->findByPk($content);
$filename=$video->attributes['video_url'];
header('Pragma: public');
header('Expires: -1');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false); // required for certain browsers );
header('Content-Type: application/octet-stream');
header('Content-Length: ' . filesize("videos/$filename"));
$temp->delete();
readfile("videos/$filename");
}
这样,网址无效,流媒体继续播放。如果您尝试前进或后退视频,它将会中断。