스트리트 뷰를 통한 직접 업로드

버전 2.1

배경

이전 버전의 API에서는 OSC 호환 카메라가 Google 스트리트 뷰 iOS 및 Android 앱에서 연결할 수 있는 Wi-Fi 액세스 포인트를 만들었습니다. 앱은 OSC 카메라로 사진을 캡처하도록 지시하고 카메라에서 캡처된 콘텐츠를 다운로드한 다음 Google 스트리트 뷰에 게시합니다. 콘텐츠 게시를 가속화하기 위해 OSC 카메라가 스트리트 뷰 서버에 콘텐츠를 직접 업로드할 수 있는 새로운 워크플로(선택사항)를 도입했습니다. 이렇게 하면 카메라에서 앱으로 먼저 콘텐츠를 이동한 다음 앱에서 스트리트 뷰 서버로 오랫동안 콘텐츠를 이중으로 전송할 필요가 없습니다. 이 기능은 API 수준 2.1에 추가되었으며, Wi-Fi 액세스 포인트를 제공할 수 있을 뿐만 아니라 인터넷에 액세스할 수 있는 인프라 Wi-Fi 액세스 포인트에 연결할 수 있는 OSC 카메라에만 해당됩니다.

개요

새로운 업로드 워크플로에서는 사용자가 두 가지 Wi-Fi 모드 간에 전환할 수 있는 방법 (예: 전용 실제 버튼 또는 기존 버튼의 조합)을 카메라에 제공해야 합니다.

  • 직접 모드: 이 모드에서는 카메라가 휴대기기가 카메라에 연결할 수 있는 액세스 포인트 역할을 합니다. 이 모드에서 휴대기기는 사진 캡처와 같은 작업을 실행하도록 카메라를 제어할 수 있습니다. 휴대기기에서는 카메라가 인터넷 모드로 전환하는 데 사용할 수 있는 Wi-Fi 액세스 포인트 사용자 인증 정보를 카메라에 제공할 수도 있습니다.
  • 인터넷 모드: 이 모드에서는 카메라가 인터넷 액세스가 가능한 Wi-Fi 액세스 포인트에 연결됩니다. 카메라가 이전에 직접 모드였을 때 앱에서 제공된 액세스 포인트 식별자와 비밀번호를 사용합니다. 이 모드에서는 휴대기기가 카메라에서 스트리트 뷰 서버로 직접 업로드를 시작할 수 있습니다. 사진 촬영과 같은 작업을 위해 카메라를 계속 제어할 수도 있습니다

카메라 모드는 카메라가 꺼졌다가 다시 켜지는 동안에도 유지되어야 합니다. 또한 카메라가 현재 Wi-Fi 모드를 사용자에게 알리는 신호 (예: 화면의 빛, 소리 또는 표시기)를 제공하는 것이 좋습니다.

또한 카메라가 인터넷 모드에 있는 동안 통신을 처리하기 위한 검색 프로토콜(검색 참고)이 구현되어 있어야 합니다.

인터넷 모드 설정

  1. 사용자가 카메라를 켭니다. 인터넷 모드가 아직 설정되지 않았으므로 직접 모드로 시작됩니다.
  2. 휴대기기가 카메라의 Wi-Fi에 연결됩니다.
  3. 앱이 자체 서명된 인증서를 생성합니다.
  4. 앱은 카메라가 연결해야 하는 인프라 Wi-Fi 액세스 포인트의 SSID, 해당 액세스 포인트의 비밀번호, 카메라가 나중에 앱을 인증하는 데 사용하는 자체 서명 인증서를 사용하여 switchWifi 명령어를 카메라에 전송합니다.
    • 카메라는 Wi-Fi 사용자 인증 정보와 앱의 자체 서명 인증서를 모두 안전하게 저장해야 합니다.
    • 카메라가 여러 인프라 Wi-Fi 액세스 포인트에 연결해야 할 수 있으므로 카메라에 여러 개의 Wi-Fi 사용자 인증 정보를 저장하는 것이 좋습니다. 최소 요구사항은 카메라가 최신 Wi-Fi 사용자 인증 정보를 저장해야 한다는 것입니다.
  5. 카메라는 앱이 나중에 카메라를 인증하는 데 사용하는 자체 서명 인증서로 응답합니다.
  6. 이제 사용자가 실제 전환 버튼 등을 사용하여 카메라에서 직접 직접 모드인터넷 모드 간에 전환할 수 있습니다.

디스커버리

OSC 카메라 검색은 제로 컨퍼런스 기반 프로토콜입니다. 카메라는 IPv4 링크-로컬 주소 지정을 구현해야 하며(MUST) mDNS(멀티캐스트 DNS) 및 DNS-SD(DNS 기반 서비스 검색) 사양을 준수해야 합니다(MUST).

서비스 인스턴스 이름

서비스 인스턴스 이름의 <Service> 부분에는 OSC 카메라에서 _osc._tcp를 사용해야 합니다. 서비스 인스턴스 이름의 <Domain> 부분에서는 OSC 카메라에 local.를 사용해야 합니다. local 뒤에 후행 .가 있습니다.

TXT 레코드

카메라가 TXT 레코드에 다음 키-값 쌍을 전송해야 합니다. txtvers, ty, id

txtvers

향후 TXT 버전 업데이트를 허용하려면 키-값 쌍 txtvers=1를 사용합니다.

ty

사용자가 읽을 수 있는 카메라 이름을 제공합니다(예: ty=Google Street View Optimized Spherical Camera Model XYZ).

id

카메라의 고유 ID를 제공합니다(예: id=A unique id of the camera). id의 값은 /osc/info 출력의 cameraId와 같아야 합니다(MUST).

공지사항

카메라 시작 또는 종료 시 카메라는 mDNS 사양에 설명된 대로 알림 단계를 실행해야 합니다(MUST). 1초 이상의 간격을 두고 해당하는 알림을 최소 두 번 전송해야 합니다(SHOULD).

시작

카메라 시작 시 mDNS 사양에 설명된 대로 프로브 및 알림 단계를 실행해야 합니다(MUST). 이 경우 SRV, PTR, TXT 레코드를 전송해야 합니다. 가능하면 모든 레코드를 하나의 DNS 응답으로 그룹화하는 것이 좋습니다. 그렇지 않은 경우 SRV, PTR, TXT 레코드 순서를 사용하는 것이 좋습니다.

종료

카메라 종료 시 mDNS 문서의 섹션 10.1에 설명된 것처럼 TTL=0로 '작별 패킷'을 전송하여 모든 관계자에게 알려야 합니다(SHOULD).

자체 서명 인증서

앱과 카메라는 인터넷 모드 설정 중에 공유된 자체 서명 인증서를 사용하여 서로를 인증하고 SSL 상호 인증을 통해 교환된 데이터를 보호하는 보안 채널을 빌드할 수 있습니다.

인터넷 모드에서 앱은 SSL 서버 역할을 하고 카메라는 클라이언트 역할을 합니다. 카메라는 서버의 인증서가 앱의 자체 서명된 인증서와 일치하는지 확인하고 앱은 클라이언트의 인증서가 카메라의 인증서와 일치하는지 확인합니다.

상호 인증을 지원하는 모든 SSL 라이브러리 (예: OpenSSL)를 사용하여 인터넷 모드에서 앱과 카메라 간에 SSL 연결을 설정할 수 있습니다.

새 업로드 흐름

  1. 카메라가 인터넷 모드가 아닌 경우 사용자가 인터넷 모드로 전환합니다. 카메라는 저장된 사용자 인증 정보를 사용하여 인프라 Wi-Fi에 연결합니다.
  2. 또한 휴대기기는 인프라 Wi-Fi에 연결하고 카메라를 검색합니다.
    • 이렇게 하려면 카메라가 로컬 검색 프로토콜 mDNS/DNS-SD를 구현해야 합니다(검색 참고).
    • 구현 방법에 관한 구체적인 요구사항은 없습니다(mDNSResponder를 참조하는 것이 좋음).
    • 앱과 카메라는 모두 인터넷 모드 설정 중에 자체 서명된 인증서를 생성하고 공유합니다. 인터넷 모드 중에 앱과 카메라는 상호 SSL 인증을 통해 서로를 인증합니다.
    • 카메라가 검색되면 HTTP 1.1을 기반으로 하는 로컬 네트워크를 통해 직접 카메라와 통신합니다. 데이터 형식은 JSON을 기반으로 합니다. 요청은 GET 또는 POST 요청일 수 있습니다.
  3. 앱은 listFiles 명령어를 사용하여 카메라에 파일 목록을 쿼리합니다.
  4. 앱은 uploadFile 명령어로 업로드를 시작하여 이미지 또는 동영상을 카메라에서 스트리트 뷰 서버로 직접 업로드합니다.
  5. 앱은 status 명령어를 사용하여 주기적으로 카메라를 폴링하여 업로드 진행률을 확인합니다.