2011-02-23 4 views
12

라이브 스트리밍을 통해 스트리밍되는 MP3에서 ID3 정보를 추출하는 데 어려움을 겪고 있습니다 (호기심이있는 경우 Wowza 미디어 서버 사용). 나는 (수동으로 다운로드 할 때 .m3u에 의해 생성 된 색인 파일에 나열된대로 각 세그먼트에서 볼 수 있기 때문에 태그 (현재 앨범 태그 및 앨범 아트웍 태그)가 각 파일 세그먼트에 올바르게 삽입되고 있음을 알고 있습니다. 섬기는 사람.HTTP 라이브 스트리밍을 통해 MP3에서 ID3 태그 추출

나는이 작업을 수행 할 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]; 
} 

내 KVO 방법이 트리거되면, 내가 self.musicPlayer 재생을 시작하고 내가 각 1 거기에 addPeriodicTimeObserverForInterval 전화/4 초. 이 방법으로 ID3 메타 데이터를 추출하려고합니다.

나는 AVAssetTrack 각각의 인스턴스에 걸쳐뿐만 아니라 반복하는 등

self.musicPlayer.currentItem.asset.commonMetadata 

를 인쇄하고 자신의 메타 데이터를 인쇄를 포함하여,이를 위해 내가 사물의 아이폰 OS 측에서 생각할 수있는 모든 노력을했다.

for (AVAssetTrack *track in self.musicPlayer.currentItem.asset.tracks) { 
    NSLog(@"Media type of track: %@", track.mediaType); 
    NSLog(@"Track metadata: %@", track.commonMetadata); 
} 

재미있는 점은 자산에는 항상 2 개의 트랙이 있다고 표시된다는 것입니다. mediaType 속성을 인쇄 할 때 첫 번째 속성에는 "soun", 두 번째 속성에는 "tmet"가 표시됩니다. 제 가정은 첫 번째 트랙은 오디오 데이터 자체이고 두 번째 트랙은 메타 데이터입니다. 그러나, 나는 빈 배열 commonMetadata에서 만 볼 수 있습니다.

또한 트랙에서 statusOfValueForKey:error을 사용하여 속성 상태를 확인하고 commonMetadata 키는 항상 AVKeyValueStatusLoaded으로 되돌아갑니다.

아이디어가 있으십니까? 나는 완전한 손실에 여기있다.

또한 현재 iOS 4.2.1을 실행하는 iPhone 4 시뮬레이터를 통해이를 실행하고 있습니다. 애플이 아직 내 회사의 개발자 계정을 승인하고 있기 때문에 아직 장치에 넣을 수는 없다.

+0

에 의해 요청의 응답을 볼 수 있습니까? 클라이언트 측에서 "timedMetadata"를 사용하여 메타 데이터를 잡았습니까? –

답변

9

대신 당신이 AVPlayerItemtimedMetadata를 사용하여 시도 할 수도 commonMetadata를 사용하는이 :

[playerItem addObserver:self forKeyPath:@"timedMetadata" options:NSKeyValueObservingOptionNew context:NULL]; 
+0

나는 그것을 역시 시도했다! 그러나 사이트의 Wowza 샘플 코드는 틀렸고 일단 지원 그룹이 수정하면'timedMetadata'를 사용하여 테스트를 실행하는 것을 잊어 버렸습니다. 그러나 그것은 효과가 있었다! 감사! –

0

단지 아이디어 : 메타 데이터가 있는지 확인하기 위해 http 요청 콘텐츠를 탐지하기 위해 fiddler/othersniffer를 사용 하시겠습니까?

+0

미디어 세그먼트를 수동으로 다운로드하는 것 외에 Wireshark를 사용했습니다. 메타 데이터가 있습니다. –

+0

해결책을 얻었습니까? –

0

당신은 AppDelegate에 didFinishLaunchingWithOptions 방법에 NSURLProtocol의 서브 클래스를 등록해야합니다.

는 당신은 당신의 ID3 wowza 라이브러리를 사용하여 메타 데이터를 보낼 수있는 모듈의 소스 코드를 제공 할 수 있습니다 동영상 플레이어

관련 문제