【发布时间】:2017-03-22 06:09:00
【问题描述】:
我正在尝试从基于 centOS 的服务器流式传输 mp3 文件,我已将文件上传到服务器并尝试在 AvPlayer 中打开它,但它实际上会下载并播放它,当我在浏览器中打开相同的链接时它能够要流式传输文件,它会在 5 秒左右开始播放。 是否有任何解决方案可以使用 swift 在 iOS 应用程序中执行相同的操作?
【问题讨论】:
标签: ios swift3 avplayer audio-streaming
我正在尝试从基于 centOS 的服务器流式传输 mp3 文件,我已将文件上传到服务器并尝试在 AvPlayer 中打开它,但它实际上会下载并播放它,当我在浏览器中打开相同的链接时它能够要流式传输文件,它会在 5 秒左右开始播放。 是否有任何解决方案可以使用 swift 在 iOS 应用程序中执行相同的操作?
【问题讨论】:
标签: ios swift3 avplayer audio-streaming
在我的例子中,我使用 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
【讨论】:
Content-Disposition 标头即可。让你的网络服务器来做这件事……通过调用 PHP 来做是低效的。您还需要非常小心...根据您在参数中指定文件名的方式,您的 PHP 脚本可能会从磁盘返回任意文件。