2020년 8월 10일 월요일

avahi-publish 써서 크롬캐스트 장치명 추가 등록

(한동안 써보니, 정확한 이유는 모르겠지만, 따로 등록해두었다고 해서 항상 장치가 있는 걸로 인식되지는 않았다.)


애플이 만든  AirPlay (구 AirTunes) 기술을 요긴하게 썼는데, 어떤 장치가 스피커를 물고 있으면 다른 장치를 연결하기 전에 먼저 풀어줘야 하는 특성이 있었다. AirPlay 호환 프로그램이 동작은 멈췄는데 연결만 안 풀린 걸로 인식되거나 하면 뒷처리가 번거로워서 단점 아닌 단점으로 기억한다.

크롬캐스트는 이미 물려있는 장치여도 다른 클라이언트가 접속하면 기존 연결을 풀어버리고 새로 연결되는 식으로 동작한다. 그래서 기존 연결이 있는지 신경 쓸 필요 없이 바로 음악이나 영상을 전송할 수 있다.

미박스 S를 쓰는데, 안드로이드 9 버전 2차 패치가 들어가고 부터는 화면이 꺼지면 블루투스 리모콘 연결 외에는 다시 깨워지지가 않는다. (그 전에는 https://github.com/d4rken/wakelock-revamp 를 깔아서 화면이 꺼져도 CPU이 살아있게 하는 옵션을 쓰면 네트워크 접속 가능한 상태가 되어서 클라이언트가 다시 접속하면 화면이 살아나는 식으로 쓸 수 있었다)

리모콘으로 깨워도 약간 애매한 게, 네트워크에 없던 게 새로 등록되는 거라서 클라이언트에 크롬캐스트 장치로 인식되기까지 시간이 좀 걸리거나 할 수가 있다. 그래서 장치 자체는 분명 켜졌는데 클라이언트에 인식 시키는 게 귀찮은 상황이 생기기도 한다.

그렇다면 미박스 자체가 mDNS에 등록하는 것과 똑같은 걸 하나 더 붙여두면 클라이언트가 (장치가 꺼져 있으면 실제로 접속이 안 될 수는 있어도) 장치를 발견하지 못하는 상황은 없어질 거라는 생각으로 시도해봤다.

@reboot        avahi-publish-address -R mibox.local IP_ADDR &
@reboot        avahi-publish-service mbs -H mibox.local _googlecast._tcp 8009 TEXT_CHUNK &

IP_ADDR는 미박스가 할당 받는IP를 써주면 된다. DHCP가 대체로 같은 IP를 주니까 굳이 avahi-resolve 까지 써가면서 동적으로 검출하지는 않아도 된다.

TEXT_CHUNK는 avahi-browse --resolve _googlecast._tcp 해보면 실제 미박스가 등록한 텍스트 정보가 나오는 걸 그대로 복사해서 쓰면 된다. (fn, md 항목이 눈에 보이는 장치명이 되는데 미박스 실제 장치명과 같게 해도 무방할 듯 하다)