【发布时间】:2013-10-24 13:51:26
【问题描述】:
我将AVPlayer 用于使用 HTTP 实时流媒体的广播应用程序。现在我想为那个音频流实现一个电平表。最好的电平表显示不同的频率,但一个简单的左/右解决方案将是一个很好的起点。
我发现了几个使用AVAudioPlayer 的示例。但我找不到从AVPlayer 获取所需信息的解决方案。
有人能想出解决我问题的办法吗?
编辑我想创建这样的东西(但更好)
编辑二
一个建议是使用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
【问题讨论】:
-
电平表需要什么?,如果你在玩直播,@Julian
-
我正在开发一个无线电应用程序,我的客户设计师想要一个用于各种频率的电平表。像这样(但更好)oocities.org/henrym24/eq.gif
-
好的,我从事实时流媒体工作,但不是像这样的音频可视化,我已经发布了一些示例链接的答案,希望您能得到帮助。快乐编码:) @Julian
-
其实不是,谢谢。我假设他流式传输实际的音频文件。仅在 HLS 的情况下不会调用回调。稍后我会更深入地了解并评论那里。
标签: ios objective-c avfoundation media-player avplayer