Swift Radio Streaming AVPlayer

Posted

技术标签:

【中文标题】Swift Radio Streaming AVPlayer【英文标题】: 【发布时间】:2014-11-22 09:54:20 【问题描述】:

我想在 Swift 中从 Internet 流式传输音频,但还没有找到正确的功能示例。

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吗? 你确定playerItem在播放命令后还活着吗?快速尝试是在播放命令后添加sleep(10)。这将使线程保持活动状态十秒钟。如果幸运的话,可能会有一些声音。 【参考方案1】:

我用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 Lib in GitHub

【讨论】:

以上是关于Swift Radio Streaming AVPlayer的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中为 Radio Live Streaming 服务实现 HLS

来自 url 的 Swift.Streaming 音频,错误代码 -999 “已取消”

播放现场 TuneIn Radio URL iOS Swift

强制 Android 使用 RTSP/AVP/TCP 交错

如何在 macOS 应用程序中使用 swift 播放视频?

Swift 2 AVPlayer - 播放下一个视频 上一个视频