在 Swift 3 中从服务器流式传输 mp3 文件
Posted
技术标签:
【中文标题】在 Swift 3 中从服务器流式传输 mp3 文件【英文标题】:Streaming mp3 file from server in Swift 3 【发布时间】:2017-03-22 06:09:00 【问题描述】:我正在尝试从基于 centOS 的服务器流式传输 mp3 文件,我已将文件上传到服务器并尝试在 AvPlayer 中打开它,但它实际上会下载并播放它,当我在浏览器中打开相同的链接时它能够要流式传输文件,它会在 5 秒左右开始播放。 是否有任何解决方案可以使用 swift 在 ios 应用程序中执行相同的操作?
【问题讨论】:
【参考方案1】:在我的例子中,我使用 php 作为流,这意味着 IOS 应用程序将通过 stream.php 播放 mp3 文件:
<?php
set_time_limit(0);
$filePath = $dirPath . "/songname.mp3";
$strContext=stream_context_create(
array(
'http'=>array(
'method'=>'GET',
'header'=>"Accept-language: en\r\n"
)
)
);
$fpOrigin=fopen($filePath, 'rb', false, $strContext);
header('Content-Disposition: inline; filename="songname.mp3"');
header('Pragma: no-cache');
header('Content-type: audio/mpeg');
header('Content-Length: '.filesize($filePath));
while(!feof($fpOrigin))
$buffer=fread($fpOrigin, 4096);
echo $buffer;
flush();
fclose($fpOrigin);
然后我将 url 传递给 swift:http://domain/stream.php
【讨论】:
ok 试试看,没想到可以这样解决 :D 如果此方法适合您,您只需添加一个Content-Disposition
标头即可。让你的网络服务器来做这件事……通过调用 PHP 来做是低效的。您还需要非常小心...根据您在参数中指定文件名的方式,您的 PHP 脚本可能会从磁盘返回任意文件。以上是关于在 Swift 3 中从服务器流式传输 mp3 文件的主要内容,如果未能解决你的问题,请参考以下文章
在 AVAudioEngine 中从网络流式传输数据,这可能吗?