临时视频流URL

时间:2016-03-22 01:02:54

标签: php video yii

我正在尝试创建一个仅提供一次视频的网址。 我会将其用作视频标签的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解决了这个问题,但我无法继续前进或视频的开头。

1 个答案:

答案 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");
}

这样,网址无效,流媒体继续播放。如果您尝试前进或后退视频,它将会中断。