在 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 中从网络流式传输数据,这可能吗?

将多个 mp3 文件流式传输到 Icecast

将 mp3 从服务器流式传输到 html5 音频时传递持续时间

使用 node js 实时流式传输 MP3 文件

加密的 mp3 流式传输到 Flash SWF

通过 Azure 媒体服务从 Azure 云存储 Blob 流式传输 mp3(仅限音频)