Загрузить большое видео из PhotoLibrary на сервер

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

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

Но когда я загружаю большое видео (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];

Когда код достигает этой строки:

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

OR:

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

Оно сломалось.

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

Спасибо.

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

Редактировать: происходит сбой на setHTTPBody: ИЛИ setHTTPBodyStream: Так что я думаю, что это связано с утечкой памяти или чем-то еще.

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

РЕДАКТИРОВАТЬ2: Теперь я решил сжать видео, я получаю, что видеоданные по текущему методу слишком велики (более 300 МБ), но я нахожу применение UIImagePickerController, выбираю то же видео, оно всего 30 МБ, так что сжатие - это помощь. ; Я попробую UIVideoEditorController и скоро опубликую свой результат;


person traximus    schedule 25.03.2013    source источник


Ответы (2)


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

1. как и раньше, экспортируйте видео в каталог tmp;

2. Используйте UIVideoEditorController для сжатия видеофайла;

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

Это все.

person traximus    schedule 26.03.2013

проверьте следующий пост, где я загружаю изображение на сервер, вместо изображения вы можете опубликовать свое видео Загрузка изображения через POST в Objective C

person Dipen Panchasara    schedule 25.03.2013
comment
Спасибо за ваш ответ. Я прочитал это, но не нашел решения; Я имею в виду, что могу успешно загрузить видео (небольшой размер)/изображение из PhotoLibrary на сервер через webDAV, как я описал; Но когда дело доходит до видеоресурсов большого размера, происходит сбой. Есть ли способ загрузить видеофайл большого размера из PhotoLibrary? - person traximus; 26.03.2013
comment
либо вы можете создать zip-файл этого актива, чтобы сравнить размер. тогда вы можете загрузить его. или вы можете разделить свои данные на небольшие пакеты и выполнить загрузку. - person Dipen Panchasara; 26.03.2013
comment
Я завершил его, сжал видеоактив с помощью UIVideoEditorController, а затем загрузил. Пробовал разбивать данные на маленькие пакеты, но сервер не поддерживает объединение этих маленьких файлов в один; Всем спасибо, наилучшие пожелания - person traximus; 26.03.2013