У меня возникла проблема с загрузкой большого видеоресурса на сервер из 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
и скоро опубликую свой результат;