Submit Search
Upload
動画コンテンツにおいて、BGMとの制御でつまづいたところ
•
Download as PPTX, PDF
•
1 like
•
4,288 views
Masaya Dake
Follow
iOSDC Japan 2017での発表資料 https://iosdc.jp/2017/node/1334
Read less
Read more
Internet
Report
Share
Report
Share
1 of 74
Download now
Recommended
SageMakerを使った異常検知
SageMakerを使った異常検知
Ryohei Yamaguchi
AbemaTVの動画配信を支えるサーバーサイドシステム
AbemaTVの動画配信を支えるサーバーサイドシステム
yuichiro nakazawa
20191112 AWS Black Belt Online Seminar AWS Media Services で始めるライブ動画配信
20191112 AWS Black Belt Online Seminar AWS Media Services で始めるライブ動画配信
Amazon Web Services Japan
AWS Elemental MediaConvert で動画変換
AWS Elemental MediaConvert で動画変換
虎の穴 開発室
Amazon SageMaker で始める機械学習
Amazon SageMaker で始める機械学習
Amazon Web Services Japan
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
Shuji Kikuchi
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
情シス必要論
情シス必要論
Mitsuhiro Yamashita
Recommended
SageMakerを使った異常検知
SageMakerを使った異常検知
Ryohei Yamaguchi
AbemaTVの動画配信を支えるサーバーサイドシステム
AbemaTVの動画配信を支えるサーバーサイドシステム
yuichiro nakazawa
20191112 AWS Black Belt Online Seminar AWS Media Services で始めるライブ動画配信
20191112 AWS Black Belt Online Seminar AWS Media Services で始めるライブ動画配信
Amazon Web Services Japan
AWS Elemental MediaConvert で動画変換
AWS Elemental MediaConvert で動画変換
虎の穴 開発室
Amazon SageMaker で始める機械学習
Amazon SageMaker で始める機械学習
Amazon Web Services Japan
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
Shuji Kikuchi
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
情シス必要論
情シス必要論
Mitsuhiro Yamashita
今だから!Amazon CloudFront 徹底活用
今だから!Amazon CloudFront 徹底活用
Yasuhiro Araki, Ph.D
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Web Services Japan
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Amazon Web Services Japan
Epic Online Services でできること
Epic Online Services でできること
エピック・ゲームズ・ジャパン Epic Games Japan
WebRTC Build MCU on browser
WebRTC Build MCU on browser
mganeko
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Toshiaki Maki
GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)
Amazon Web Services Japan
ストリーミングのげんざい
ストリーミングのげんざい
Tetsuya Morimoto
Amazon SageMakerでカスタムコンテナを使った学習
Amazon SageMakerでカスタムコンテナを使った学習
西岡 賢一郎
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Yahoo!デベロッパーネットワーク
プロダクトオーナー2.0
プロダクトオーナー2.0
toshihiro ichitani
Bapp Storeを調べてみたよ!
Bapp Storeを調べてみたよ!
zaki4649
20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon Cognito
Amazon Web Services Japan
Docker管理もHinemosで! ~監視・ジョブ機能を併せ持つ唯一のOSS「Hinemos」のご紹介~
Docker管理もHinemosで! ~監視・ジョブ機能を併せ持つ唯一のOSS「Hinemos」のご紹介~
Hinemos
開発者におくるサーバーレスモニタリング
開発者におくるサーバーレスモニタリング
Amazon Web Services Japan
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
フロントからバックエンドまで - WebAssemblyで広がる可能性
フロントからバックエンドまで - WebAssemblyで広がる可能性
IIJ
More Related Content
What's hot
今だから!Amazon CloudFront 徹底活用
今だから!Amazon CloudFront 徹底活用
Yasuhiro Araki, Ph.D
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Web Services Japan
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Amazon Web Services Japan
Epic Online Services でできること
Epic Online Services でできること
エピック・ゲームズ・ジャパン Epic Games Japan
WebRTC Build MCU on browser
WebRTC Build MCU on browser
mganeko
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Toshiaki Maki
GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)
Amazon Web Services Japan
ストリーミングのげんざい
ストリーミングのげんざい
Tetsuya Morimoto
Amazon SageMakerでカスタムコンテナを使った学習
Amazon SageMakerでカスタムコンテナを使った学習
西岡 賢一郎
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Yahoo!デベロッパーネットワーク
プロダクトオーナー2.0
プロダクトオーナー2.0
toshihiro ichitani
Bapp Storeを調べてみたよ!
Bapp Storeを調べてみたよ!
zaki4649
20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon Cognito
Amazon Web Services Japan
Docker管理もHinemosで! ~監視・ジョブ機能を併せ持つ唯一のOSS「Hinemos」のご紹介~
Docker管理もHinemosで! ~監視・ジョブ機能を併せ持つ唯一のOSS「Hinemos」のご紹介~
Hinemos
開発者におくるサーバーレスモニタリング
開発者におくるサーバーレスモニタリング
Amazon Web Services Japan
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
フロントからバックエンドまで - WebAssemblyで広がる可能性
フロントからバックエンドまで - WebAssemblyで広がる可能性
IIJ
What's hot
(20)
今だから!Amazon CloudFront 徹底活用
今だから!Amazon CloudFront 徹底活用
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Epic Online Services でできること
Epic Online Services でできること
WebRTC Build MCU on browser
WebRTC Build MCU on browser
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)
ストリーミングのげんざい
ストリーミングのげんざい
Amazon SageMakerでカスタムコンテナを使った学習
Amazon SageMakerでカスタムコンテナを使った学習
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
プロダクトオーナー2.0
プロダクトオーナー2.0
Bapp Storeを調べてみたよ!
Bapp Storeを調べてみたよ!
20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon Cognito
Docker管理もHinemosで! ~監視・ジョブ機能を併せ持つ唯一のOSS「Hinemos」のご紹介~
Docker管理もHinemosで! ~監視・ジョブ機能を併せ持つ唯一のOSS「Hinemos」のご紹介~
開発者におくるサーバーレスモニタリング
開発者におくるサーバーレスモニタリング
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
フロントからバックエンドまで - WebAssemblyで広がる可能性
フロントからバックエンドまで - WebAssemblyで広がる可能性
動画コンテンツにおいて、BGMとの制御でつまづいたところ
1.
動画コンテンツにおいて、 バックグラウンドの音声との制御で つまづいたところ 株式会社セプテーニ・オリジナル 嶽 雅也
2.
動画コンテンツにおいて、 バックグラウンドの音声BGMとの制 御でつまづいたところ 株式会社セプテーニ・オリジナル 嶽 雅也
3.
アジェンダ • 自己紹介 • GANMA!の紹介 •
BGMとの制御でつまづいたところ • 動画の音声とBGMが同時に再生される • BGMの再開が出来ない • 最後に
4.
自己紹介 • 株式会社セプテーニ・オリジナルの 嶽 雅也(だけ
まさや)です • Twitterアカウントは @masayadk1229です • 「GANMA!」というオリジナルマンガ配信 アプリの開発に携わっています
5.
GANMA!の紹介
6.
オリジナルマンガ配信アプリ GANMA! • 累計800万ダウンロード • 10代が今最も使っているアプリランキング9位 http://lab.appa.pe/2017-09/10s-app- ranking2017.html •
AppStoreのレビューでは5 GooglePlayでも4.7の評価をキープ
7.
8.
本日の発表内容について • GANMA!のトップ画面で再生される動画で、 BGMとの制御でつまづいたことについて、 お話します
9.
BGMの定義 • iPhoneの「ミュージック」アプリなどで、 バックグラウンドで流す音声
10.
ここから本題です
11.
動画の音声とBGMが 同時に再生される
12.
ある日 調査します! (そんなことできるのだろうか) 動画の音声をONにしたら、 BGMをOFFにしたい プロダクトオーナー
13.
14.
調査結果 • AVAudioSessionに 適切なカテゴリを設定することで解決
15.
解説
16.
AVAudioSessionとは • 「AVAudioSession」は簡単に言えば 音声周りの制御を司るフレームワーク です • Audio
Sessionプログラミングガイド には日本語で「AVAudioSession」の 使い方が記載されています
17.
• 以下の箇所を参考にしました • P16
~ P22 カテゴリの取り扱い • P46 ~ P47 オーディオセッションのカテゴリと モード AVAudioSession プログラミングガイド #1
18.
AVAudioSession プログラミングガイド #2 • こちらを読み解くのに、 音声入出力などで混乱したので、 苦労しました •
説明に必要なので、次のスライドで カテゴリの種類について紹介します
19.
AVAudioSessionの カテゴリーの種類 カテゴリー 音 声に割り込み AVAudioSessionCategorySoloAmbient(default)
● AVAudioSessionCategoryAmbient ✖︎
20.
音声に割り込み • 音声の割り込みが●なら、 BGMを停止して、 アプリの音声のみを流します • 音声の割り込みが✖︎なら、 BGMと同時にアプリの音声が 流れます
21.
音声に割り込み • 音声の割り込みが●なら、 BGMを停止して、 アプリの音声のみを流します →今回、設定したいのはこちら! • 音声の割り込みが✖︎なら、 BGMと同時にアプリの音声が 流れます
22.
AVAudioSessionの カテゴリーの種類 カテゴリー 音 声に割り込み AVAudioSessionCategorySoloAmbient(default)
● AVAudioSessionCategoryAmbient ✖︎
23.
改めて、調査結果 • AVAudioSessionに適切なカテゴリ を設定することで解決
24.
なぜ、動画の音声と BGMが同時に再生され たのか
25.
デフォルト以外(Ambient)が 設定されていたのが原因 カテゴリー 音 声に割り込み AVAudioSessionCategorySoloAmbient(default)
● AVAudioSessionCategoryAmbient ✖︎
26.
BGMの再開が 出来ない
27.
次の日 BGMの停止できました! 音声をOFFにしたら、 BGMが停止されたところから再開させたい 調査します! (ドキュメントに記述あったかな…)
28.
29.
調査した際に大きく つまづきました
30.
説明の都合上、 大きく3つに 分類して説明します
31.
つまづいた点 ① 実装方法の調査 ② 実装 ③
エラー原因の追究
32.
つまづいた点 ① 実装方法の調査 ② 実装 ③
エラー原因の追究
33.
①実装方法の調査
34.
調査結果 • BGMの停止/再開時に、 AVAudioSessionに モードなどを設定する必要 ことで解決できそう
35.
解説
36.
BGMの停止時 • _
37.
BGM停止時に設定する値 ① カテゴリーのオプション • interruptSpokenAudioAndMixWithOthers ②
モード • AVAudioSessionModeSpokenAudio ③ オーディオセッション • 有効→setActive(true)
38.
BGMの停止時 • _① ② ③
39.
BGMの再開時
40.
BGM再開時に設定する値 ① オーディオセッション • 無効→setActive(false) ②
オーディオセッションのオプション • notifyOthersOnDeactivation
41.
BGMの再開時 ① ②
42.
コードサンプル • iOS 10
Swift Programming Cookbook: Solutions and Examples for iOS Apps • 16.3 Enable Spoken AudioSessionsに 記載があります
43.
調査時の苦労 • 検索のみでは実装方法を見つけることが できませんでした • Audio
Sessionプログラミングガイドには 記載もありません(更新が2014年まで) →AVAudioSessionのメソッドの定義を眺 めて、必要そうなメソッドを 探しました
44.
つまづいた点 ① 実装方法の調査 ② 実装 ③
エラー原因の追究
45.
②実装
46.
調査結果 • BGMの再開時に、 動画を停止する必要があった
47.
解説
48.
BGMの再開時 • ①実装方法の調査の実装では、 次のページで紹介するエラーが 発生して動作しませんでした
49.
エラーログ 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.
50.
Google先生 I/Oを実行している オーディオセッションを無効にします オーディオセッションを無効にする前に 、すべてのI/Oを停止または一時停止す る必要があります
51.
BGM再開時に 音声が関係する動画などは 全て停止してください
52.
BGMを再開する 処理のまとめ 1. 動画を停止する 2. BGM再開処理を行う 3.
動画を再開する
53.
同じエラーが発生して 動かない
54.
???
55.
つまづいた点 ① 実装方法の調査 ② 実装 ③
エラー原因の追究
56.
③エラー原因の追究
57.
試行錯誤の結果、、
58.
動画停止後に スリープしたら動いた
59.
エラーの整理 • 動画が停止した直後だと、BGMの 再開処理でエラーが発生 • 動画を停止後にスリープしたら BGMの再開処理でエラーが発生し ない
60.
動画の再生状態を AVAudioSessionに 即座に通知できていない?
61.
通知できる手段を探す
62.
AVPlayer.rateが 使えそう!
63.
AVPlayer.rateとは? • 動画の現在の再生レートを 表すものです • 0.0なら停止中、1.0なら再生中を 表します
64.
AVAudioSessionについて の割り込みの記載がある
65.
動画の再生状態を通知できる コード
66.
BGMを再開する 処理のまとめ 1. 動画を停止する 2. AVAudioSessionに動画の停止を 通知 3.
BGM再開処理を行う 4. 動画を再開する
67.
BGMを再開する 処理のコード
68.
最後に • 音声と動画周り情報があまり出てこない ので、実装するにあたって苦労します • 今回、AVPlayer.rateを使って少し無理 矢理実装しました •
もし他の手段があったら、後でこっそり 懇親会でお話を聞かせてください
69.
告知
70.
弊社のカフェスペースを利用して、お酒や食事をし ながら行う勉強会を継続的に実施するコミュニティ iOS, DDD, Android,
Scala, アーキテクチャetc…
71.
今度の火曜日に 第3回があります! • 第3回は、9/19(火)に分析基盤 Meetupを予定して いますので、ご興味のある方はぜひご参加くだ さい •
新宿Geek Lounge#3 分析基盤 Meetup • 先日実施された第2回の参加レポートはこちら
72.
ご静聴 ありがとうございました
73.
引用元 (Apple公式ドキュメント) • Audio Sessionプログラミングガイド •
interruptSpokenAudioAndMixWithOthers • AVAudioSessionModeSpokenAudio • setActive • notifyOthersOnDeactivation
74.
引用元 (サンプルコード/ソースコード) • iOS 10
Swift Programming Cookbook: Solutions and Examples for iOS Apps • ソースコード(Appleのフレームワーク) • AVFoundation.AVAudio.AVAudioSession.swift • AVFoundation.AVPlayer
Download now