顯示具有 Airplay 標籤的文章。 顯示所有文章
顯示具有 Airplay 標籤的文章。 顯示所有文章

2016年3月9日 星期三

iOS - Enable AirPlay for your APP

之前寫了一個簡單的音樂APP,可以在同時使用 AudioUnit 同時進行錄音與播放。使用手機測試錄音與播放是沒問題的,但是當我想要將程式改為在手機端錄音,透過 AirPlay 在電視上播放時卻發生問題,問題現象是手機上不會出現 AirPlay 選項。

以下記錄使用 Audio Unit 各種實驗與其結果:

1. 先了解 Audio 運作時可以設定的各種模式
摘錄 Apple 定義的 AudioSession Category/Mode 設定值 
Table B-1  Audio session category behavior
Category identifiers
Silenced by the Ring/Silent switch and by screen locking see note
Interrupts non-mixable apps audio
Allows audio input (recording) and output (playback)
AVAudioSessionCategoryAmbient
Yes
No
Output only
AVAudioSessionCategoryAudioProcessing
Yes
No input and no output
AVAudioSessionCategoryMultiRoute
No
Yes
Input and output
AVAudioSessionCategoryPlayAndRecord
No
Yes by default; no by using override switch
Input and output
AVAudioSessionCategoryPlayback
No
Yes by default; no by using override switch
Output only
AVAudioSessionCategoryRecord
No (recording continues with the screen locked)
Yes
Input only
AVAudioSessionCategorySoloAmbient
Yes
Yes
Output only
Table B-2  Modes and associated categories
Mode identifiers
Compatible categories
AVAudioSessionModeDefault
All
AVAudioSessionModeVoiceChat
AVAudioSessionCategoryPlayAndRecord
AVAudioSessionModeGameChat
AVAudioSessionCategoryPlayAndRecord
AVAudioSessionModeVideoRecording
AVAudioSessionCategoryPlayAndRecord
AVAudioSessionCategoryRecord
AVAudioSessionModeMoviePlayback
AVAudioSessionCategoryPlayback
AVAudioSessionModeMeasurement
AVAudioSessionCategoryPlayAndRecord
AVAudioSessionCategoryRecord
AVAudioSessionCategoryPlayback
AVAudioSessionModeVideoChat
AVAudioSessionCategoryPlayAndRecord
因為此 APP 同時有 Audio In/Audio Out,所以能夠選擇的設定如下
  • AVAudioSessionCategoryMultiRoute
  • AVAudioSessionCategoryPlayAndRecord
  • AVAudioSessionModeDefault
  • AVAudioSessionModeVoiceChat
  • AVAudioSessionModeGameChat
  • AVAudioSessionModeVideoRecording
  • AVAudioSessionModeMeasurement
  • AVAudioSessionModeVideoChat

2. 測試不同 Audio Session Mode 與 Audio Unit 同時啟用時所造成的影響
以下僅為個人實驗結果,當 APP 啟動後,若設定為下列 Category/Mode 不會出現 Airplay選項。
  • AVAudioSessionCategoryMultiRoute
  • AVAudioSessionCategoryPlayAndRecord
  • AVAudioSessionModeGameChat
  • AVAudioSessionModeVideoRecording
  • AVAudioSessionModeVoiceChat

圖例如下:


當 APP 啟動後,若設定為下列 Category/Mode 可以出現 Airplay選項。
  • AVAudioSessionModeDefault
  • AVAudioSessionModeMeasurement
  • AVAudioSessionModeVideoChat

此時已經可以正常播放音樂,圖例如下:
 
但是一旦當APP開始進行錄音時,卻會變成只有 "iPhone" 與 "iPhone擴音"可選
圖例如下:


設定方式舉例如下: 
[[sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionMixWithOthers error:&setCategoryErr];
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionModeDefault error:&setCategoryErr]; 
經過上述實驗,我會懷疑是否使用Audio Unit 進行錄音時,便無法使用Airplay。


3. 設定 APP Capabilities,設定 Background Modes 支援 Audio and Airplay,如下圖:
此作法也是沒用。


結論:本來想作好此功能之後,可以把家裡電視跟舊iPhone結合成卡拉OK,沒想到一直試不出來,只好作罷。如果有好心人試出這個功能,麻煩請教教我啊,謝謝。

參考資料
  1. Audio Session Categories and Modes
  2. Jawbone/AudioSessionManager 
  3. AudioSessionProgrammingGuide
  4. EnrichYourAppforAirPlay


2013年12月3日 星期二

AirPlay 測試心得

最近使用 PPS 播放影音時,無法與 Apple TV 進行 airplay,印象中之前是可以的,趁著今晚有空,針對 AirPlay 的互通性進行以下測試。

AirPlay 原理


基本概念


AirPlay 是一個用來與 Apple TV溝通的協定,可用 iOS 設備或 itunes將資料交給 Apple TV進行播放,其實作使用 Multicast DNS, HTTP, RTSP, RTP or NTP 等協定,並加上些許的修改。