Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
連続再生アプリをつくろう               Inside of Attacca                AVQueuePlayer,AVSessionのTips                                  ...
自己紹介をすこし              •   フナミタカオ              •   リクルート メディアテクノロジーラボ所属              •   リクルートWebサービス開発担当 2007∼            ...
iPhone                  2009年頃の初期バージョンを開発                    http://mtl.recruit.co.jp/blog/2009/09/926foomoo_by_for_iphone...
iPad                2010年5月 じゃらん沖縄iPad                     http://mtl.recruit.co.jp/blog/2010/09/ipad.html12年7月21日土曜日
Android              2010年1月 ホットペッパー for Adroid                      http://mtl.recruit.co.jp/blog/2010/01/android.html12年...
2011     http://itun.es/i6jY7dZ   http://itun.es/i6jS7pF12年7月21日土曜日
2012 - Attaccaの音楽再生モジュールを開発しました                                 Search                                Ranking             ...
ところで、Attaccaインストールされましたよね?      • 無料ミュージック2位      • iTunesStore試聴連続再生      • 広告なし      • JP,US,UKランキング対応      • 豊富なテーマ別プレイ...
ところで、Attaccaインストールされましたよね?      •   無料ミュージック2位     本日:無料ミュージック28位 -まだのか                         た今すぐダウンロードお願いします!      • i...
7/20 アップデート12年7月21日土曜日
7/20 アップデート              • シャッフル機能追加              • Twitter               Framework対応12年7月21日土曜日
本題              Attaccaの音楽再生モジュール開発の知見共有します12年7月21日土曜日
iTunes試聴音楽連続再生アプリの基本要件12年7月21日土曜日
iTunes試聴音楽連続再生アプリの基本要件    •   取得したリストから再生    •   再生、停止    •   バックグラウンドでも再生    •   コントローラーに対応    •   ロック画面のコントローラーに        ...
音楽のリストを取得して、再生するしくみ                                                 Musicクラスの配列     iTunes                                ...
サーバーサイド(おまけ)                 参照:第三回Playframework勉強会で発表してきました。                        http://i2key.hateblo.jp/entry/playstu...
1.連続再生にはAVQueuePlayerが便利                                  Musicクラスの配列     iTunes                                       Mus...
AVPlayerItemの配列からAVQueuePlayerを作る       •      // _palyURLs は再生したいURLの配列       •      NSMutableArray *palyerItems = [NSMut...
AVQueuePlayerのコントロール              •   AVPlayer                  •   再生 - (void)play;                  •   停止 - (void)pause...
AVQueuePlayer(AVPlayer)のステイタス監視        [self.player addObserver:self forKeyPath:@"status" options:0        context:&Player...
2.バックグラウンドでも再生              •   info.plist UIBackgroundModesをaudioに                                                <key>UI...
AVQueuePlayer勉強のための必見のビデオ              •   405_exploring_av_foundation 2010 WWDCビ                  デオ12年7月21日土曜日
3.電話とかの割り込み後復帰              •   AVAudioSessionDelegateに対応すればOK              #pragma mark -              #pragma mark Inter...
4.リモートコントローラ対応    -­‐	  (void)	  viewDidAppear:(BOOL)animated	      {    	  	  	  	  if	  ([[UIApplication	  sharedApplica...
5.ロック画面へのアートワーク表示- (NSDictionary *)songInfo{    NSMutableDictionary *songInfo = [[NSMutableDictionary alloc] init];    [so...
これらのサンプルソース作成中です              •   あとで gitあげます12年7月21日土曜日
今後              •   Fade IN / OUTしたいとおもうので、根本的に見直                  す必要があるかもとおもっています。              •   でも、とりあえず、AVQueuePlay...
最後に     •   AVQueuePlayer快適なのでAttaccaよろしくおねがいします12年7月21日土曜日
Upcoming SlideShare
Loading in …5
×

連続再生アプリをつくろう Inside of attacca

14,813 views

Published on

http://atnd.org/events/30549
第3回iphone_dev_jp 東京iPhone/Mac勉強会
のプレゼン資料です。

Published in: Technology

連続再生アプリをつくろう Inside of attacca

  1. 1. 連続再生アプリをつくろう Inside of Attacca AVQueuePlayer,AVSessionのTips  Takao Funami Media Technology Labs, Recruit co ltd Twitter: @iRSS FaceBook: takao.funami12年7月21日土曜日
  2. 2. 自己紹介をすこし • フナミタカオ • リクルート メディアテクノロジーラボ所属 • リクルートWebサービス開発担当 2007∼ • iOS 2008∼ • Android 2010年頃すこし12年7月21日土曜日
  3. 3. iPhone 2009年頃の初期バージョンを開発 http://mtl.recruit.co.jp/blog/2009/09/926foomoo_by_for_iphone.html12年7月21日土曜日
  4. 4. iPad 2010年5月 じゃらん沖縄iPad http://mtl.recruit.co.jp/blog/2010/09/ipad.html12年7月21日土曜日
  5. 5. Android 2010年1月 ホットペッパー for Adroid http://mtl.recruit.co.jp/blog/2010/01/android.html12年7月21日土曜日
  6. 6. 2011 http://itun.es/i6jY7dZ http://itun.es/i6jS7pF12年7月21日土曜日
  7. 7. 2012 - Attaccaの音楽再生モジュールを開発しました Search Ranking Share PlayList Connection Streaming Music12年7月21日土曜日
  8. 8. ところで、Attaccaインストールされましたよね? • 無料ミュージック2位 • iTunesStore試聴連続再生 • 広告なし • JP,US,UKランキング対応 • 豊富なテーマ別プレイリスト • 年代別Hits、フジロックetc12年7月21日土曜日
  9. 9. ところで、Attaccaインストールされましたよね? • 無料ミュージック2位 本日:無料ミュージック28位 -まだのか た今すぐダウンロードお願いします! • iTunesStore試聴連続再生 • 広告なし • JP,US,UKランキング対応 • 豊富なテーマ別プレイリスト • 年代別Hits、フジロックetc12年7月21日土曜日
  10. 10. 7/20 アップデート12年7月21日土曜日
  11. 11. 7/20 アップデート • シャッフル機能追加 • Twitter Framework対応12年7月21日土曜日
  12. 12. 本題 Attaccaの音楽再生モジュール開発の知見共有します12年7月21日土曜日
  13. 13. iTunes試聴音楽連続再生アプリの基本要件12年7月21日土曜日
  14. 14. iTunes試聴音楽連続再生アプリの基本要件 • 取得したリストから再生 • 再生、停止 • バックグラウンドでも再生 • コントローラーに対応 • ロック画面のコントローラーに 対応 • 電話等の割り込み後に復帰12年7月21日土曜日
  15. 15. 音楽のリストを取得して、再生するしくみ Musicクラスの配列 iTunes Music DataSorce Search API Music Music インスタンス化 url,name image.. JSON取得 Parser iTunes Store RSS Music再生Manager AVPlayerItem AVPlayerItem AVPlayerItem コントロールに反応 AVQueuePlayeriTunes Store RSShttp://itunes.apple.com/jp/rss/itunes affiliates resources Search APIhttp://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html12年7月21日土曜日
  16. 16. サーバーサイド(おまけ) 参照:第三回Playframework勉強会で発表してきました。 http://i2key.hateblo.jp/entry/playstudy312年7月21日土曜日
  17. 17. 1.連続再生にはAVQueuePlayerが便利 Musicクラスの配列 iTunes Music DataSorce Search API Music Music インスタンス化 url,name image.. JSON取得 Parser iTunes Store RSS Music再生Manager AVPlayerItem AVPlayerItem AVPlayerItem コントロールに反応 AVQueuePlayer12年7月21日土曜日
  18. 18. AVPlayerItemの配列からAVQueuePlayerを作る • // _palyURLs は再生したいURLの配列 • NSMutableArray *palyerItems = [NSMutableArray array]; int musicCount = [_playList count]; // palyerItems に playerItemを追加しまくる for (int i = index ; i < musicCount ; i++){ NSURL *url = [_palyURLs objectAtIndex:i]; if (url != nil){ AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url]; [palyerItems addObject:playerItem]; } } // AVQueuePlayerのインスタンスつくる AVQueuePlayer *player = [AVQueuePlayer queuePlayerWithItems:palyerItems]; [player play]; • -ストリーミング再生 - 3Gでも再生開始早い 簡 -先読み - 面倒なキャッシュを勝手にやってくれる うれしい 単 ! ※ iTunesアフィリの規約で、ダウンロード再生は禁止12年7月21日土曜日
  19. 19. AVQueuePlayerのコントロール • AVPlayer • 再生 - (void)play; • 停止 - (void)pause; • 再生中のアイテム @property (nonatomic, readonly) AVPlayerItem *currentItem; • AVQueuePlayer • 次の曲再生 - (void)advanceToNextItem; 弱点:戻るがない! & Fade IN/OUTできない12年7月21日土曜日
  20. 20. AVQueuePlayer(AVPlayer)のステイタス監視 [self.player addObserver:self forKeyPath:@"status" options:0 context:&PlayerStatusContext]; [self.player addObserver:self forKeyPath:@"currentItem" options:0 context:&CurrentItemChangedContext]; [self.player addObserver:self forKeyPath:@"rate" options:0 context:&PlayerRateContext]; ↑だけではたりない AVPlayerItemのステイタスもみる必要あり AVPlayerItem *playerItem = [self.player currentItem]; playerItem.playbackLikelyToKeepUp もれがたくさんありそうなので、調査中です 弱点:通信状態のエラーハンドリング不安12年7月21日土曜日
  21. 21. 2.バックグラウンドでも再生 • info.plist UIBackgroundModesをaudioに <key>UIBackgroundModes</key> <array> <string>audio</string> </array> • AVAudioSessionのカテゴリを AVAudioSessionCategoryPlaybackに12年7月21日土曜日
  22. 22. AVQueuePlayer勉強のための必見のビデオ • 405_exploring_av_foundation 2010 WWDCビ デオ12年7月21日土曜日
  23. 23. 3.電話とかの割り込み後復帰 • AVAudioSessionDelegateに対応すればOK #pragma mark - #pragma mark Interruption event handling - (void)beginInterruption { if (self.playingMusic){ self.shouldResume = YES; }else{ self.shouldResume = NO; } self.playingMusic = NO; } - (void)endInterruptionWithFlags:(NSUInteger)flags { if (flags == AVAudioSessionInterruptionFlags_ShouldResume){ [[AVAudioSession sharedInstance] setActive: YES error: nil]; if (self.shouldResume){ [self play]; } } } biginで状態保持して、endで状態におおじて必要な場合は再生再開12年7月21日土曜日
  24. 24. 4.リモートコントローラ対応 -­‐  (void)  viewDidAppear:(BOOL)animated   {        if  ([[UIApplication  sharedApplication]  respondsToSelector:@selector(beginReceivingRemoteControlEvents)]){                [[UIApplication  sharedApplication]  beginReceivingRemoteControlEvents];                [self  becomeFirstResponder];        } } -­‐  (void)  viewWillDisappear:(BOOL)animated   {        [[UIApplication  sharedApplication]  endReceivingRemoteControlEvents];        [self  resignFirstResponder]; } #pragma mark - #pragma mark Remote-control event handling // Respond to remote control events - (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent { if (receivedEvent.type == UIEventTypeRemoteControl) { switch (receivedEvent.subtype) { case UIEventSubtypeRemoteControlTogglePlayPause: [self playOrPause]; break; case UIEventSubtypeRemoteControlPreviousTrack: [self prev]; break; case UIEventSubtypeRemoteControlNextTrack: [self next]; break;12年7月21日土曜日 default:
  25. 25. 5.ロック画面へのアートワーク表示- (NSDictionary *)songInfo{ NSMutableDictionary *songInfo = [[NSMutableDictionary alloc] init]; [songInfo setObject:self.title forKey:MPMediaItemPropertyTitle]; [songInfo setObject:self.author forKey:MPMediaItemPropertyArtist]; [songInfo setObject:self.album forKey:MPMediaItemPropertyAlbumTitle]; if (self.artwork){ [songInfo setObject:self.artwork forKey:MPMediaItemPropertyArtwork]; }else{ [songInfo setObject:[[MPMediaItemArtwork alloc] initWithImage:[UIImageimageNamed:@"glay.png"]] forKey:MPMediaItemPropertyArtwork]; } /* コピーしたほうが、安全かもと思い、コピー */ return [NSDictionary dictionaryWithDictionary:songInfo];}- (void)updatePlayingInfo{ Class playingInfoCenter = NSClassFromString(@"MPNowPlayingInfoCenter"); if (playingInfoCenter) { NSDictionary *songInfo = [self.currentMusic songInfo]; [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo]; //NSLog(@"songInfo:%@",songInfo); }} MPNowPlayingInfoCenterを使えばOK ただし iOS5.0以上12年7月21日土曜日
  26. 26. これらのサンプルソース作成中です • あとで gitあげます12年7月21日土曜日
  27. 27. 今後 • Fade IN / OUTしたいとおもうので、根本的に見直 す必要があるかもとおもっています。 • でも、とりあえず、AVQueuePlayer快適なので、 簡単アプリ作成にはGood • iTunesの規約もあって、オフライン対応していませ んが、自分用には、オフライン対応して、朝の電車 でも快適連続再生12年7月21日土曜日
  28. 28. 最後に • AVQueuePlayer快適なのでAttaccaよろしくおねがいします12年7月21日土曜日

×