【发布时间】:2014-05-28 12:20:48
【问题描述】:
正如标题所示,我正在创建一个客户端/服务器应用程序,其中服务器(PHP)读取由 ffmpeg 写入的文件,然后将其输出到客户端(JAVA)。我已经成功地在 php 中编写了启动 ffmpeg 的服务器脚本,然后在一段时间后开始读取文件并同时将其发送到 JAVA 客户端,问题是一段时间后客户端停止接收任何类型的数据和然后就退出,例如,如果我有一个 5MB 的文件,它只会读取 12KB 然后退出。有人可以告诉这里可能是什么问题吗?它是在服务器端还是在客户端。 对于参考资料,我附上了 php 中文件代码的读取和客户端代码。
FFMPEG 转换文件时读取文件的代码(PHP):
$file = 'D:\\'.$destination;
$fp = @fopen($file, 'r');
//ob_end_clean();
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Cache-control: private");
header('Pragma: private');
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header('Content-Length: ' . filesize($file));
$buffer = 4096;
while(!feof($fp)) {
usleep(300000);
echo fread($fp, $buffer);
ob_flush();
flush();
}
fclose($fp);
exit();
读取PHP传输的文件的代码(JAVA):
URL u = new URL(streamURL);
clientSocket = (HttpURLConnection) u.openConnection();
if( clientSocket.getResponseCode() == HttpURLConnection.HTTP_OK ){
//clientSocket.setReadTimeout(0);
inRemoteStream = clientSocket.getInputStream();
while (((count = inRemoteStream.read(buf)) != -1)) {
offset += count;
System.out.println(offset);
fileOutputStream.write(buf, 0, count);
setVideoOffset(offset, contentLength);
}
如果有人能帮我解决这个问题,我会很高兴:)。
【问题讨论】: