objective-c - 在 AVPlayer 中静音 HTTP 实时流

标签 objective-c ios streaming avplayer http-live-streaming

我已经尝试解决这个问题整整 48 小时了,但一无所获。我有 2 个 AVPlayer 对象播放不同的 http 直播流。显然,我不希望它们同时播放音频,因此我需要一种方法来将其中一个视频静音。

苹果 suggests this用于使 AVPlayer 中播放的音轨静音...

NSMutableArray *allAudioParams = [NSMutableArray array];
for (AVPlayerItemTrack *track in [_playerItem tracks]) {
    if ([track.assetTrack.mediaType isEqualToString:AVMediaTypeAudio]) {
        AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters];
        [audioInputParams setVolume:0.0 atTime:CMTimeMakeWithSeconds(0,1)];
        [audioInputParams setTrackID:[track.assetTrack trackID]];
        [allAudioParams addObject:audioInputParams];
        // Added to what Apple Suggested
        [track setEnabled:NO];
    }
}

AVMutableAudioMix *audioZeroMix = [AVMutableAudioMix audioMix];
[audioZeroMix setInputParameters:allAudioParams];
[_playerItem setAudioMix:audioZeroMix];

当这不起作用时(经过多次迭代),我找到了 AVPlayerItemTrack 的 enabled 属性并尝试将其设置为否。也没什么。这甚至没有注册为执行任何操作,因为当我尝试 NSLog(@"%x",track.enabled) 时,它仍然显示为 1。

我不知所措,我想不出我可以阅读并重新阅读另一篇文档以获得好的答案。如果有人可以提供帮助,那就太好了。

*更新:我联系了 Apple,根据 AVFoundation 团队的说法,不可能将 HLS 视频的轨道静音或禁用。我个人觉得这是一个错误,所以我提交了 bug report (你应该做同样的事情来告诉 Apple 这是一个问题)。你也可以 尝试提交 feature enhancement request通过他们的反馈页面。

最佳答案

新的 iOS 7 回答: AVPlayer 现在有两个新属性“音量”和“静音”。使用那些!


这是 iOS 7 之前的生活的原始答案:

我一直在处理同样的事情。我们创建了静音流和带音频的流。要静音或取消静音,您可以调用 [player replaceCurrentItemWithPlayerItem:muteStream]

我还提交了错误报告。看起来 AVPlayer 在 MacOS 10.7 上有这个功能,但它还没有在 iOS 上实现。

AVAudioMix is documented not to work on URL assets here

当然我还是试过了,和你一样,我发现它真的行不通。

关于objective-c - 在 AVPlayer 中静音 HTTP 实时流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11519516/

相关文章:

ios - 如何通过 CocoaPods 安装后 Hook 修改 OTHER_LDFLAGS?

java - StreamCorruptedException,当使用 ObjectInputStream 时

objective-c - 为什么 MPMoviePlayerController 没有暂停?

iphone - 如何使用左侧或右侧移动UILabel?

ios - NativeScript 扩展了 UNUserNotificationCenter 委托(delegate)

iphone - Apple Appstore 申请提交要求

ios - 使用单例作为数据管理器类不好吗?

objective-c - 如何将文本添加到不可编辑的 TextView

c++ - 在服务器之间传输快速变化的数据

c# - 从 C# 程序在 VLC 中启动流