Mar*_*c W 12 iphone cocoa-touch id3 avfoundation http-live-streaming
我一直很难从通过Live HTTP Streaming流式传输的MP3中提取ID3信息(使用Wowza媒体服务器,如果有人好奇的话).我知道标签(现在是专辑标签和专辑图片标签)正确地嵌入到每个文件段中,因为当我手动下载它们时,我可以.m3u在服务器生成的索引文件中列出的每个段中看到它们.
我正在使用这些AVFoundation类来执行此操作,我将其设置为:
- (void)initializeAudioStream {
NSURL *streamUrl = [NSURL URLWithString:self.urlField.text];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:streamUrl];
self.musicPlayer = [AVPlayer playerWithPlayerItem:playerItem];
self.musicPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;
[self.musicPlayer addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:NULL];
}
Run Code Online (Sandbox Code Playgroud)
一旦我的KVO方法被触发,我开始播放self.musicPlayer并且addPeriodicTimeObserverForInterval每1/4秒呼叫一次.正是在这种方法中,我尝试提取ID3元数据.
我已经尝试了在iOS方面我能想到的所有事情来实现这一目标,包括打印出来
self.musicPlayer.currentItem.asset.commonMetadata
Run Code Online (Sandbox Code Playgroud)
以及迭代每个AVAssetTrack实例并打印出他们的元数据.
for (AVAssetTrack *track in self.musicPlayer.currentItem.asset.tracks) {
NSLog(@"Media type of track: %@", track.mediaType);
NSLog(@"Track metadata: %@", track.commonMetadata);
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,该资产总是说有2条轨道.当我打印他们的mediaType财产时,我得到第一个"soun"和第二个"tmet".我的假设是第一个轨道是音频数据本身,第二个轨道是元数据.但是,我只看到一个空数组commonMetadata.
我还在statusOfValueForKey:error轨道上检查属性的状态,并且commonMetadata密钥总是返回AVKeyValueStatusLoaded.
有任何想法吗?我在这里完全失败了.
此外,我目前通过运行iOS 4.2.1的iPhone 4模拟器运行此功能.我还不能把它放在设备上,因为Apple仍在批准我公司的开发者帐户.
而不是使用commonMetadata您可能希望使用尝试timedMetadata在AVPlayerItem:
[playerItem addObserver:self forKeyPath:@"timedMetadata" options:NSKeyValueObservingOptionNew context:NULL];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6185 次 |
| 最近记录: |