2010-04-03 5 views
5

मैं इस पर उम्र के लिए कोड के साथ चारों ओर बेवकूफ बनाना किया गया है, मैं बहुत आभारी होंगे अगर किसी को एक कोड नमूना है कि एक सर्वर http://www.archive.org/download/june_high/june_high_512kb.mp4 से इस फाइल को डाउनलोड किया है, (जिस तरह से यह इस फाइल को वास्तव में नहीं है द्वारा प्रदान कर सके हैं, यह सिर्फ एक है मेरी मदद करने की कोशिश करने वाले किसी के लिए सही उदाहरण) और फिर दस्तावेज़ निर्देशिका से इसे चलाएं। मुझे पता है कि यह मुझसे पूछने के लिए आलसी लगता है लेकिन मैंने NSURLConnection के कई अलग-अलग बदलावों की कोशिश की है कि यह मुझे पागल कर रहा है। इसके अलावा, अगर मैं वीडियो फ़ाइल डाउनलोड मैं तो इसे सफलतापूर्वक अदा कर सकता है इस कोड को संभालने में सही होगा प्राप्त करने के लिए प्रबंधन कैसे किया:आईफोन एसडीके: आप दस्तावेज़ निर्देशिका में वीडियो फ़ाइलों को कैसे डाउनलोड करते हैं और फिर उन्हें खेलते हैं?

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]; 

ऊपर कोड दस्तावेज़ निर्देशिका से एक वीडियो फ़ाइल खेलने में काम करेगा, तो तो मुझे लगता है कि मुझे केवल एक चीज जानने की ज़रूरत है, सर्वर से वीडियो फ़ाइल कैसे डाउनलोड करें। जो मेरी बड़ी समस्या है। कोई भी मदद बहुत ही सराहनीय होगी।

उत्तर

18

आपका कोड मूवी फ़ाइल खेलने के लिए काम करेंगे। (एप्लिकेशन जवाबदेही, आदि के लिए) में अतुल्यकालिक डाउनलोड

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

लेकिन यह बेहतर है के लिए:

डाउनलोड करने के लिए सबसे आसान तरीका है तुल्यकालिक है

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

इस अनौपचारिक NSURLConnection प्रोटोकॉल को लागू करने की आवश्यकता है:

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    [receivedData setLength:0]; 
} 

- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [receivedData appendData:data]; 
} 

- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
    [connection release]; 
} 

- (NSCachedURLResponse *) connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse { 
    return nil; 
} 

- (void) connectionDidFinishLoading:(NSURLConnection *)connection { 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
    [connection release]; 
    [self movieReceived]; 
} 

और फिर फिल्म को सहेजना (और खेलना) फिल्म रीसीव विधि में फ़ाइल।

+0

धन्यवाद, अच्छा जवाब, वास्तव में मुझे बहुत मदद मिली। मैंने आपके कोड में मामूली परिवर्तन किया है, हालांकि ऐपेंडडाटा के बजाय मैं लिखनेडाटा का उपयोग करता हूं, क्योंकि ऐप बड़ी फ़ाइलों को डाउनलोड करते समय ऐपेंडडेटा के साथ बाहर निकलता है। लेकिन अभी भी उत्कृष्ट कोड उदाहरण। – Sam

+0

हां, मेरा (सरल) उदाहरण NSFileHandle/WriteData का उपयोग करने से अधिक स्मृति का उपभोग करेगा: होगा, जो बड़ी फ़ाइलों के लिए एक अंतर बनाएगा। खुशी हुई यह मदद की। –

+0

आप NSData के बजाय सीधे फ़ाइल का भी उपयोग कर सकते हैं। Ps: बड़ी फाइलों पर विचार करें। गतिविधि संकेतक के लिए – fyasar

0

यदि आप वीडियो को अतुल्यकालिक डाउनलोड करना चाहते हैं तो मैं एएसआई लाइब्रेरी का उपयोग करने का सुझाव दूंगा, इसलिए जब आप डाउनलोड समाप्त होने की प्रतीक्षा करते हैं तो आपका ऐप लॉक नहीं होता है।

http://allseeing-i.com/ASIHTTPRequest/

संबंधित मुद्दे