使用AVPlayer播放音频流

6

对于iOS系统,有很多流媒体应用程序。它们都使用一个播放器,我猜测是AVPlayer。但是似乎找不到一个像样的带有可行示例代码的文档!我相信这只是几行代码的问题,但我就是想不出哪里出了问题...

当尝试调用“播放”方法时,我遇到了EXC_BAD_ACCESS错误。但是URL是好的,并且有一个播放器实例。

- (void)viewDidLoad {
    [super viewDidLoad];

// Load the array with the sample file
NSString *urlAddress = @"http://mystreamadress.mp3";

//Create a URL object.
urlStream = [NSURL URLWithString:urlAddress];   
self.player = [AVPlayer playerWithURL:urlStream];   

[urlAddress release];
}

urlStream是一个具有保留属性的属性。然后我有一个IBAction,当按钮被点击时触发,尝试播放它,这就是它崩溃的地方。

- (IBAction)playButtonPressed
{       
    [player play];  
}

我的问题是否是因为我正在尝试播放MP3或其他原因导致的?当我使用Webview加载它时,我使用的真实URL地址可以正常工作。

如果有人能够向我指出一个好的示例(不是来自苹果公司的AVFoundation或AVPlayer文档,也不是AVTouchController项目),那将非常感激。

谢谢!

2个回答

5

urlAddress release可能是引起问题的原因。

你没有使用alloc、init创建NSString,所以通过释放它来过度释放它并出现EXC_BAD_ACCESS错误。

除非你明确使用alloc和init创建NSString,否则创建字符串的便捷方法会自动释放。


非常感谢!!!结果,我没有用retain关键字声明属性,而是使用了assign。这就是复制粘贴的后果 :-) - Patrice Cote
@Till:不对,问题出在urlAddress这个NSString上,因为他手动释放了它,同时也设置了自动释放。 - pablasso

0
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:fileURL];
//AVPlayer *avPlayer = [[AVPlayer playerWithURL:[NSURL URLWithString:url]] retain];
avPlayer = [[AVPlayer playerWithPlayerItem:playerItem] retain];
//AVPlayerLayer *avPlayerLayer = [[AVPlayerLayer playerLayerWithPlayer:avPlayer] retain];
[avPlayer play];
avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone; 

我用这种方式播放mp3,但它不支持停止。


1
OP在询问他使用AVPlayer进行流媒体播放MP3时遇到的特定问题。 - user577537

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接