یکی از دوستان توی سایت x-code درخواست کرده بود که آموزش دانلود فایل و پخش موزیک را بذارم.البته بصورت stream میخواستن اما گفتن اول دانلود و بعد play هم فعلا باشه بد نیست).
خوب همونطور که می بینید برنامه شامل ۲ قسمت هست
۱ - دانلود فایل
۲ - پخش اون
ابتدا یک تابع ایجاد میکنیم به نام fileDownloader که یک پارامتر به نام NSURL را میگیره
خوب برای دانلود فایل ابتدا باید یک Object از جنس NSData بسازیم که محتویات دانلودی را درونش بریزیم.
کد بالا مسیر فایل داده شده را دانلود میکنه و داخل myData میریزه ( دقیقا به همه راحتی )
خوب فایل که دانولد شد باید اون را یکجا ذخیره کنیم! خوب حتما میدونید که شما نمیتونید هرجا که دلتون خواست فایل را ذخیره کنید ( اگر اینکارو بکنید توی AppStore چی میشید ؟ بله Reject )
شما محدوده دسترسی که دارید داخل فولدر Application مربوط به خودتون هست.
پس ما باید مسیر ذخیره شده Application را بدست بیاریم توسط کد زیر.
حالا میخواهیم فایلی را که دانلود کردیم را به نام دلخواه ذخیره کنیم!
تا الان کارهایی که کردیم این بوده! فایل دانلود شده! مسیر و نام مورد نظر را ساختیم و آماده شده برای ذخیره شدن بصورت فایل! (تا الان همه چی داخل متغییر ها بوده ).
واقعا xcode و objective-c قابلیت های منحصر به فردی را گذاشتن! باورتون میشه به همین راحتی که download Manager شخصی برای خودمون نوشتیم.
حالا فایل ذخیره شده! باید اون را پخش کنیم که من اینجا توسط AVFoundation اینکارو میکنم.
اول از همه AVFoundation Framework را به پروژه اضافه کنید و بعد داخل فایل .h فایل header را اضافه میکنیم
و بعد به پروژمون Delegate مربوط به AVFoundation را اضافه میکنیم
حالا یا توی فایل .h یا داخل .m بصورت یک Property برای AVAudioPlayer میسازیم
و بعد اون را توی فایل .m ؟؟
بله Syntesize میکنیم
حالا توی ViewDidLoad باید به myAP که Player ما هست Delegate را self بدیم.
حالا برای پخش فایل مربوط یک تابع درست میکنیم به نام play
کد بالا مثل FileDownload هست تا حدی فقط دیگه داخل فایلی دانلود نمیشه اما طرز بدست آوردن مسیر همونطور هست و طرز ساختن یک Object از جنس AVAudioPlayer . و دادن مسیر بصورت NSURL .
حالا باید توی ViewDidLoad به ترتیب صدا بزنیم.
اول فایل دانلود شده و بعد پخش میشه! شما میتونید یک Button تعریف کنید و تابع play را اونجا صدا بزنید.
سوالی بود همینجا بپرسید.
کل کد بصورت یکجا :
خوب همونطور که می بینید برنامه شامل ۲ قسمت هست
۱ - دانلود فایل
۲ - پخش اون
ابتدا یک تابع ایجاد میکنیم به نام fileDownloader که یک پارامتر به نام NSURL را میگیره
کد:
- (void) fileDownloder:(NSURL*) url { }
کد:
NSData *myData = [NSData dataWithContentsOfURL:url];
خوب فایل که دانولد شد باید اون را یکجا ذخیره کنیم! خوب حتما میدونید که شما نمیتونید هرجا که دلتون خواست فایل را ذخیره کنید ( اگر اینکارو بکنید توی AppStore چی میشید ؟ بله Reject )
شما محدوده دسترسی که دارید داخل فولدر Application مربوط به خودتون هست.
پس ما باید مسیر ذخیره شده Application را بدست بیاریم توسط کد زیر.
کد:
NSArray *myPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *absolutePath = [myPath objectAtIndex:0];
کد:
NSString *savePath = [NSString stringWithFormat:@"%@/mySong.mp3" , absolutePath];
کد:
[myData writeToFile:savePath atomically:YES];
حالا فایل ذخیره شده! باید اون را پخش کنیم که من اینجا توسط AVFoundation اینکارو میکنم.
اول از همه AVFoundation Framework را به پروژه اضافه کنید و بعد داخل فایل .h فایل header را اضافه میکنیم
کد:
#import <AVFoundation/AVFoundation.h>
کد:
@interface ViewController : UIViewController < AVAudioPlayerDelegate>
کد:
@property ( nonatomic , strong ) AVAudioPlayer *myAP;
بله Syntesize میکنیم
کد:
@synthesize myAP;
کد:
myAP.delegate = self;
کد:
-(void) play { NSArray *myPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *absolutePath = [myPath objectAtIndex:0]; NSString *savePath = [NSString stringWithFormat:@"%@/mySong.mp3" , absolutePath]; NSURL *mpUrl = [NSURL fileURLWithPath:savePath]; myAP = [[AVAudioPlayer alloc] initWithContentsOfURL:mpUrl error:nil]; [myAP play]; }
کد بالا مثل FileDownload هست تا حدی فقط دیگه داخل فایلی دانلود نمیشه اما طرز بدست آوردن مسیر همونطور هست و طرز ساختن یک Object از جنس AVAudioPlayer . و دادن مسیر بصورت NSURL .
حالا باید توی ViewDidLoad به ترتیب صدا بزنیم.
کد:
- (void)viewDidLoad { [super viewDidLoad]; myAP.delegate = self; [self fileDownloder:[NSURL URLWithString:@"http://site.com/music.mp3"]]; [self play]; }
سوالی بود همینجا بپرسید.
کل کد بصورت یکجا :
کد:
- (void)viewDidLoad { [super viewDidLoad]; myAP.delegate = self; [self fileDownloder:[NSURL URLWithString:@"http://site.com/music.mp3"]]; [self play]; } - (void) fileDownloder:(NSURL*) url { NSData *myData = [NSData dataWithContentsOfURL:url]; NSArray *myPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *absolutePath = [myPath objectAtIndex:0]; NSString *savePath = [NSString stringWithFormat:@"%@/mySong.mp3" , absolutePath]; [myData writeToFile:savePath atomically:YES]; } -(void) play { NSArray *myPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *absolutePath = [myPath objectAtIndex:0]; NSString *savePath = [NSString stringWithFormat:@"%@/mySong.mp3" , absolutePath]; NSURL *mpUrl = [NSURL fileURLWithPath:savePath]; myAP = [[AVAudioPlayer alloc] initWithContentsOfURL:mpUrl error:nil]; [myAP play]; }
نظر