동영상

시청자수 집계

라이브 방송처럼 시청자수가 서비스의 핵심지표라면, 동시접속자를 시청자수와 같은 의미로 사용하는 것은 다소 문제의 소지가 있다.

Note

만일 RTSP같은 스트리밍 프로토콜을 사용한다면 같은 의미로 볼 수 있다. 하지만 HLS등 HTTP기반 프로토콜이 폭넓은 호환성을 바탕으로 라이브 서비스에서도 널리 적용되고 있다. 문제는 HTTP가 파일기반으로 설계되었고, 심지어 무상태(Stateless)로 동작하는 것에 기인한다.

1명의 시청자가 10초로 분할된 HLS 영상을 1분간 시청했다고 가정해 보자. 관점에 따라 시청자수는 전혀 다르게 계산될 수 있다.

  • 0.016 - 모든 TS파일을 다운로드 받는데 1초가 소요되어 “1초(트래픽 발생 시간) / 60초(시청시간)” 으로 계산한다.
  • 5 - 브라우저가 서버로 동시에 맺는 HTTP 세션 수는 5이다.
  • 6 - 다운로드된 TS파일의 개수는 6개이다.

모든 수치가 엉뚱하다. 이런 문제가 발생하는 근본적인 원인은 시청자수를 네트워크 관점만으로 계산했기 때문이다.

결론적으로 시청자수는 연결된 세션수나 다운로드 속도와 상관없이 전송된 시간의 총합으로 계산되어야 한다.

         전송된 재생시간의 
--------------------------------------
             단위 시간

예를 들어 축구경기 라이브 방송을 2시간 진행했다. 전송된 동영상 전체의 재생시간이 20만 시간이라면 평균 시청자수는 10만명이라고 볼 수 있다. 이는 매우 휴리스틱(Heuristic)한 접근이지만 꽤 효율적이다.

시청자수 집계 기능은 전송된 재생시간을 실시간으로 반영하여 시청자수를 제공한다.

# server.xml - <Server><VHostDefault><Media>
# vhosts.xml - <Vhosts><Vhost><Media>

<Viewer Status="Inactive">
   <Group Name="sports" Time="2">
      <Pattern>/baseball/*.ts</Pattern>
      <Pattern Time="1">/soccer/*.ts</Pattern>
      <Pattern>/baseketball/*.ts</Pattern>
   </Group>
   <Group Name="shopping" Time="5">
      <Pattern>/shop/beauty</Pattern>
   </Group>
</Viewer>
  • <Viewer> 시청자수 집계의 최상위 설정. 여러 <Group> 을 하위 설정으로 가진다.
    • Status (기본: Inactive) 시청자수 집계 활성화 ( Active 또는 Inactive )
  • <Group> 시청자수 제공 단위. 여러 <Pattern> 을 하나의 단위로 집계 할 수 있다.
    • Name 통계(시청자수)를 구분하는 고유한 이름
    • Time (기본: 2초, 범위: 1~60) 기본 재생시간. 값이 60을 넘을 경우 60으로 수렴한다.
  • <Pattern> 입력 패턴과 일치하는 URL요청이 200 OK 응답으로 완전히 전송(=HTTP 트랜잭션 완료)되었을 때 재생시간을 집계한다. Time 속성을 설정하면 상위 설정인 <Group>Time 속성을 사용하지 않는다.

Note

<Pattern> 의 값은 성능상의 이유로 정규표현식을 지원하지 않는다. 와일드카드(*)만 지원된다.

Warning

스펙이 확정되는 시점에 API, SNMP 통계형태를 결정한다.