【发布时间】:2011-10-08 00:01:05
【问题描述】:
我有一个简单的 HTTP 服务器正在运行,它几乎只是以相同大小的块提供 MP3 文件。我正在编写一个 iOS 应用程序(用于测试目的),它基本上采用 URL 并通过MPMovieController 流式传输文件。这是我的示例代码:
MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] init];
[mp setMovieSourceType:MPMovieSourceTypeStreaming];
mp.contentURL = [NSURL URLWithString:@"http://127.0.0.1:8080"];
[mp play];
它有效。但是:在我的 http 服务器上,我看到了多个连接(第一个立即中断,第二个通常流到最后,尽管有时会有第三个连接)。
我知道这不是服务器问题,因为当我这样做时:
NSData *myData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://127.0.0.1:8080"]];
...那么只有 1 个连接完成读取并断开连接。
问题是:为什么 MPMoviePlayerController 需要在完成读取文件之前建立和断开这些连接,为什么不继续等待更多数据写入套接字?我找不到任何可以解释这一点的相关文档:(
附:如果你好奇我为什么需要这个,这里有一个简短的解释:我正在尝试模拟现实生活中的网络场景,其中 MPMovieController 以块的形式接收字节,中间有小的随机长度延迟
【问题讨论】:
-
我对 iOS 开发一点也不熟悉,所以请用一磅盐...但是您是否考虑过
MPMoviePlayerController可能正在重新连接,因为它没有足够的数据继续玩?我也很好奇重新连接之间的时间,以及它们与发送的块的关系。当您使用更大的块时,问题会减轻还是完全消失?能否发一个数据包捕获,让我们看看这个流是否有什么奇怪的地方? -
布拉德,谢谢您的指导。我将检查您提到的内容,并希望得出一个有意义的结论。我会尽快回复详细信息
-
要检查的另一件事是确保流没有严重损坏。如果您在这里或那里丢掉一个字节,播放器将很难同步到流。
标签: iphone objective-c media-player mpmovieplayercontroller audio-streaming