php - 软件处理文件时如何开始下载

标签 php download ffmpeg apache2 progressive

我对带有特殊水印的文件进行编码以供用户下载
我希望能够在 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/

相关文章:

C# 窗口渲染 PHP

FFMPEG:我需要音频 channel 7 和 8 作为视频的主要音轨

windows - 我想用 exiftool 更改文件名。至 “Result of adding time zone (+9) to CreateDate”

python - FFMPEG 视频在不完美的情况下损坏

javascript - 我如何记住 php laravel 中的下拉值?

php - 获取当前插入 ID 的 ID

node.js - 如何知道文件下载何时完成?

python - 在使用 Flask 的 python 中,如何写出一个对象以供下载?

php - 如何添加对小数点前 3 位正 float 的验证?

android - 在 Phonegap 中将 Canvas 保存到设备