Загрузка большого видео с iphone на веб-сервер
Я пытаюсь загрузить большое видео с iphone на веб-сервер, на котором есть скрипт php.
я использую NSInputStream
чтобы получить файл видео и я создаю запрос (POST) для каждого обхода
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode
метод, с чтения данных, передаваемых в качестве параметра.
Вот код, который я использую, чтобы получить куски данных
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode
{
switch(eventCode)
{
case NSStreamEventHasBytesAvailable:
{
NSMutableData *dataSlice;
uint8_t buf[1048576];
unsigned int len = 0;
len = [(NSInputStream *)stream read:buf maxLength:1048576];
if(len)
{
dataSlice = [NSMutableData dataWithBytes:(const void *)buf length:len];
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:folderNameForUpload, kFolderName,
@"abcd.MOV", kFileName,
@"MOV", kFileType,
nil];
MKNetworkOperation *op = [self.networkEngine operationWithPath:@"upload.php" params:params httpMethod:@"POST"];
[op addData:dataSlice forKey: @"file"
mimeType: @"image/mov"
fileName: @"abcd"];
[op onCompletion:^(MKNetworkOperation *completedOperation) {
} onError:^(NSError *error) {
}];
[[WebRequest sharedInstance].networkEngine enqueueOperation: op];
}
else
{
NSLog(@"NO MORE BUFFER!");
}
break;
}
case NSStreamEventEndEncountered:
{
[stream close];
[stream removeFromRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[stream release];
stream = nil;
break;
}
}
}
Он отправляет данные на сервер, и я могу записать куски в файл. Но проблема в том, что если имеется более одного чанка, файл будет поврежден, и я не смог открыть видеофайл.
Я проверил размер файла как на сервере, так и на клиенте, и оба абсолютно одинаковы.
Ниже приведен скрипт php, который я использую для объединения фрагментов видеофайлов.
$tmp_file = $_FILES['file']['tmp_name'];
$write_handle = fopen($fileURL, "ab+");
$read_handle = fopen($tmp_file, "rb");
$contents = fread($read_handle, filesize($tmp_file));
fwrite($write_handle, $contents);
fclose($write_handle);
fclose($read_handle);
Что я здесь не так делаю? Пожалуйста, помогите!
Я застрял над этой проблемой!
Заранее спасибо,
Сураджа
1 ответ
Я сам понял проблему, ребята. На самом деле, я отправлял разные фрагменты видео одновременно. И проблема возникла потому, что более поздние фрагменты видео достигли сервера до первого фрагмента видео.
Я решил проблему, отправив вторую порцию видео только после того, как первая порция достигнута веб-сервером и получен ответ на стороне клиента.