ios - AVPlayer Live stream如何为音频电平计量获取电源
<p><p>我试图在我的应用程序中显示一个仪表图,它使用 AVPlayer 来流式传输实时音频流。</p>
<p>我知道 AVAudioPlayer 有一种方法:
<a href="https://stackoverflow.com/questions/10504428/trying-to-understand-avaudioplayer-and-audio-level-metering" rel="noreferrer noopener nofollow">Trying to understand AVAudioPlayer and audio level metering</a> </p>
<p>它使用 <code>peakPowerForChannel</code></p>
<p>但 AVAudioPlayer 不适用于音频流。</p>
<p>AVPlayer 有类似的东西吗?或者有没有其他方法可以从 AVPlayer 获取功率值?</p>
<p>代码:</p>
<pre><code>[ setCategory:AVAudioSessionCategoryPlayback error:nil];
if (self.avplayer) {
;
}
AVURLAsset *avAsset = [ initWithURL: options:nil];
NSArray *keys = @[@"playable"];
[avAsset loadValuesAsynchronouslyForKeys:keys completionHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
AVPlayerItem *newItem = [ initWithAsset:avAsset];
if (!self.avplayer) {
self.avplayer = [ initWithPlayerItem:newItem];
} else {
;
}
;
;
});
}];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context {
NSLog(@"%@ called",keyPath);
if ( ) {
;
} else if ( ) {
if (self.avplayer.rate) {
NSLog(@"Playing...");
[ postNotificationName:@"currentPlayingChangedToPlay" object:nil];
} else {
NSLog(@"Not playing...");
[ postNotificationName:@"currentPlayingChangedToPause" object:nil];
}
}
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>通常,您可以通过在播放器项目上使用 <code>MTAudioProcessingTap</code> 来获取 <code>AVPlayer</code> 的音频样本,但是您的 Assets 通过 </p>
<ol>
<li><code>AVURLAsset</code> 上的 <code>tracks</code> 属性永远不可用</li>
<li>当您观察并将水龙头附加到您的 <code>playerItem.tracks</code> 的 <code>assetTrack</code> 时,不会给您回电话。</li>
</ol>
<p>我从来没有看到一个很好的解释为什么这对远程 <code>mp3</code> 或 <code>m3u8</code> 流不起作用,而且恼人的是,它确实对其他远程 Assets 有效类型,例如 <code>aac</code>。不公平的是,在视频方面,<a href="https://stackoverflow.com/a/39553034/22147" rel="noreferrer noopener nofollow">AVPlayerItemVideoOutput</a>似乎适用于所有类型的 Assets (除非 DRM 问题)!</p>
<p>那么这会给您带来什么影响呢?一种方法是自己从可以使用 <code>AudioQueue</code> 解码和播放的位置流式传输 mp3 数据,并且<em>还</em>使用上述<code>MTAudioProcessingTap</计算峰值功率</code>。涉及 <code>AudioConverter</code>/<code>AudioUnit</code> 和 <code>AVAudioConverter</code>/<code>AVAudioEngine</code> 的解决方案也浮现在脑海中。</p>
<p>如果仅替换单个属性听起来工作量太大,您可以查看预制解决方案,例如 <a href="https://github.com/tumtumtum/StreamingKit/" rel="noreferrer noopener nofollow">StreamingKit</a>或 <a href="https://github.com/muhku/FreeStreamer" rel="noreferrer noopener nofollow">FreeStreamer</a>然后计算功率。您可能会找到一个为您计算功率的图书馆。如果不是,您可以使用 <a href="https://stackoverflow.com/a/7845967/22147" rel="noreferrer noopener nofollow">this formula</a> 计算 <code>peakPowerForChannel</code> </p></p>
<p style="font-size: 20px;">关于ios - AVPlayer Live stream如何为音频电平计量获取电源,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/39947408/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/39947408/
</a>
</p>
页:
[1]