से पढ़ने (स्ट्रीम) पढ़ने के लिए AVAssetReader का उपयोग करना मेरा मुख्य लक्ष्य सर्वर से वीडियो स्ट्रीम करना है, और स्ट्रीमिंग के दौरान फ्रेम द्वारा फ्रेम को काटना है (ताकि इसे ओपनजीएल द्वारा उपयोग किया जा सके)। कि के लिए, मैं इस कोड है कि मैं इंटरनेट पर हर जगह पाए का उपयोग किया है (यह एप्पल के 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 बनाने का प्रयास किया है। यह या तो काम नहीं करता है। संपादित करें: बीटीडब्ल्यू, वह दृष्टिकोण स्थानीय एमपी 4/mov फ़ाइलों के लिए काम करता है। –
आईओएस में कुछ नया एपीआई है जो आपको अपने अंतिम लक्ष्य तक पहुंचने में मदद करेगी। Http://stackoverflow.com/questions/12500408/can-i-use-avfoundation-to-stream-downloaded-video-frames-into-an-opengl-es-textu/12500409#12500409 –