带有 AVPlayer 的音频流
Posted
技术标签:
【中文标题】带有 AVPlayer 的音频流【英文标题】:Audio stream with AVPlayer 【发布时间】:2011-02-19 22:10:37 【问题描述】:有很多适用于 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 是一个带有retain 属性的属性。然后我有一个 IBAction,当单击按钮并尝试播放它时会触发它,这就是它崩溃的地方。
- (IBAction)playButtonPressed
[player play];
我的问题可能是因为我正在尝试播放 MP3 还是什么?当我使用 webview 加载它时,我使用的真实 url 地址可以正常工作。
如果有人能指出一个好的示例(不是来自 Apple 的 AVFoundation 或 AVPlayer 文档,也不是 AVTouchController 项目),我将不胜感激。
谢谢!
【问题讨论】:
【参考方案1】:urlAddress release
导致了我认为的问题。
你没有使用 alloc, init 创建你的 NSString,所以通过释放它你会过度释放它并获得 EXC_BAD_ACCESS。
除非您使用 alloc 和 init 显式创建 NSString,否则创建字符串的便捷方法将自动释放。
【讨论】:
非常感谢!!!!原来,我没有用retain关键字声明属性,而是用assign。复制和粘贴时会发生这种情况:-) @Till:不。问题在于 urlAddress NSString,因为他在自动释放的同时手动释放它。【参考方案2】: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,但是不支持stop。
【讨论】:
OP 询问他在使用AVPlayer
流式传输 MP3 时遇到的特定问题。以上是关于带有 AVPlayer 的音频流的主要内容,如果未能解决你的问题,请参考以下文章