2010-04-03 7 views
5

Ben bunun için çağlar için kod ile dalga geçiyordum, Birisi bu dosyayı bir sunucudan http://www.archive.org/download/june_high/june_high_512kb.mp4 indirilen bir kod örneği sağlayabilir eğer çok minnettar olurdu, (Bu arada aslında bu dosya değil, sadece bir Bana yardım etmeye çalışan herkes için mükemmel bir örnek) ve ardından belgeler dizininden çalın. Bunu sormamın tembel gözüktüğünü biliyorum ama beni çılgına çeviren çok farklı NSURLConnection varyasyonlarını denedim. Ayrıca, ben o zaman başarılı bir şekilde oynardım bu kodu varsayarak doğru olacağını indirilen video dosyasını almak başarmıştı eğer:iPhone SDK: Video dosyalarını Document Directory'ye nasıl yükler ve sonra oynatırsınız?

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"june_high_512kb.mp4"]; 
NSURL *movieURL = [NSURL fileURLWithPath:path]; 
self.theMovie = [[MPMoviePlayerController alloc] initWithContentURL:movieURL]; 
[_theMovie play]; 

Yukarıdaki kod belge dizinden bir video dosyasını çalmaya çalışmak istiyorsanız, o zaman bilmem gereken tek şey, bir sunucudan bir video dosyasının nasıl indirileceği. Benim asıl sorunum budur. Herhangi bir yardım büyük beğeni topluyor.

cevap

18

Kodunuz bir film dosyasını oynatmak için çalışacaktır.

indirmek için en basit yolu eşzamanlı geçerli:

NSData *data = [NSData dataWithContentsOfURL:movieUrl]; 
[data writeToURL:movieUrl atomically:YES]; 

Ama daha iyidir (app yanıt, vb) uyumsuz indirmek için:

NSURLRequest *theRequest = [NSURLRequest requestWithURL:movieUrl cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60]; 
    receivedData = [[NSMutableData alloc] initWithLength:0]; 
     NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self startImmediately:YES]; 

Bu gayri NSURLConnection protokolü uygulayan gerektirir:

ve sonra filmi kaydedip (ve oynatırken) movieReceived yönteminde dosya.

+0

sayesinde iyi cevap, gerçekten bana çok yardımcı oldu. Ben büyük dosyaları indirirken appendData ile app bombalar gibi ben appendData yerine writeData kullanmak yerine, kodunda küçük bir değişiklik yaptım. Ama yine de mükemmel kod örneği. – Sam

+0

Evet, (basit) örneğim, büyük dosyalar için fark yaratacak olan NSFileHandle/writeData: will işlevinden daha fazla bellek tüketir. Yardım ettiğine sevindim. –

+0

Ayrıca, NSData yerine doğrudan dosyayı kullanabilirsiniz. Ps: Büyük dosyaları düşünün. Etkinlik göstergesi için – fyasar

İlgili konular