我对带有特殊水印的文件进行编码以供用户下载
我希望能够在 ffmpeg 编码文件时开始下载。
我有一个创建水印的 php 页面,启动 ffmpeg 并使用 X-sendifle 开始下载
下载不开始,添加 sleep (15)让我们开始下载,我只收到完成的内容
实际上我使用 Apache2 作为带有 X-sendfile mod 的网络服务器
最佳答案
好的,我终于找到了怎么做
使用 X-sendfile 这是一个错误的想法
使用 mp4 这是一个错误的想法,因为在编码结束时,软件会在文件开头重写 4 个字节
所以这是我用来在 ffmpeg 编码输出时发送 webm 或 flv 文件等文件的代码
shell_exec('ffmpeg command');
sleep(2); //wait few second for the software start
$foutput ="where/is/your/output.file";
header('Content-Disposition: attachment; file.name.for.the.user"');
header("Keep-Alive:timeout=200, max=500");
//sending by chunk
set_time_limit(3600);
$file =fopen($foutput , 'r');
$files = fstat($file);
$filesize= $files['size'];
$last = 0;
echo fread($file , $filesize);
sleep(5); //wait a little for the software add new bytes
$last = $filesize;
$files = fstat($file);
$filesize= $files['size'];
$done =0;
while( $done < 2 ){
if ($filesize != $last){
fseek($file , $last);
$read = $filesize - $last ;
echo fread($file , $read);
$last =$filesize;
sleep(5);
$files = fstat($file);
$filesize= $files['size'];
}else{
fclose($file);
return 0;
};
};
我是编码的菜鸟,我的“虽然”有问题,只是代码工作得很好,没有任何问题
不要使用 filesize ,这个命令不喜欢文件大小一直变化并且在这种情况下只返回 4096
下载会很慢,这是正常的,你会逐 block 收到软件用ffmpeg所做的事情,传输速度在200到1200 kb/s之间
关于php - 软件处理文件时如何开始下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35256067/