avplayer를 사용하여 OSX가 설치된 n HTTP 라이브 스트리밍 플레이어를 구현하고 있습니다. 동영상을 제대로 검색하고 재생 시간을 확인할 수 있습니다. 이제는 OpenCV를 사용하여 스크린 샷을 찍어서 프레임을 처리하고 싶습니다. AVASSetImageGenerator를 사용하려고했습니다. 그러나 player.currentItem과 관련된 AVAsset이있는 오디오 및 비디오 트랙은 없습니다.HTTP 라이브 스트림 AVAsset
트랙이 player.currentItem.tracks에 표시됩니다. 그래서 AVAssetGenerator를 고소 할 수 없습니다. 이러한 시나리오에서 스크린 샷과 개별 프레임을 추출하는 솔루션을 찾는 데 도움을 줄 수 있습니까?
것은 내가 사전에 라이브 스트림에게 HTTP를감사를 시작하고 방법을 아래의 코드를 찾아주세요.
NSURL* url = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"];
playeritem = [AVPlayerItem playerItemWithURL:url];
[playeritem addObserver:self forKeyPath:@"status" options:0 context:AVSPPlayerStatusContext];
[self setPlayer:[AVPlayer playerWithPlayerItem:playeritem]];
[self addObserver:self forKeyPath:@"player.rate" options:NSKeyValueObservingOptionNew context:AVSPPlayerRateContext];
[self addObserver:self forKeyPath:@"player.currentItem.status" options:NSKeyValueObservingOptionNew context:AVSPPlayerItemStatusContext];
AVPlayerLayer *newPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:[self player]];
[newPlayerLayer setFrame:[[[self playerView] layer] bounds]];
[newPlayerLayer setAutoresizingMask:kCALayerWidthSizable | kCALayerHeightSizable];
[newPlayerLayer setHidden:YES];
[[[self playerView] layer] addSublayer:newPlayerLayer];
[self setPlayerLayer:newPlayerLayer];
[self addObserver:self forKeyPath:@"playerLayer.readyForDisplay" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:AVSPPlayerLayerReadyForDisplay];
[self.player play];
난 비디오 트랙이 자산
case AVPlayerItemStatusReadyToPlay:
[self setTimeObserverToken:[[self player] addPeriodicTimeObserverForInterval:CMTimeMake(1, 10) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {
[[self timeSlider] setDoubleValue:CMTimeGetSeconds(time)];
NSLog(@"%f,%f,%f",[self currentTime],[self duration],[[self player] rate]);
AVPlayerItem *item = playeritem;
if(item.status == AVPlayerItemStatusReadyToPlay)
{
AVAsset *asset = (AVAsset *)item.asset;
long audiotracks = [[asset tracks] count];
long videotracks = [[asset availableMediaCharacteristicsWithMediaSelectionOptions]count];
NSLog(@"Track info Audio = %ld,Video=%ld",audiotracks,videotracks);
}
}]];
AVPlayerItem *item = self.player.currentItem;
if(item.status != AVPlayerItemStatusReadyToPlay)
return;
AVURLAsset *asset = (AVURLAsset *)item.asset;
long audiotracks = [[asset tracksWithMediaType:AVMediaTypeAudio]count];
long videotracks = [[asset tracksWithMediaType:AVMediaTypeVideo]count];
NSLog(@"Track info Audio = %ld,Video=%ld",audiotracks,videotracks);
안녕하세요, 어떻게 HLS를 사용하여 트랙을 관리하셨습니까? 제발 도와주세요 –