我想为React和Symfony4制作的应用程序缓冲音频(mp3)。我遇到的问题是,当我在音频标签HTML5中注入src时,我必须等待下载完成后才能播放音频。
我想,我必须发送StreamedResponse,而不是Response。我想要类似于http://opensource.box.com/spout/guides/symfony-stream-content-large-spreadsheet/的东西,但在我的情况下,总是下载完整的文件,它没有缓冲。
我做了这个代码https://gitlab.com/nitsuga1986/media-buffer。你可以在这里检查:https://www.opoque.com/prueba/sample.html
它工作得很好,但是,如果你检查代码,标签在src中有一个index.php,但是因为我使用Symfony 4,我不能这样做,我只能在src中添加类似这样的东西:<audio src="www.example.com/api/id_file=2" />
我创建了一个新的路由来获取文件ID,在这个路由中,我创建了一个StreamedResponse,但正如我之前所说的,文件是完全下载的。
这是我的控制器方法:
/**
* @Rest\Get("/v1/audio/{id}.{_format}", name="audio_download",
*
* @SWG\Tag(name="Files")
*/
public function downloadAudioAction(Request $request, $id) {
$serializer = $this->get('jms_serializer');
$em = $this->getDoctrine()->getManager();
$theme = [];
$message = "";
$response = new StreamedResponse();
$response->setCallback(function () {
$handle = fopen($id, 'r');
while (!feof($handle)) {
$buffer = fread($handle, 1024);
echo $buffer;ob_flush();
flush();
}
fclose($handle);
});
$response->send();
}
如何添加此功能来缓冲音频?
先谢了
2条答案
按热度按时间dsekswqp1#
我终于得到了解决方案:
bkkx9g8r2#
Symfony
有一个File
助手来猜测文件背后的Mime-Type
,还有一个Stream
专用的class
。给予他们路径和文件名。示例: