objective-c – 如何使用强制(MP3)类型从URL制作QTMovie播放文件?

objective-c – 如何使用强制(MP3)类型从URL制作QTMovie播放文件?,第1张

概述我正在使用QTKit逐步从URL下载和播放MP3.根据 this documentation,这是我应该用来实现的代码: NSURL *mp3URL = [NSURL URLWithString:@"http://foo.com/bar.mp3"];NSError *error = nil;QTMovie *sound = [[QTMovie alloc] initWithURL:mp3UR 我正在使用QTKit逐步从URL下载和播放MP3.根据 this documentation,这是我应该用来实现的代码:

NSURL *mp3URL = [NSURL URLWithString:@"http://foo.com/bar.mp3"];NSError *error = nil;QTMovIE *sound = [[QTMovIE alloc] initWithURL:mp3URL error:&error];[sound play];

这有效,并且完全符合我的要求 – MP3 URL被懒散地下载并立即开始播放.但是,如果URL没有“.mp3”路径扩展名,则会失败:

NSURL *mp3URL = [NSURL URLWithString:@"http://foo.com/bar"];NSError *error = nil;QTMovIE *sound = [[QTMovIE alloc] initWithURL:mp3URL error:&error];[sound play];

没有给出错误,没有引发异常;声音的持续时间只是设置为零,没有任何播放.

我找到解决此问题的唯一方法是通过手动加载数据并使用QTDataReference强制类型

NSURL *mp3URL = [NSURL URLWithString:@"http://foo.com/bar"];NSData *mp3Data = [NSData dataWithContentsOfURL:mp3URL];QTDataReference *dataReference =     [QTDataReference dataReferenceWithreferencetoData:mp3Data                                                 name:@"bar.mp3"                                             MIMEType:nil];NSError *error = nil;QTMovIE *sound = [[QTMovIE alloc] initWithDataReference:dataReference error:&error];[sound play];

然而,这迫使我在开始播放之前同步完全下载所有MP3,这显然是不可取的.有没有办法解决?

谢谢.

编辑

实际上,路径扩展似乎与它无关; Content-Type根本没有在http标头中设置.即便如此,后一种代码仍有效,而前者则无效.任何人都知道一种方法来解决这个问题,而无需访问服务器?

编辑2

任何人?我无法在任何地方找到相关信息,谷歌现在令人沮丧地将此页面显示为我的大多数查询的最佳结果…

解决方法 两个想法. (第一个有点Hacky):
要解决缺少的内容类型,您可以嵌入一个小的Cocoa网络服务器,补充缺少的标题字段并将NSURL路由到该“代理”.

一些Cocoa http服务器实现:

> http://code.google.com/p/cocoahttpserver/
> @L_301_2@
> http://culturedcode.com/cocoa/

第二个是切换到较低级别的框架(从QTKit到AudioToolBox).
你需要更多的代码,但是有很多关于如何使用AudioToolBox流式传输mp3的资源.
例如.:
http://cocoawithlove.com/2008/09/streaming-and-playing-live-mp3-stream.html

就个人而言,我会选择第二种选择. AudioToolBox并不像QTKit那么简单,但它为您的问题提供了一个干净的解决方案.它也适用于iOS和Mac OS – 因此您可以找到大量信息.

更新:
你试过用另一个初始化程序吗?例如

+ (ID)movIEWithAttributes:(NSDictionary *)attributes error:(NSError **)errorPtr

您可以插入密钥QTMovIEURLAttribute的URL,也可以通过在该字典中提供其他属性来补偿缺少的内容类型.
这个开源项目有一个QTMovIE类别,其中包含完成类似事情的方法:
http://vidnik.googlecode.com/svn-history/r63/trunk/Source/Categories/QTMovie+Async.m

总结

以上是内存溢出为你收集整理的objective-c – 如何使用强制(MP3)类型从URL制作QTMovie播放文件?全部内容,希望文章能够帮你解决objective-c – 如何使用强制(MP3)类型从URL制作QTMovie播放文件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1009139.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存