Swift无线电流媒体AVPlayer

5
我希望你能够使用Swift从互联网流式传输音频,但目前还没有找到正确的功能性示例。
在Objective-C中,
AVPlayerItem* playerItem =[AVPlayerItem playerItemWithURL:[NSURL URLWithString:streamURL]];
[playerItem addObserver:self forKeyPath:@"timedMetadata" options:NSKeyValueObservingOptionNew context:nil];
music = [AVPlayer playerWithPlayerItem:playerItem];
[music play];

我正在尝试使用Swift进行的操作。
let playerItem = AVPlayerItem(URL:NSURL(string:url))
        var player:AVPlayer!
        player = AVPlayer(playerItem:playerItem)
        player.rate = 1.0;
        player.play()
//this is not working

我尝试添加 playerItem.addObserver(self, forKeyPath: "timedMetadata", options: NSKeyValueObservingOptions.New, context: nil),但是出现了错误。
'一个 AVPlayerItem 类的实例0x16edbd20在键值观察者仍然注册它时已经被释放。当前观察信息:( 上下文:0x0,属性:0x16ea5880> )'
有什么想法可以解决这个问题吗?

你考虑过使用AVAudioPlayer吗? - Zell B.
你确定在播放命令之后playerItem还活着吗?一个快速的尝试是在播放命令之后添加sleep(10)。这将使线程保持活动状态十秒钟。如果你很幸运,可能会有一些声音。 - Mellson
1个回答

2

我使用Swift创建了一个收音机播放器,但是我使用了MediaPlayer框架进行播放。

var radioPlayer = MPMoviePlayerController(contentURL: "YOUR NSURL OBJECT WITH YOUR CUSTOM URL TO STREAM HERE");
radioPlayer.view.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
radioPlayer.view.sizeToFit()
radioPlayer.movieSourceType = MPMovieSourceType.Streaming
radioPlayer.fullscreen = false;
radioPlayer.shouldAutoplay = true;
radioPlayer.prepareToPlay()
radioPlayer.play()
radioPlayer.controlStyle = MPMovieControlStyle.None;

如果您需要从流中获取元数据,则需要观察此通知MPMoviePlayerTimedMetadataUpdatedNotification

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("metadataUpdated:"), name:MPMoviePlayerTimedMetadataUpdatedNotification, object: nil);

func metadataUpdated(n:NSNotification)
{
    if(radioPlayer.timedMetadata != nil && radioPlayer.timedMetadata.count > 0)
    {
        let firstMeta:MPTimedMetadata = radioPlayer.timedMetadata.first as! MPTimedMetadata;
        let data:String = firstMeta.value as! String;
        println(data); //your metadata here
    }
}

使用这个工具,你可以制作自己的收音机播放器。因为我曾经使用过这个收音机,所以我开发了一个库来获取Itunes中音乐的信息。这个库是开源的,因此我只想要一个帮助,如果你发现了问题、错误或更好的解决方案,请修复并推送给所有人。

ItunesSearch库在GitHub上


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