从一个字节数组中流式传输MP3

时间:2012-09-10 02:31:26

标签: ios streaming

我有一个包含媒体文件的网络服务器,就像收音机一样。需要设计iOS客户端应用程序来播放这些文件。

问题是我只能将内容作为字节数组提供,因为有时候,网络服务器本身并不拥有媒体,并在发送时下载它。我正在考虑每隔x个字节使用Json请求。

iOS中是否有本机功能可以处理来自字节数组的MP3流。我对iOS的知识很少,所以我想确保它可以和Apple-Store兼容,从一个字节数组中流式传输mp3。

2 个答案:

答案 0 :(得分:1)

看一下来自matt gallagher的音频流。这可能是一个好的开始。

http://cocoawithlove.com/2008/09/streaming-and-playing-live-mp3-stream.html?m=1

答案 1 :(得分:0)

可以使用像代理一样的网络服务器来发送文件,这是我找到的方法,这样我的服务器就会以与从第三方服务器接收文件相同的速率发送文件。

Private Sub SendFile(ByVal url As String)
Dim stream As System.IO.Stream = Nothing
Dim bytesToRead As Integer = 10000
Dim buffer() As Byte = New Byte((bytesToRead) - 1) {}

Try

    Dim fileReq As System.Net.WebRequest = CType(System.Net.HttpWebRequest.Create(url), System.Net.HttpWebRequest)
    Dim fileResp As System.Net.HttpWebResponse = CType(fileReq.GetResponse, System.Net.HttpWebResponse)
    If (fileReq.ContentLength > 0) Then
        fileResp.ContentLength = fileReq.ContentLength
    End If
    stream = fileResp.GetResponseStream
    Dim resp As System.Web.HttpResponse = HttpContext.Current.Response
    resp.ContentType = "application/octet-stream"
    resp.AddHeader("Content-Disposition", ("attachment; filename=\""" + ("mp3" + "\""")))
    resp.AddHeader("Content-Length", fileResp.ContentLength.ToString)
    Dim length As Integer = 1000000
    While (length > 0)
        If resp.IsClientConnected Then
            length = stream.Read(buffer, 0, bytesToRead)
            resp.OutputStream.Write(buffer, 0, length)
            resp.Flush()
            buffer = New Byte((bytesToRead) - 1) {}
        Else
            length = -1
        End If        
    End While
Catch
    stream.Close()
Finally
    If (Not (stream) Is Nothing) Then
        stream.Close()
    End If
End Try
Response.End()
End Sub