写入时将文件推送到webbrowser

2024-09-12 10:23:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个后台ffmpeg进程,它正在输出一个音频文件,我想把这个文件推到用户的web浏览器,同时ffmpeg继续在文件上写。我尝试了下面的,但是这个发送0字节的文件。在

// open the file in a binary mode
$fp = fopen($fname, 'rb');

// send the right headers
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($fname));
ob_end_clean();
fpassthru($fp);
exit;

无法从PHP/Python启动ffmpeg并在此处捕获输出。在


Tags: 文件the用户web字节进程浏览器open
1条回答
网友
1楼 · 发布于 2024-09-12 10:23:44

在这里,fpassthru函数不能起作用。此外,还需要知道文件何时完成。在

文件读取功能在到达文件结尾时停止。如果有一个并发的编写器增加了文件的长度,那么读卡器在看到EOF之前会走多远是不确定的。此外,没有明确的方法-通过文件操作-知道文件编写器是否完成。在

尝试使用如下循环(psuedo代码)在超时的情况下进行读取可能是可行的:

LOOP
    READ bytes
    IF count read == 0
    THEN
        SLEEP briefly
        INCREMENT idle_count
    ELSE
        SET idle_count = 0
        WRITE
    END IF
UNTIL ( idle_count == 10 )

如果有帮助的话,我可以把它放到PHP代码中。在

下面是PHP代码,它使用两个文件in.datout.dat

^{pr2}$

注意睡眠的奇怪位置是为了防止在最后一次尝试读取后的一秒钟内睡着。在

为此,我建议将空闲超时限制设置为大于10。在

相关问题 更多 >