【问题标题】:Stream MP3 from an array of bytes从字节数组流式传输 MP3
【发布时间】:2012-09-10 02:31:25
【问题描述】:

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

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

iOS 中是否有本地函数来处理来自字节数组的 MP3 流。我对 iOS 知之甚少,因此我想确保从字节数组流式传输 mp3 是可能的并且符合 Apple-Store 标准。

【问题讨论】:

    标签: ios streaming


    【解决方案1】:

    看看 matt Gallagher 的音频流媒体。这可能是一个好的开始。

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

    【讨论】:

    • 谢谢。我已经与cocoawithlove.com/2009/06/… 一起阅读了它,但看到它清楚地表明这种解决方法不能处理未定义大小的文件。这不完全是我所说的“从字节数组流式传输”。可悲的是,我已经投降了,只会提供完整的 mp3 文件,重定向到第 3 方服务器上的文件,并在我的服务器不拥有它时同时下载它。
    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      相关资源
      最近更新 更多