次の方法でメディアファイルをサーバーにアップロードするために NSInputStream を使用しています。
uploadInputStream = [[NSInputStream alloc] initWithFileAtPath:videoFilePath];
uploadInputStream.delegate = self;
[uploadInputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[uploadInputStream open];
そして NSStream デリゲート メソッド stream:handleEvent: では、メディア ファイルのチャンクをフェッチしてサーバーにアップロードしています。
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode {
switch (eventCode) {
case NSStreamEventOpenCompleted:
NSLog(@"Strem opened");
break;
case NSStreamEventHasBytesAvailable: {
uint8_t buf[1024*1024];
unsigned int len = 0;
len = [(NSInputStream *)aStream read:buf maxLength:1024*1024];
if(len)
{
@autoreleasepool {
NSMutableData *fileData = [NSMutableData data];
[fileData appendBytes:(const void *)buf length:len];
[self uploadVideo:fileData];
}
}
break;
}
case NSStreamEventHasSpaceAvailable:
break;
case NSStreamEventEndEncountered: {
break;
}
case NSStreamEventErrorOccurred:
break;
case NSStreamEventNone:
break;
default:
break;
}
}
これまでのところ、シミュレーターではすべてがうまく機能しています。問題は、この同じコードを実際のデバイス (今のところ iPad-mini)でテストすると、デリゲート メソッド stream:handleEvent: の開始時に常に EXC_BAD_ACCESS code=1 でアプリケーションがクラッシュすることです。
誰でもこれについて何か考えがありますか?どんな助けでも大歓迎です。
ありがとう、ジェイ・ステピン。