Skip to content

PoC 방송 수신

In Ye, Kim edited this page Nov 7, 2024 · 3 revisions

PoC 방송 수신을 작업한 과정을 작성한 문서입니다.

목표

  1. Live Station API를 사용해서 송출중인 방송 수신

과정

Live Station API를 사용해서 썸네일 수신

  • 참고문서: Live Station API
  • 개요: PoC를 위해 Live Station API를 사용해 송출중인 방송 썸네일을 불러오는 작업을 수행했습니다.

썸네일은 Live Station에서 자동으로 만들어줍니다.

요청 URL과 파라미터를 세팅했습니다.

헤더 시그니처를 만들때 중요한 부분은 시그니처를 만드는 부분입니다.

header

시그니처 만드는 방법

  1. 시그니처 생성에 필요한 메시지(문자열)을 만듭니다.
  • 이때 HTTP 메서드(GET)요청 URL 경로쿼리스트링, 타임스탬프, 엑세스키가 필요합니다.
  • 타임스탬프는 요청 헤더의 타임스탬프와 정확하게 동일해야합니다.
  1. HMAC SHA256으로 서명 생성
  • 시크릿키와 메시지를 UTF-8 문자열로 변환해서 HMAC 함수에서 사용할 준비를 합니다.
  • 서명을 만들기 위해서 시크릿 키를 HmacSHA256 알고리즘의 키로 설정하여 바이트 값을 저장합니다.
  1. Base64인코딩
  • 생성된 HMAC 서명을 Base64로 인코딩합니다.
  • 최종 시그니처를 반환합니다.
func makeSignature(serviceUrlType: String) -> String? {
    let space = " "
    let newLine = "\n"
    let method = "GET"
    let url = "/api/v2/channels/ls-20241105131641-go2pN/serviceUrls?serviceUrlType=\(serviceUrlType)"
    let accessKey = ServiceURLAPI.accessKey
    let secretKey = ServiceURLAPI.secretKey
    let timestamp = String(Int(Date().timeIntervalSince1970 * 1000))

    // 1. 메시지 생성
    let message = "\(method)\(space)\(url)\(newLine)\(timestamp)\(newLine)\(accessKey)"

    // 2. HMAC SHA256으로 서명 생성
    guard let keyData = secretKey.data(using: .utf8),
          let messageData = message.data(using: .utf8) else {
        return nil
    }

    var hmac = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
    messageData.withUnsafeBytes { messageBytes in
        keyData.withUnsafeBytes { keyBytes in
            // HMAC해싱을 수행
            CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA256), keyBytes.baseAddress, keyData.count, messageBytes.baseAddress, messageData.count, &hmac)
        }
    }

    let hmacData = Data(hmac)
    let base64Signature = hmacData.base64EncodedString()

    return base64Signature
}

😭 마주한 오류

타임스탬프

  1. ‘밀리초’ 계산을 해주지 않아서 인증 오류가 발생했습니다.
String(Int(Date().timeIntervalSince1970)) //오류
String(Int(Date().timeIntervalSince1970 * 1000))
  1. 메시지를 생성하지 않고 시크릿 키로만 서명을 생성해서 인증 오류가 발생했습니다.

Live Station API를 사용해서 영상 수신

  • 참고문서: Live Station API
  • 개요: PoC를 위해 Live Station API를 사용해 송출중인 방송을 불러오는 작업을 수행했습니다.
  1. 파라미터만 변경하고, 나머지는 동일하게 요청을 보냅니다.
  2. 받아온 url을 AVKit을 사용해서 플레이합니다.
let playerController = AVPlayerViewController()
let player = AVPlayer(url: fileURL)
        
playerController.player = player
        
self.present(playerController, animated: true) {
      player.play()
}

Clone this wiki locally