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.
動画コンテンツにおいて、
バックグラウンドの音声との制御で
つまづいたところ
株式会社セプテーニ・オリジナル
嶽 雅也
動画コンテンツにおいて、
バックグラウンドの音声BGMとの制
御でつまづいたところ
株式会社セプテーニ・オリジナル
嶽 雅也
アジェンダ
• 自己紹介
• GANMA!の紹介
• BGMとの制御でつまづいたところ
• 動画の音声とBGMが同時に再生される
• BGMの再開が出来ない
• 最後に
自己紹介
• 株式会社セプテーニ・オリジナルの
嶽 雅也(だけ まさや)です
• Twitterアカウントは @masayadk1229です
• 「GANMA!」というオリジナルマンガ配信
アプリの開発に携わっています
GANMA!の紹介
オリジナルマンガ配信アプリ
GANMA!
• 累計800万ダウンロード
• 10代が今最も使っているアプリランキング9位
http://lab.appa.pe/2017-09/10s-app-
ranking2017.html
• AppSto...
本日の発表内容について
• GANMA!のトップ画面で再生される動画で、
BGMとの制御でつまづいたことについて、
お話します
BGMの定義
• iPhoneの「ミュージック」アプリなどで、
バックグラウンドで流す音声
ここから本題です
動画の音声とBGMが
同時に再生される
ある日
調査します!
(そんなことできるのだろうか)
動画の音声をONにしたら、
BGMをOFFにしたい
プロダクトオーナー
調査結果
• AVAudioSessionに
適切なカテゴリを設定することで解決
解説
AVAudioSessionとは
• 「AVAudioSession」は簡単に言えば
音声周りの制御を司るフレームワーク
です
• Audio Sessionプログラミングガイド
には日本語で「AVAudioSession」の
使い方が記載され...
• 以下の箇所を参考にしました
• P16 ~ P22
カテゴリの取り扱い
• P46 ~ P47
オーディオセッションのカテゴリと
モード
AVAudioSession
プログラミングガイド #1
AVAudioSession
プログラミングガイド #2
• こちらを読み解くのに、
音声入出力などで混乱したので、
苦労しました
• 説明に必要なので、次のスライドで
カテゴリの種類について紹介します
AVAudioSessionの
カテゴリーの種類
カテゴリー 音 声に割り込み
AVAudioSessionCategorySoloAmbient(default) ●
AVAudioSessionCategoryAmbient ✖︎
音声に割り込み
• 音声の割り込みが●なら、
BGMを停止して、
アプリの音声のみを流します
• 音声の割り込みが✖︎なら、
BGMと同時にアプリの音声が
流れます
音声に割り込み
• 音声の割り込みが●なら、
BGMを停止して、
アプリの音声のみを流します
→今回、設定したいのはこちら!
• 音声の割り込みが✖︎なら、
BGMと同時にアプリの音声が
流れます
AVAudioSessionの
カテゴリーの種類
カテゴリー 音 声に割り込み
AVAudioSessionCategorySoloAmbient(default) ●
AVAudioSessionCategoryAmbient ✖︎
改めて、調査結果
• AVAudioSessionに適切なカテゴリ
を設定することで解決
なぜ、動画の音声と
BGMが同時に再生され
たのか
デフォルト以外(Ambient)が
設定されていたのが原因
カテゴリー 音 声に割り込み
AVAudioSessionCategorySoloAmbient(default) ●
AVAudioSessionCategoryAmbient ✖︎
BGMの再開が
出来ない
次の日
BGMの停止できました!
音声をOFFにしたら、
BGMが停止されたところから再開させたい
調査します!
(ドキュメントに記述あったかな…)
調査した際に大きく
つまづきました
説明の都合上、
大きく3つに
分類して説明します
つまづいた点
① 実装方法の調査
② 実装
③ エラー原因の追究
つまづいた点
① 実装方法の調査
② 実装
③ エラー原因の追究
①実装方法の調査
調査結果
• BGMの停止/再開時に、
AVAudioSessionに
モードなどを設定する必要
ことで解決できそう
解説
BGMの停止時
• _
BGM停止時に設定する値
① カテゴリーのオプション
• interruptSpokenAudioAndMixWithOthers
② モード
• AVAudioSessionModeSpokenAudio
③ オーディオセッション
• 有効→...
BGMの停止時
• _①
②
③
BGMの再開時
BGM再開時に設定する値
① オーディオセッション
• 無効→setActive(false)
② オーディオセッションのオプション
• notifyOthersOnDeactivation
BGMの再開時
①
②
コードサンプル
• iOS 10 Swift Programming Cookbook: Solutions and
Examples for iOS Apps
• 16.3 Enable Spoken AudioSessionsに
記載があり...
調査時の苦労
• 検索のみでは実装方法を見つけることが
できませんでした
• Audio Sessionプログラミングガイドには
記載もありません(更新が2014年まで)
→AVAudioSessionのメソッドの定義を眺
めて、必要そうなメソ...
つまづいた点
① 実装方法の調査
② 実装
③ エラー原因の追究
②実装
調査結果
• BGMの再開時に、
動画を停止する必要があった
解説
BGMの再開時
• ①実装方法の調査の実装では、
次のページで紹介するエラーが
発生して動作しませんでした
エラーログ
AVAudioSession.mm:1049:-
[AVAudioSession
setActive:withOptions:error:]:
Deactivating an audio session
that has runni...
Google先生
I/Oを実行している
オーディオセッションを無効にします
オーディオセッションを無効にする前に
、すべてのI/Oを停止または一時停止す
る必要があります
BGM再開時に
音声が関係する動画などは
全て停止してください
BGMを再開する
処理のまとめ
1. 動画を停止する
2. BGM再開処理を行う
3. 動画を再開する
同じエラーが発生して
動かない
???
つまづいた点
① 実装方法の調査
② 実装
③ エラー原因の追究
③エラー原因の追究
試行錯誤の結果、、
動画停止後に
スリープしたら動いた
エラーの整理
• 動画が停止した直後だと、BGMの
再開処理でエラーが発生
• 動画を停止後にスリープしたら
BGMの再開処理でエラーが発生し
ない
動画の再生状態を
AVAudioSessionに
即座に通知できていない?
通知できる手段を探す
AVPlayer.rateが
使えそう!
AVPlayer.rateとは?
• 動画の現在の再生レートを
表すものです
• 0.0なら停止中、1.0なら再生中を
表します
AVAudioSessionについて
の割り込みの記載がある
動画の再生状態を通知できる
コード
BGMを再開する
処理のまとめ
1. 動画を停止する
2. AVAudioSessionに動画の停止を
通知
3. BGM再開処理を行う
4. 動画を再開する
BGMを再開する
処理のコード
最後に
• 音声と動画周り情報があまり出てこない
ので、実装するにあたって苦労します
• 今回、AVPlayer.rateを使って少し無理
矢理実装しました
• もし他の手段があったら、後でこっそり
懇親会でお話を聞かせてください
告知
弊社のカフェスペースを利用して、お酒や食事をし
ながら行う勉強会を継続的に実施するコミュニティ
iOS, DDD, Android, Scala, アーキテクチャetc…
今度の火曜日に
第3回があります!
• 第3回は、9/19(火)に分析基盤 Meetupを予定して
いますので、ご興味のある方はぜひご参加くだ
さい
• 新宿Geek Lounge#3 分析基盤 Meetup
• 先日実施された第2回の参加レポ...
ご静聴
ありがとうございました
引用元
(Apple公式ドキュメント)
• Audio Sessionプログラミングガイド
• interruptSpokenAudioAndMixWithOthers
• AVAudioSessionModeSpokenAudio
• set...
引用元
(サンプルコード/ソースコード)
• iOS 10 Swift Programming Cookbook: Solutions
and Examples for iOS Apps
• ソースコード(Appleのフレームワーク)
• AV...
動画コンテンツにおいて、BGMとの制御でつまづいたところ
動画コンテンツにおいて、BGMとの制御でつまづいたところ
動画コンテンツにおいて、BGMとの制御でつまづいたところ
Upcoming SlideShare
Loading in …5
×

動画コンテンツにおいて、BGMとの制御でつまづいたところ

1,511 views

Published on

iOSDC Japan 2017での発表資料
https://iosdc.jp/2017/node/1334

Published in: Internet
  • Hello there! Get Your Professional Job-Winning Resume Here! http://bit.ly/topresum
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

動画コンテンツにおいて、BGMとの制御でつまづいたところ

  1. 1. 動画コンテンツにおいて、 バックグラウンドの音声との制御で つまづいたところ 株式会社セプテーニ・オリジナル 嶽 雅也
  2. 2. 動画コンテンツにおいて、 バックグラウンドの音声BGMとの制 御でつまづいたところ 株式会社セプテーニ・オリジナル 嶽 雅也
  3. 3. アジェンダ • 自己紹介 • GANMA!の紹介 • BGMとの制御でつまづいたところ • 動画の音声とBGMが同時に再生される • BGMの再開が出来ない • 最後に
  4. 4. 自己紹介 • 株式会社セプテーニ・オリジナルの 嶽 雅也(だけ まさや)です • Twitterアカウントは @masayadk1229です • 「GANMA!」というオリジナルマンガ配信 アプリの開発に携わっています
  5. 5. GANMA!の紹介
  6. 6. オリジナルマンガ配信アプリ GANMA! • 累計800万ダウンロード • 10代が今最も使っているアプリランキング9位 http://lab.appa.pe/2017-09/10s-app- ranking2017.html • AppStoreのレビューでは5 GooglePlayでも4.7の評価をキープ
  7. 7. 本日の発表内容について • GANMA!のトップ画面で再生される動画で、 BGMとの制御でつまづいたことについて、 お話します
  8. 8. BGMの定義 • iPhoneの「ミュージック」アプリなどで、 バックグラウンドで流す音声
  9. 9. ここから本題です
  10. 10. 動画の音声とBGMが 同時に再生される
  11. 11. ある日 調査します! (そんなことできるのだろうか) 動画の音声をONにしたら、 BGMをOFFにしたい プロダクトオーナー
  12. 12. 調査結果 • AVAudioSessionに 適切なカテゴリを設定することで解決
  13. 13. 解説
  14. 14. AVAudioSessionとは • 「AVAudioSession」は簡単に言えば 音声周りの制御を司るフレームワーク です • Audio Sessionプログラミングガイド には日本語で「AVAudioSession」の 使い方が記載されています
  15. 15. • 以下の箇所を参考にしました • P16 ~ P22 カテゴリの取り扱い • P46 ~ P47 オーディオセッションのカテゴリと モード AVAudioSession プログラミングガイド #1
  16. 16. AVAudioSession プログラミングガイド #2 • こちらを読み解くのに、 音声入出力などで混乱したので、 苦労しました • 説明に必要なので、次のスライドで カテゴリの種類について紹介します
  17. 17. AVAudioSessionの カテゴリーの種類 カテゴリー 音 声に割り込み AVAudioSessionCategorySoloAmbient(default) ● AVAudioSessionCategoryAmbient ✖︎
  18. 18. 音声に割り込み • 音声の割り込みが●なら、 BGMを停止して、 アプリの音声のみを流します • 音声の割り込みが✖︎なら、 BGMと同時にアプリの音声が 流れます
  19. 19. 音声に割り込み • 音声の割り込みが●なら、 BGMを停止して、 アプリの音声のみを流します →今回、設定したいのはこちら! • 音声の割り込みが✖︎なら、 BGMと同時にアプリの音声が 流れます
  20. 20. AVAudioSessionの カテゴリーの種類 カテゴリー 音 声に割り込み AVAudioSessionCategorySoloAmbient(default) ● AVAudioSessionCategoryAmbient ✖︎
  21. 21. 改めて、調査結果 • AVAudioSessionに適切なカテゴリ を設定することで解決
  22. 22. なぜ、動画の音声と BGMが同時に再生され たのか
  23. 23. デフォルト以外(Ambient)が 設定されていたのが原因 カテゴリー 音 声に割り込み AVAudioSessionCategorySoloAmbient(default) ● AVAudioSessionCategoryAmbient ✖︎
  24. 24. BGMの再開が 出来ない
  25. 25. 次の日 BGMの停止できました! 音声をOFFにしたら、 BGMが停止されたところから再開させたい 調査します! (ドキュメントに記述あったかな…)
  26. 26. 調査した際に大きく つまづきました
  27. 27. 説明の都合上、 大きく3つに 分類して説明します
  28. 28. つまづいた点 ① 実装方法の調査 ② 実装 ③ エラー原因の追究
  29. 29. つまづいた点 ① 実装方法の調査 ② 実装 ③ エラー原因の追究
  30. 30. ①実装方法の調査
  31. 31. 調査結果 • BGMの停止/再開時に、 AVAudioSessionに モードなどを設定する必要 ことで解決できそう
  32. 32. 解説
  33. 33. BGMの停止時 • _
  34. 34. BGM停止時に設定する値 ① カテゴリーのオプション • interruptSpokenAudioAndMixWithOthers ② モード • AVAudioSessionModeSpokenAudio ③ オーディオセッション • 有効→setActive(true)
  35. 35. BGMの停止時 • _① ② ③
  36. 36. BGMの再開時
  37. 37. BGM再開時に設定する値 ① オーディオセッション • 無効→setActive(false) ② オーディオセッションのオプション • notifyOthersOnDeactivation
  38. 38. BGMの再開時 ① ②
  39. 39. コードサンプル • iOS 10 Swift Programming Cookbook: Solutions and Examples for iOS Apps • 16.3 Enable Spoken AudioSessionsに 記載があります
  40. 40. 調査時の苦労 • 検索のみでは実装方法を見つけることが できませんでした • Audio Sessionプログラミングガイドには 記載もありません(更新が2014年まで) →AVAudioSessionのメソッドの定義を眺 めて、必要そうなメソッドを 探しました
  41. 41. つまづいた点 ① 実装方法の調査 ② 実装 ③ エラー原因の追究
  42. 42. ②実装
  43. 43. 調査結果 • BGMの再開時に、 動画を停止する必要があった
  44. 44. 解説
  45. 45. BGMの再開時 • ①実装方法の調査の実装では、 次のページで紹介するエラーが 発生して動作しませんでした
  46. 46. エラーログ AVAudioSession.mm:1049:- [AVAudioSession setActive:withOptions:error:]: Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.
  47. 47. Google先生 I/Oを実行している オーディオセッションを無効にします オーディオセッションを無効にする前に 、すべてのI/Oを停止または一時停止す る必要があります
  48. 48. BGM再開時に 音声が関係する動画などは 全て停止してください
  49. 49. BGMを再開する 処理のまとめ 1. 動画を停止する 2. BGM再開処理を行う 3. 動画を再開する
  50. 50. 同じエラーが発生して 動かない
  51. 51. ???
  52. 52. つまづいた点 ① 実装方法の調査 ② 実装 ③ エラー原因の追究
  53. 53. ③エラー原因の追究
  54. 54. 試行錯誤の結果、、
  55. 55. 動画停止後に スリープしたら動いた
  56. 56. エラーの整理 • 動画が停止した直後だと、BGMの 再開処理でエラーが発生 • 動画を停止後にスリープしたら BGMの再開処理でエラーが発生し ない
  57. 57. 動画の再生状態を AVAudioSessionに 即座に通知できていない?
  58. 58. 通知できる手段を探す
  59. 59. AVPlayer.rateが 使えそう!
  60. 60. AVPlayer.rateとは? • 動画の現在の再生レートを 表すものです • 0.0なら停止中、1.0なら再生中を 表します
  61. 61. AVAudioSessionについて の割り込みの記載がある
  62. 62. 動画の再生状態を通知できる コード
  63. 63. BGMを再開する 処理のまとめ 1. 動画を停止する 2. AVAudioSessionに動画の停止を 通知 3. BGM再開処理を行う 4. 動画を再開する
  64. 64. BGMを再開する 処理のコード
  65. 65. 最後に • 音声と動画周り情報があまり出てこない ので、実装するにあたって苦労します • 今回、AVPlayer.rateを使って少し無理 矢理実装しました • もし他の手段があったら、後でこっそり 懇親会でお話を聞かせてください
  66. 66. 告知
  67. 67. 弊社のカフェスペースを利用して、お酒や食事をし ながら行う勉強会を継続的に実施するコミュニティ iOS, DDD, Android, Scala, アーキテクチャetc…
  68. 68. 今度の火曜日に 第3回があります! • 第3回は、9/19(火)に分析基盤 Meetupを予定して いますので、ご興味のある方はぜひご参加くだ さい • 新宿Geek Lounge#3 分析基盤 Meetup • 先日実施された第2回の参加レポートはこちら
  69. 69. ご静聴 ありがとうございました
  70. 70. 引用元 (Apple公式ドキュメント) • Audio Sessionプログラミングガイド • interruptSpokenAudioAndMixWithOthers • AVAudioSessionModeSpokenAudio • setActive • notifyOthersOnDeactivation
  71. 71. 引用元 (サンプルコード/ソースコード) • iOS 10 Swift Programming Cookbook: Solutions and Examples for iOS Apps • ソースコード(Appleのフレームワーク) • AVFoundation.AVAudio.AVAudioSession.swift • AVFoundation.AVPlayer

×