2013-03-25 3 views
0

У меня проблема с загрузкой большого видеообъекта на сервер из PhotoLibrary.Загрузить большое видео с PhotoLibrary на сервер

Я получаю данные о своих активах как described here, экспортирует видео в локальный документ и загружаю его.

Но когда я загружаю большое видео (2 минуты и около 300 МБ или больше), этот метод вызывает сбой, и у меня нет никакой причины и никакой информации.

Я использую webDAV загружать файлы так же, как это:

// Set up credentials 
    NSURLCredential *userCredentials = [NSURLCredential credentialWithUser:username 
                    password:password 
            persistence:NSURLCredentialPersistenceForSession]; 
    NSURLProtectionSpace *space = [[NSURLProtectionSpace alloc] initWithHost:host 
                     port:80 
                    protocol:@"http" 
                     realm:@" webDAV" 
                 authenticationMethod:nil]; 
    [[NSURLCredentialStorage sharedCredentialStorage] setCredential:userCredentials forProtectionSpace:space]; 
    [space release]; 

    // Create the request 
    NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url]; 
    [request setHTTPMethod:@"PUT"]; 
    [request setValue:[self mimetypeForFile:self.filepath] forHTTPHeaderField:@"Content-Type"]; 
    NSNumber *contentLength = (NSNumber *) [[[NSFileManager defaultManager] 
              attributesOfItemAtPath:self.filepath error:NULL] 
              objectForKey:NSFileSize]; 
    [request setValue:[contentLength description] forHTTPHeaderField:@"Content-Length"]; 

    if (self.useStreaming) 
    { 
     if (self.currentFileStream!=nil) 
     { 
      [self.currentFileStream close], self.currentFileStream = nil; 
     } 
     self.currentFileStream = [NSInputStream inputStreamWithFileAtPath:self.filepath]; 

     if (currentFileStream!=nil) 
     { 
      [request setHTTPBodyStream:currentFileStream]; 
     } 
     else 
     { 
      [request setHTTPBody:[NSData dataWithContentsOfFile:self.filepath]]; 
     } 
    } 
    else 
    { 
     [request setHTTPBody:[NSData dataWithContentsOfFile:self.filepath]]; 
    } 



    NSURLConnection* conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

    if (self.currentConnection!=nil) 
    { 
     self.currentConnection = nil; 
    } 
    self.currentConnection = conn; 
    [conn release]; 
    [self.currentConnection start]; 

Когда код reache эту строку:

self.currentFileStream = [NSInputStream inputStreamWithFileAtPath:self.filepath]; [request setHTTPBodyStream:currentFileStream];

ИЛИ:

[request setHTTPBody:[NSData dataWithContentsOfFile:self.filepath]]; 

Он разбился.

Есть ли у вас какие-либо предложения?

Спасибо.

========================

Edit: Это сбой в setHTTPBody: ИЛИ setHTTPBodyStream: Так что я думаю, что об утечке памяти или что-то.

================

EDIT2: Теперь я решил сжимать видео, я получаю видеоданные по настоящее время метод является слишком большим (более 300 МБ) , Но я нахожу использование UIImagePickerController выберите одно и то же видео, это всего лишь 30 Мб, поэтому сжатие - помощь; Я попробую UIVideoEditorController и опубликует свой результат в ближайшее время;

ответ

1

Завершены. решение пытается сжать большое видео в маленький файл;

1.но, как и прежде, экспортировать объект видео в каталог tmp;

2.use UIVideoEditorController для сжатия видеофайла;

3.нагружайте сжатый файл, как и код, который я отправляю.

Это все.

0

проверка следующего поста, где я отправляю изображения на сервере, а изображение, которое вы можете разместить ваше видео Uploading Image via POST in Objective C

+0

Благодарим вас за ответ. Я прочитал его, но не нашел решения; Я имею в виду, что я могу загружать видео (малый размер)/имидж объекта из PhotoLibrary на сервер с помощью webDAV, как я описал; Но когда приходит к большому видеообъекту, он падает. Есть ли способ загрузить видеообъект большого размера из PhotoLibrary? – traximus

+0

либо вы можете создать zip-файл этого актива, чтобы указать размер. то вы можете загрузить его. или вы можете разделить свои данные на небольшие пакеты и загрузить. –

+0

Я завершил это, сжимаю видеоинформацию UIVideoEditorController, а затем загружаю.Я попытался разделить данные на небольшие пакеты, но сервер не поддерживает объединение этих небольших файлов в один; Спасибо вам все равно, наилучшие пожелания – traximus

Смежные вопросы