【问题标题】:Is there a way to force an AVPlayer audio stream to always play live with limited buffering?有没有办法强制 AVPlayer 音频流始终在有限缓冲的情况下实时播放?
【发布时间】:2012-12-09 14:21:33
【问题描述】:

我正在创建一个应用程序,它将从互联网广播流中实时传输音频。

我正在使用 AVPLayer 并创建一个 AVAudioSession 等...

一切正常,除了... AVPlayer 没有 [stop] 功能,只有 [play] 和 [pause]。因此,当用户暂停流时,它会缓冲,当他们点击播放时,它会从他们之前按下暂停时停止的地方开始。

问题...有没有办法强制音频流始终实时播放?

我真的不希望任何超过几秒钟的缓冲......

感谢您的帮助!

【问题讨论】:

    标签: iphone xcode audio-streaming avplayer internet-radio


    【解决方案1】:

    如果您不想缓冲,请尝试通过 MPMovieviewcontroller 播放流式实时音频。

    它是实时流媒体音频/视频的完美播放器。我也在我的一个中使用这个播放器

    播放实时音频流的应用程序。我认为您的所有要求都与此相符。尝试实现

    修改它。它也很容易实现。这是我使用

    播放流音频的代码

    MPMovieview 控制器:

        NSURL *fileURL=[NSURL URLWithString:geturl];
        NSLog(@"fileURL..%@",fileURL);
        moviePlayerController = [[MPMoviePlayerViewController alloc] initWithContentURL:fileURL];
        [moviePlayerController.moviePlayer prepareToPlay];
        moviePlayerController.moviePlayer.shouldAutoplay=YES;
        moviePlayerController.view.frame = self.view.frame;
        [self presentMoviePlayerViewControllerAnimated:moviePlayerController];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MPMoviePlayerDidExitFullscreen:) name:MPMoviePlayerDidExitFullscreenNotification object:nil];
        [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
        [[AVAudioSession sharedInstance] setActive: YES error: nil];
        [moviePlayerController.moviePlayer play];
    
    - (void)MPMoviePlayerDidExitFullscreen:(NSNotification *)notification
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self
                                                        name:MPMoviePlayerDidExitFullscreenNotification 
                                                      object:nil];
    
        [moviePlayerController.moviePlayer stop];
        MPMoviePlayerController *player = [notification object];
        [[NSNotificationCenter defaultCenter] 
         removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification
         object:player];
        [moviePlayerController dismissMoviePlayerViewControllerAnimated];
    }
    

    对于背景播放,我在 info.plist 中添加了这些行。您还可以将这些添加到 plist:

    【讨论】:

    • Vishal,谢谢您的建议。你有任何示例代码,所以我可以看到你是如何实现的? Apple 文档讨论了很多关于视频和视频视图的内容。我只需要在后台播放音频。谢谢!
    • 我编辑了上面的答案,看看我如何使用 MPMovieviewcontroller 播放流音频...
    • 在 .h 文件中制作 MPmovieviecontroller 的适当属性并将其添加到 .m 文件中 #import ...
    猜你喜欢
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 2015-12-13
    相关资源
    最近更新 更多