【发布时间】:2019-05-17 19:56:36
【问题描述】:
我的主要目标是从服务器流式传输视频,并在流式传输时逐帧剪切(以便 OpenGL 可以使用它)。为此,我使用了在 Internet 上随处可见的代码(我记得它来自 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方法不起作用,还有哪些其他建议可以同时流式传输视频并拆分其帧?
非常感谢您的帮助。
【问题讨论】:
-
在这里遇到了类似的问题。然而,在我的情况下,AVAssetReader 没有得到异常,而是简单地拒绝初始化,并抛出一个“未知错误”(AVFoundationErrorDomain -11800)。我还尝试获取视频轨道,将其提供给新的 AVMutableComposition 和关联的 AVMutableCompositionTrack,然后尝试从中创建 AVAssetReader。那也行不通。编辑:顺便说一句,这种方法确实适用于本地 mp4/mov 文件。
-
iOS 中有一些新的 API 可以帮助您实现最终目标。见stackoverflow.com/questions/12500408/…
标签: iphone objective-c ios video-streaming avfoundation