連続再生アプリをつくろう               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,074 views

Published on

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

Published in: Technology
0 Comments
15 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
14,074
On SlideShare
0
From Embeds
0
Number of Embeds
6,133
Actions
Shares
0
Downloads
25
Comments
0
Likes
15
Embeds 0
No embeds

No notes for slide

連続再生アプリをつくろう 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日土曜日

×