새로운 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을 확인하십시오.
감사합니다. Laurent. 이것은 매우 유용한 정보입니다. 나는이 답변을 정리했지만 여전히 "옳은"방식은 아닙니다. CoreAudio를 사용하기 때문에 "올바른"방법은 해당 장치의 모든 작업에 CoreAudio를 사용하는 것입니다. 다른 해결책을 찾지 못하면이 답변을 예외로 표시합니다. –
그래, CoreAudio에서 직접 이렇게하는 것이 훨씬 더 합리적 일 것입니다. 그러나 AirPlay에 대한 세 번째 부분 지원은 OSX에서 매우 새로운 기능이므로 API에서 큰 구멍을 발견하는 것은 놀라운 일이 아닙니다. –