У меня проблема с загрузкой большого видеообъекта на сервер из 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
и опубликует свой результат в ближайшее время;
Благодарим вас за ответ. Я прочитал его, но не нашел решения; Я имею в виду, что я могу загружать видео (малый размер)/имидж объекта из PhotoLibrary на сервер с помощью webDAV, как я описал; Но когда приходит к большому видеообъекту, он падает. Есть ли способ загрузить видеообъект большого размера из PhotoLibrary? – traximus
либо вы можете создать zip-файл этого актива, чтобы указать размер. то вы можете загрузить его. или вы можете разделить свои данные на небольшие пакеты и загрузить. –
Я завершил это, сжимаю видеоинформацию UIVideoEditorController, а затем загружаю.Я попытался разделить данные на небольшие пакеты, но сервер не поддерживает объединение этих небольших файлов в один; Спасибо вам все равно, наилучшие пожелания – traximus