我正在将AVPlayer
用于使用HTTP实时流传输的广播应用程序。现在,我想为该音频流实现一个电平表。最好是显示不同频率的电平表,但是简单的左/右解决方案将是一个很好的起点。
我发现了一些使用AVAudioPlayer
的示例。但是我找不到从AVPlayer
获得所需信息的解决方案。
有人可以为我的问题找到解决方案吗?
编辑我想创建类似这样的东西(但更好)
编辑II
一种建议是使用MTAudioProcessingTap
来获取原始音频数据。我可以使用[[[_player currentItem] asset] tracks]
数组找到示例,在我的情况下,它是一个空数组。另一个建议是使用[[_player currentItem] audioMix]
,它对我来说是null
。
编辑III
经过多年,似乎仍然没有解决方案。我确实取得了进步,所以我要分享。
在设置过程中,我将一个键值观察器添加到playerItem中:
[[[self player] currentItem] addObserver:self forKeyPath:@"tracks" options:kNilOptions context:NULL];
//////////////////////////////////////////////////////
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)changecontext:(void *)context
if ([keyPath isEqualToString:@"tracks"] && [[object tracks] count] > 0) {
for (AVPlayerItemTrack *itemTrack in [object tracks]) {
AVAssetTrack *track = [itemTrack assetTrack];
if ([[track mediaType] isEqualToString:AVMediaTypeAudio]) {
[self addAudioProcessingTap:track];
break;
}
}
}
- (void)addAudioProcessingTap:(AVAssetTrack *)track {
MTAudioProcessingTapRef tap;
MTAudioProcessingTapCallbacks callbacks;
callbacks.version = kMTAudioProcessingTapCallbacksVersion_0;
callbacks.clientInfo = (__bridge void *)(self);
callbacks.init = init;
callbacks.prepare = prepare;
callbacks.process = process;
callbacks.unprepare = unprepare;
callbacks.finalize = finalise;
// more tap setup...
AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
AVMutableAudioMixInputParameters *inputParams = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:audioTrack];
[inputParams setAudioTapProcessor:tap];
[audioMix setInputParameters:@[inputParams]];
[[[self player] currentItem] setAudioMix:audioMix];
}
到目前为止,一切都很好。所有这些都可以,我可以找到正确的轨道并设置inputParams和audioMix等。
但不幸的是,唯一被调用的回调是init回调。其他任何人都不会在任何时候开火。
我尝试了不同的(各种)流源,其中之一是官方的Apple HLS流:http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8
最佳答案
可悲的是,将HLS流与AVFoundation
一起使用并不能使您对音轨有任何控制。我遇到了尝试使HLS流静音的相同问题,事实证明这是不可能的。
读取音频数据的唯一方法是点击AVAudioSession
。
编辑
您可以像这样访问AVAudioSession:
[AVAudioSession sharedInstance]
这是AVAudioSession的文档
关于ios - AVPlayer HLS实时流电平表(显示FFT数据),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19403584/