태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

[AirPlay] avahi-publisher 로 airplay service publish 테스트

Posted on 2013.09.14 19:49
Filed Under General tip

  • 이 글은 www.jakeworld.net 에서 작성되었습니다.

  • 퍼가실 때에는 이 박스와 함께 복사해주세요.

 Airplay service를 위해 서비스 정보를 publish하는 데는 일반적으로 Apple의 표준 multicast DNS 프로토콜 스택인 mDNS를 사용하거나, opensource에서 나온 avahi 를 사용합니다. 보통 윈도우나 OSX에서는 mDNS를 사용하며, 리눅스에서는 avahi를 사용하며, XBMC는 타겟에 따라 mDNS를 사용하거나 avahi를 사용하여 서비스를 publish합니다.


여기서는 간단하게 avahi에서 airplay service publish를 테스트 하는 명령어에 대해 알아보겠습니다.


 커맨드로 service publish를 테스트 하기 위해서는 avahi 소스 아래 avahi-utils를 빌드를 해야합니다. 기본적으로 dbus를 이용하여 avahi-daemon과 연동하기 때문에 빌드할 때 libdbus와 같은 부가적인 라이브러리들이 필요하게 됩니다. 빌드에 관한 내용은 따로 설명드리지 않겠습니다.



빌드를 성공적으로 마치고 백 그라운드에서 avahi-daemon이 돌아가고 있다면, 다음과 같은 명령어로 service publish가 가능합니다.


./avahi-publish -s furyheimdall _airplay._tcp 80 deviceid=11:22:33:44:55:66 features=0x39f7 model=AppleTV2,1 srcvers=130.14



furyheimdall : service name (airplay sender (iOS, iTunes)에서 보여질 이름)

_airplay._tcp : service type (airplay)

80 : 접속 포트 (서비스 publish 테스트기 때문에 포트는 중요하지 않습니다. 임의로 입력해주세요. 실제 서비스를 제공할 때는 제대로 명시해줘야 합니다.)

deviceid : mac address (이 부분은 해당 장치의 mac address 입니다)

features : AppleTV에서 publish하는 서비스 features를 그대로 명시한 내용입니다. 이부분은 실제 airplay 서비스를 제공할 경우 주의깊게 봐야합니다. 자세한 사항은 airplay unofficial spec을 참고하시면 됩니다.

model : 대충 입력해주세요.

srcvers : 이것도 대충... 

이렇게 입력만 해도 iTunes나 iOS 6 버전까지는 정상적으로 서비스 항목이 보이게됩니다.


하지만 iOS 7이후에서는 AirTunes 서비스 또한 publish 되어야 합니다. 그건 아래와 같이 입력하면 됩니다.


./avahi-publish -s 112233445566@furyheimdall _raop._tcp 36666 ch=2 cn=0,1 ek=1 et=0,1 pw=false sm=false sr=44100 ss=16 sv=false tp=UDP txtvers=1 vn=3

 112233445566@furyheimdall : Service name으로 이 항목은 airplay 서비스 내용과 동일한 name와 더불어 앞에 airplay 서비스 publish에 사용했던 mac address와 동일한 정보를 적고 @으로 구분자를 넣어줘야 함 (중요!)

_raop._tcp : service type (airtunes)

36666 : service port

ch : audio channel

cn : supported audio codecs

ek : ???

et : supported encryption type

pw : password required

sm : ???

sr : audio sample rate

ss : audio sample size

sv : ????

tp : supported transport type

txtvers : txt version (normally 1)


이렇게 두 가지 service를 publish 이 후 avahi-browser 명령어를 통해 서비스 된 정보를 확인합니다.


./avahi-browse -a


요런 정보가 나오면 정상적으로 publish 된겁니다.

+   p3p1 IPv4 112233445566@furyheimdall                     AirTunes Remote Audio local

+   p3p1 IPv4 furyheimdall                                  _airplay._tcp        local



그러면 아래와 같이 동일한 네트워크 내에 있는 컴퓨터의 iTunes 혹은 iPhone, iPad로 서비스를 확인합니다.




AirPlay unofficial spec : http://nto.github.io/AirPlay.html


신고
Creative Commons License
Creative Commons License

댓글을 달아 주세요

  1. 빡세 2013.11.28 17:54 신고  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사합니다.
    제가 추가로 확인해보니 airtune을 같이 enable하면 airplay로 보이지만 간헐적으로 (꽤 자주 ) airtune으로 보이는 현상이 있습니다.
    model이 appleTV2,1로 되어 있는 부분을 임의로 바꾸면 동일한 증상이 나옵니다.
    appleTV2,1로 되어 있을경우 fairplay요청을 하고요
    피할수 있는 방법이 없을까요..?

    • JakeWorld 2014.05.15 23:21 신고  댓글주소  수정/삭제

      제가 블로그 관리를 잘 안해서 ㅠㅠ 죄송합니다. (게다가 스팸때문에 못봤네요)
      해당 현상을 xbmc 작업 내역 참조하여 publish string 관련한 수정 사항을 적용하였을 때 빈도가 많이 줄었던 것으로 기억합니다.
      그리고 fairplay 요청은 unofficial spec 참조하셔서 fairplay flag를 꺼주시면 됩니다. 그래도 airtunes 의 경우 기본적으로 aes128 encrypted stream을 전송하기 때문에 연결단계부터 요청된 digest 에 대해 rsa signing 및 이후 스트림에 대한 decryption이 필요하게 됩니다.

About



모바일 페이지 QR 코드

Counter

· Total
: 452,035
· Today
: 9
· Yesterday
: 76


DNS server, DNS service