Моя основная цель - потоковое видео с сервера и его кадр за кадром во время потоковой передачи (чтобы он мог использоваться OpenGL). Для этого я использовал этот код, который я нашел везде в Интернете (как я помню, это был пример кода Apple GLVideoFrame):
NSArray * tracks = [asset tracks];
NSLog(@"%d", tracks.count);
for(AVAssetTrack* track in tracks) {
NSLog(@"type: %@", [track mediaType]);
initialFPS = track.nominalFrameRate;
width = (GLuint)track.naturalSize.width;
height = (GLuint)track.naturalSize.height;
NSError * error = nil;
// _movieReader is a member variable
@try {
self._movieReader = [[[AVAssetReader alloc] initWithAsset:asset error:&error] autorelease];
}
@catch (NSException *exception) {
NSLog(@"%@ -- %@", [exception name], [exception reason]);
NSLog(@"skipping track");
continue;
}
if (error)
{
NSLog(@"CODE:%d\nDOMAIN:%@\nDESCRIPTION:%@\nFAILURE_REASON:%@", [error code], [error domain], error.localizedDescription, [error localizedFailureReason]);
continue;
}
NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey;
NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA];
NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key];
[_movieReader addOutput:[AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:track
outputSettings:videoSettings]];
[_movieReader startReading];
[self performSelectorOnMainThread:@selector(frameStarter) withObject:nil waitUntilDone:NO];
}
Но я всегда получаю это исключение в [[AVAssetReader alloc] initWithAsset:error:]
.
NSInvalidArgumentException -- *** -[AVAssetReader initWithAsset:error:] Cannot initialize an instance of AVAssetReader with an asset at non-local URL 'http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8'
Итак, мои два вопроса:
- Действительно ли исключение говорит мне, что
AVAssetReader
должен иметь локальный URL-адрес? Может ли он использоваться для потоковой передачи (как и остальные классыAVFoundation
)? - Если подход
AVFoundation
не будет работать, каковы другие предложения для потоковой передачи видео и разделения его кадров одновременно?
Большое спасибо за вашу помощь.