2012-12-24 2 views
4

현재 응용 프로그램 내부의 AirPlay 장치에 문제가 있습니다. 이 topic을 airplay 장치의 구성을위한 샘플로 사용했습니다. 하지만 현재 두 가지 문제에 대한 해결책을 찾지 못했습니다 :AirPlay 오디오 장치가 사용 중인지, CoreAudio 메서드로 암호로 보호되어 있는지 확인하는 방법

우선 동시 입력을 지원하지 않으므로 우선 airplay 장치가 사용 중이 아닌지 감지 할 수 없습니까? CoreAudio 내부에서 어떤 속성을 찾으려고했지만 행운이 없었습니다.

내가 아는 두 번째 문제점은 암호가 활성화 된 airplay 장치에 관한 것입니다. 비밀번호가 입력 된 경우 알림을받을 수 없습니다. 결과적으로 내 애플리케이션이 해당 이벤트 에서처럼 반응 할 수 없습니다.

도움이 필요하시면 미리 감사드립니다.

답변

1

새로운 CoreAudio API에 익숙하지 않아 훨씬 간단한 방법이 있습니다. 작년에 똑같은 문제를 해결 한 방법이 있습니다.

Bonjour에서 암호가 필요한 장치 (멀티 캐스트 DNS 또는 Zeroconf라고도 함)를 결정할 수 있습니다. 원본 이름을 CoreAudio 정보와 일치시킬 수 있어야합니다. 오디오 AirPlay의 경우 장치 _raop._tcp을 확인해야합니다. ,

우선합니다 (dns-sd 명령이 산 사자 전에 mDNS라고주의) 근처의 에어 플레이 장치를 검색 :

 
laurent ~ $ dns-sd -B _raop._tcp 
Browsing for _raop._tcp 
DATE: ---Tue 15 Jan 2013--- 
17:37:31.977 ...STARTING... 
Timestamp  A/R Flags if Domain     Service Type    Instance Name 
17:37:31.977 Add  2 4 local.     _raop._tcp.    [email protected] de Laurent 

다음, AirPlay를 인스턴스의 전체 기록을 가져 여기 터미널에서 작동하는 방법 :

 
laurent ~ $ dns-sd -L "[email protected] de Laurent" _raop._tcp local 
Lookup [email protected] de Laurent._raop._tcp.local 
DATE: ---Tue 15 Jan 2013--- 
17:43:47.097 ...STARTING... 
17:43:47.098 [email protected]\032de\032Laurent._raop._tcp.local. can be reached at iMac-de-Laurent.local.:5000 (interface 4) 
et=0,1 ek=1 ss=16 raAudioFormats=ALAC,L16 tp=UDP pw=false txtvers=1 ramach=iMac12,1 vn=3 md=0,1,2 sv=false sm=false ch=2 sr=44100 rast=afs rastx=iafs cn=0,1 

pw=false은 암호가 없음을 나타냅니다. 이것이 기본 아이디어입니다. 이제 DNSServiceResolve을 사용하여 동일한 작업을 수행해야합니다.

이제 내가 알고있는 바쁜 장치인지 확인하는 유일한 방법은 실제로 장치에 연결하는 것입니다. 장치 상태 (453)로 응답

 
RTSP/1.0 OPTIONS * 
# empty line 

경우, 그것은 이미 스트리밍을 의미 :이 요청을 보낼 수 있도록 내부적으로, 에어 플레이는 RTSP를 사용합니다.

자세한 내용은 내 AirPlay RTSP stack을 확인하십시오.

+0

감사합니다. Laurent. 이것은 매우 유용한 정보입니다. 나는이 답변을 정리했지만 여전히 "옳은"방식은 아닙니다. CoreAudio를 사용하기 때문에 "올바른"방법은 해당 장치의 모든 작업에 CoreAudio를 사용하는 것입니다. 다른 해결책을 찾지 못하면이 답변을 예외로 표시합니다. –

+0

그래, CoreAudio에서 직접 이렇게하는 것이 훨씬 더 합리적 일 것입니다. 그러나 AirPlay에 대한 세 번째 부분 지원은 OSX에서 매우 새로운 기능이므로 API에서 큰 구멍을 발견하는 것은 놀라운 일이 아닙니다. –