1

次の方法でメディアファイルをサーバーにアップロードするために 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 でアプリケーションがクラッシュすることです。

誰でもこれについて何か考えがありますか?どんな助けでも大歓迎です。

ありがとう、ジェイ・ステピン。

4

0 に答える 0