KR20160021141A - 적응적 비트레이트 스트리밍을 위해 적응적 양자화를 갖고 다수의 비디오 스트림들을 인코딩하는 시스템들 및 방법들 - Google Patents

적응적 비트레이트 스트리밍을 위해 적응적 양자화를 갖고 다수의 비디오 스트림들을 인코딩하는 시스템들 및 방법들 Download PDF

Info

Publication number
KR20160021141A
KR20160021141A KR1020157036373A KR20157036373A KR20160021141A KR 20160021141 A KR20160021141 A KR 20160021141A KR 1020157036373 A KR1020157036373 A KR 1020157036373A KR 20157036373 A KR20157036373 A KR 20157036373A KR 20160021141 A KR20160021141 A KR 20160021141A
Authority
KR
South Korea
Prior art keywords
encoding
video
blocks
size
ctu
Prior art date
Application number
KR1020157036373A
Other languages
English (en)
Other versions
KR101823321B1 (ko
Inventor
샘 오튼-제이
블라디미로비치 이반 날레토프
Original Assignee
쏘닉 아이피, 아이엔씨.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US13/931,449 external-priority patent/US9350990B2/en
Application filed by 쏘닉 아이피, 아이엔씨. filed Critical 쏘닉 아이피, 아이엔씨.
Publication of KR20160021141A publication Critical patent/KR20160021141A/ko
Application granted granted Critical
Publication of KR101823321B1 publication Critical patent/KR101823321B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/124Quantisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • H04N19/14Coding unit complexity, e.g. amount of activity or edge presence estimation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/189Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
    • H04N19/192Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding the adaptation method, adaptation tool or adaptation type being iterative or recursive
    • H04N19/194Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding the adaptation method, adaptation tool or adaptation type being iterative or recursive involving only two passes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/236Assembling of a multiplex stream, e.g. transport stream, by combining a video stream with other content or additional data, e.g. inserting a URL [Uniform Resource Locator] into a video stream, multiplexing software data into a video stream; Remultiplexing of multiplex streams; Insertion of stuffing bits into the multiplex stream, e.g. to obtain a constant bit-rate; Assembling of a packetised elementary stream

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

대안적 비디오 스트림들로서 소스 비디오를 인코딩하기 위한 방법은 수신된 멀티미디어 콘텐트를 통해 제 1 패스에서 소스 비디오 데이터에 대한 통계들을 수집하며 통계들을 공유 메모리로 기록하는 단계로서, 상기 통계들은 픽셀들의 블록들의 복잡도 측정치들을 포함하는, 상기 소스 비디오 데이터에 대한 통계들을 수집 및 기록하는 단계, 상기 제 1 패스 동안 소스 비디오 데이터에 대한 초기 인코딩 정보를 결정하며 초기 인코딩 정보를 공유 메모리에 기록하는 단계, 제 2 패스 동안 대안적인 비디오 스트림들을 생성하기 위해 수집된 통계들 및 초기 인코딩 정보를 사용하여 병렬로 상기 소스 비디오 데이터를 인코딩하는 단계를 포함하며, 병렬 인코딩 프로세스들은 비디오의 일부에 대해 이미 결정된 부가적인 인코딩 정보를 재사용하며 비디오의 일부에 대해 이미 결정되지 않은 부가적인 인코딩 정보를 생성하고, 상기 부가적인 인코딩 정보는 픽셀들의 블록들에 대한 양자화 파라미터들을 포함한다.

Description

적응적 비트레이트 스트리밍을 위해 적응적 양자화를 갖고 다수의 비디오 스트림들을 인코딩하는 시스템들 및 방법들{SYSTEMS AND METHODS OF ENCODING MULTIPLE VIDEO STREAMS WITH ADAPTIVE QUANTIZATION FOR ADAPTIVE BITRATE STREAMING}
본 발명은 일반적으로 비디오 인코딩에 관한 것이며 보다 구체적으로 소스 비디오 스트림으로부터 적응적 비트레이트 스트리밍을 위해 비디오 콘텐트의 다수의 스트림들을 효율적으로 인코딩하기 위한 시스템들 및 방법들에 관한 것이다.
용어, 스트리밍 미디어는 재생 디바이스 상에서 미디어의 재생을 설명하며, 여기에서 상기 미디어는 서버상에 저장되며 재생 동안 네트워크를 통해 재생 디바이스로 계속해서 전송된다. 통상적으로, 재생 디바이스는 재생 디바이스가 미디어의 다음 부분의 수신 이전에 버퍼링된 미디어 모두의 재생을 완료하는 단계으로 인해 재생의 중단을 방지하기 위해 재생 동안 임의의 주어진 시간에 버퍼에서 충분한 양의 미디어를 저장한다. 적응적 비트레이트 스트리밍, 또는 적응적 스트리밍은 실시간으로 현재 스트리밍 상태들(예로서, 사용자의 네트워크 대역폭 및 CPU 용량)을 검출하는 단계 및 그에 따라 스트리밍된 미디어의 품질을 조정하는 단계를 수반한다. 통상적으로, 소스 미디어는 다수의 비트 레이트들에서 인코딩되며 재생 디바이스 또는 클라이언트는 이용 가능한 리소스들에 의존하여 상이한 인코딩들을 스트리밍하는 것 사이에서 스위칭한다. 재생 디바이스가 적응적 비트레이트 스트리밍을 시작할 때, 재생 디바이스는 통상적으로 최저 비트레이트 스트림들(대안 스트림들이 이용 가능한)로부터 미디어의 부분들을 요청함으로써 시작된다. 재생 디바이스가 요청된 미디어를 다운로딩함에 따라, 재생 디바이스는 이용 가능한 대역폭을 측정할 수 있다. 이용 가능한 부가적인 대역폭이 있는 경우에, 재생 디바이스는 보다 높은 비트레이트 스트림들로 스위칭할 수 있다.
적응적 스트리밍 시스템들에서, 소스 미디어는 통상적으로 실제 비디오 및 오디오 데이터를 포함하는 복수의 대안 스트림들을 나타내는 최상위 레벨 인덱스 파일로서 미디어 서버상에 저장된다. 각각의 스트림은 통상적으로 하나 이상의 컨테이너 파일들에 저장된다. 상이한 적응적 스트리밍 해법들은 통상적으로 상이한 인덱스 및 미디어 컨테이너들을 이용한다. 마트로시카(Matroska) 컨테이너는 프랑스, 오쏜느(Aussonne)의 마트로시카 비-영리 기관에 의한 개방 표준 프로젝트로서 개발된 미디어 컨테이너이다. 마트로시카 컨테이너는 확장가능한 마크업 언어(XML)의 이진 도함수인, 확장가능한 이진 메타 언어(Extensible Binary Meta Language; EBML)에 기초한다. 마트로시카 컨테이너의 디코딩은 많은 소비자 전자(CE) 디바이스들에 의해 지원된다. 캘리포니아, 샌디에이고의 DivX, LLC에 의해 개발된 DivX Plus 파일 포맷은 마트로시카 포맷 내에 특정되지 않은 요소들을 포함하여, 마트로시카 컨테이너 포맷의 확장을 이용한다. 다른 일반적으로 사용된 미디어 컨테이너 포맷들은 MPEG-4 파트 14(즉, ISO/IEC 14496-14)에 특정된 MP4 컨테이너 포맷 및 MPEG-2 파트 1(즉, ISO/IEC 표준 13818-1)에 특정된 MPEG 수송 스트림(TS) 컨테이너이다. MP4 컨테이너 포맷은 IIS Smooth 스트리밍 및 플래시 다이나믹 스트리밍에서 이용된다. TS 컨테이너는 HTTP 적응적 비트레이트 스트리밍에서 사용된다. 대안 스트림들에서 비디오는 ISO/IEC 동화상 전문가 그룹(MPEG) 및 스위스, 제네바의 국제 전기통신 연합 전기통신 표준화 부문(ITU-T) 의해 공동으로 특정된 고 효율 비디오 코딩(HEVC/H.265) 및 ITU-T에 의해 특정된 H.264/MPEG-4 AVC(개선된 비디오 코딩) 표준과 같은 다양한 블록-지향 비디오 압축 표준들(또는 코덱들)에 따라 인코딩될 수 있다.
본 발명은 소스 비디오 스트림으로부터 적응적 비트레이트 스트리밍을 위해 비디오 콘텐트의 다수의 스트림들을 효율적으로 인코딩하기 위한 시스템들 및 방법들에 관한 것이다.
본 발명의 실시예들에 따라 적응적 비트레이트 스트리밍을 위해 다수의 비디오 스트림들을 인코딩하기 위한 시스템들 및 방법들이 개시된다. 하나의 실시예에서, 복수의 대안적인 비디오 스트림들로서 소스 비디오를 인코딩하도록 구성된 소스 인코더는 소스 인코더 애플리케이션, 공유 메모리, 및 병렬 프로세싱 시스템을 포함하며, 상기 병렬 프로세싱 시스템은 소스 인코딩 애플리케이션에 의해 멀티미디어 콘텐트를 수신하는 것으로서, 상기 멀티미디어 콘텐트는 1차 분해능을 가진 소스 비디오 데이터를 포함하는, 상기 멀티미디어 콘텐트를 수신하고, 상기 수신된 멀티미디어 콘텐트를 통한 제 1 패스에서 소스 비디오 데이터에 대한 통계들을 수집하며 상기 통계들을 공유 메모리에 기록하는 것으로서, 상기 통계들은 픽셀들의 블록들의 복잡도 측정치들을 포함하는, 상기 소스 비디오 데이터에 대한 통계들을 수집 및 기록하고, 상기 수신된 멀티미디어 콘텐트를 통한 상기 제 1 패스 동안 소스 비디오 데이터에 대한 초기 인코딩 정보를 결정하며 상기 초기 인코딩 정보를 공유 메모리에 기록하고, 복수의 병렬 인코딩 프로세스들을 갖고 상기 수신된 멀티미디어 콘텐트를 통해 제 2 패스 동안 복수의 대안적인 비디오 스트림들을 생성하기 위해 수집된 통계들 및 초기 인코딩 정보를 사용하여 상기 소스 비디오 데이터를 병렬로 인코딩하는 것으로서, 상기 소스 비디오의 인코딩은 부가적인 인코딩 정보를 이용하고 상기 병렬 인코딩 프로세스들은 또 다른 병렬 인코딩 프로세스에 의해 비디오의 일부에 대해 이미 결정되었고 상기 공유 메모리에 저장된 부가적인 인코딩 정보를 재사용하도록 구성되며, 상기 병렬 인코딩 프로세스들은 또 다른 병렬 인코딩 프로세스에 의해 비디오의 일부에 대해 이미 결정되지 않았으며 상기 공유 메모리에 상기 생성된 부가적인 인코딩 정보를 저장하도록 구성되고, 상기 부가적인 인코딩 정보는 픽셀들의 블록들에 대한 양자화 파라미터들을 포함하는, 상기 소스 비디오 데이터를 병렬로 인코딩하도록 구성된다.
추가 실시에에서, 소스 비디오 데이터에 대한 통계들은 평균 양자화 파라미터, 헤더 비트들의 크기, 텍스처 비트들의 크기, 인트라 블록들의 수, 인터 블록들의 수, 및 스킵 블록들의 수의 그룹으로부터 선택된 통계들를 포함한다.
또 다른 실시예에서, 소스 비디오 데이터에 대한 초기 인코딩 정보를 결정하도록 구성되는 상기 병렬 프로세싱 시스템은 또한 프레임 복잡도 측정값을 산출하도록 구성된 병렬 프로세싱 시스템을 포함한다.
추가 실시예에서, 또 다른 병렬 인코딩 프로세스에 의해 비디오의 일부에 대해 이미 결정되지 않은 부가적인 인코딩 정보를 생성하도록 구성되는 상기 병렬 인코딩 프로세스들은 소스 비디오 데이터에서 비디오의 프레임의 일부를 인코딩하기 위한 코딩 트리 유닛(Coding Tree Unit; CTU) 크기를 결정하는 단계를 포함한다.
또 다른 실시예에서, 소스 비디오 데이터에서 비디오의 프레임의 일부를 인코딩하기 위한 CTU 크기를 결정하는 단계는 제 1 출력 스트림에서 적어도 하나의 출력 CTU로서 인코딩하기 위해 비디오의 프레임의 일부를 선택하는 단계, 크기가 유사한 CTU에 대해 결정되었는지를 확인하는 단계, 크기가 상기 유사한 CTU에 대해 결정되지 않았다면 CTU 크기를 선택하는 단계, 제 2 출력 스트림에 대해 결정된 이전 결정된 CTU 크기를 선택하며 크기가 유사한 CTU에 대해 결정되었다면 제 2 출력 스트림의 분해능과 상기 제 1 출력 스트림의 분해능을 비교하는 단계, 제 1 출력 스트림의 분해능이 제 2 출력 스트림과 동일한 분해능이 아니라면 CTU 크기를 스케일링하는 단계, 상기 선택된 CTU 크기가 상기 출력 CTU에 대해 수용 가능한지를 결정하는 단계, 상기 선택된 CTU 크기가 수용 가능하지 않을 때 보다 작은 CTU 크기를 선택하는 단계, 및 상기 선택된 CTU 크기가 상기 출력 CTU에 대해 수용 가능하다면 비디오의 프레임의 부분에 상기 선택된 CTU 크기를 적용하는 단계를 포함한다.
추가 실시예에서, 소스 비디오 데이터에 대한 초기 인코딩 정보를 결정하도록 구성되는 병렬 프로세싱 시스템은 또한 상기 복수의 대안적인 비디오 스트림들 중 적어도 하나에서 비디오의 적어도 하나의 프레임에 대한 모드 분포를 결정하도록 구성된 상기 병렬 프로세싱 시스템을 포함한다.
또 다른 실시예에서, 복수의 대안적인 비디오 스트림들을 생성하기 위해 수집된 통계들 및 초기 인코딩 정보를 사용하여 상기 소스 비디오 데이터를 병렬로 인코딩하도록 구성되는 상기 병렬 프로세싱 시스템은 또한 대안적인 비디오 스트림에서 비디오의 프레임에서 프로세싱된 블록들의 카운트를 유지하고, 상기 모드 분포에 기초하여 블록들의 임계 수를 결정하며, 블록들의 카운트가 블록들의 임계 수를 충족시킨다면 블록 유형 결정들에 대한 기준들을 조정하도록 구성되는 상기 병렬 프로세싱 시스템을 포함한다.
다시 추가 실시예에서, 또 다른 인코딩 프로세스에 의해 비디오의 일부에 대해 이미 결정되었으며 상기 공유 메모리에 저장된 부가적인 인코딩 정보를 재사용하도록 구성되는 상기 병렬 인코딩 프로세스들은 또한 제 1 대안 스트림에서의 비디오 프레임에서 제 1 블록을 인코딩할 때 모션 벡터가 제 2 대안 스트림에서의 제 2 대응 블록에 대해 존재하는지의 여부를 결정하고, 상기 제 1 대안 스트림 및 상기 제 2 대안 스트림이 동일한 분해능인지를 결정하고, 상기 제 1 대안 스트림 및 상기 제 2 대안 스트림이 동일한 분해능이 아니라면 상기 모션 벡터를 스케일링하고, 상기 모션 벡터를 정제하며, 상기 제 1 대안 스트림에서이 상기 비디오 프레임에서 상기 제 1 블록을 인코딩할 때 상기 모션 벡터를 적용하도록 구성되는 상기 병렬 인코딩 프로세스들을 포함한다.
다시 또 다른 실시예에서, 초기 인코딩 정보는 또한 헤더 크기, 매크로블록 크기, 및 헤더 크기 대 매크로 크기의 상대 비율을 포함한다.
추가의 부가적인 실시예에서, 초기 인코딩 정보는 또한 가상 기준 디코더 데이터를 포함한다.
또 다른 부가적인 실시예에서, 병렬 인코딩 프로세스들의 각각은 상이한 분해능에서 인코딩한다.
추가 실시예에서, 상기 병렬 인코딩 프로세스들의 각각은 하나 이상의 대안적인 비디오 스트림들을 인코딩하며 병렬 인코딩 프로세스에 의해 인코딩된 대안적인 비디오 스트림들의 각각은 상이한 비트레이트이다.
또 다른 실시예에서, 병렬 인코딩 프로세스들의 각각은 소스 비디오 데이터로부터 복수의 대안적인 비디오 스트림들의 서브세트에서의 각각의 스트림으로 순차적으로 차례로 인코딩한다.
다시 추가 실시예에서, 부가적인 인코딩 정보는 레이트 왜곡 정보 및 양자화 파라미터들을 포함한다.
다시 또 다른 실시예는 멀티미디어 콘텐트를 수신하는 단계로서, 상기 멀티미디어 콘텐트는 소스 인코더를 사용하여 1차 분해능을 가진 소스 비디오 데이터를 포함하는, 상기 멀티미디어 콘텐트를 수신하는 단계, 소스 인코더를 사용하여 상기 수신된 멀티미디어 콘텐트를 통한 제 1 패스에서 소스 비디오 데이터에 대한 통계들을 수집하며 상기 통계들을 공유 메모리에 기록하는 단계, 소스 인코더를 사용하여 상기 수신된 멀티미디어 콘텐트를 통해 상기 제 1 패스 동안 소스 비디오 데이터에 대한 초기 인코딩 정보를 결정하며 상기 초기 인코딩 정보를 공유 메모리에 기록하는 단계로서, 상기 통계들은 픽셀들의 블록들의 복잡도 측정치들을 포함하는, 상기 초기 인코딩 정보를 결정 및 기록하는 단계, 소스 인코더를 사용하여 복수의 병렬 인코딩 프로세스들을 갖고 상기 수신된 멀티미디어 콘텐트를 통한 제 2 패스 동안 복수의 대안적인 비디오 스트림들을 생성하기 위해 수집된 통계들, 초기 인코딩 정보, 및 부가적인 인코딩 정보를 사용하여 상기 소스 비디오 데이터를 병렬로 인코딩하는 단계으로서, 상기 소스 비디오의 인코딩은 또한 또 다른 병렬 인코딩 프로세스에 의해 비디오의 일부에 대해 이미 결정되었으며 복수의 병렬 인코딩 프로세스들 중 적어도 하나를 사용하여 상기 공유 메모리에 저장된 부가적인 인코딩 정보를 재사용하는 단계, 및 복수의 병렬 인코딩 프로세스들의 또 다른 것에 의해 비디오의 일부에 대해 이미 결정되지 않은 부가적인 인코딩 정보를 생성하는 단계를 포함하는, 상기 소스 비디오 데이터를 병렬로 인코딩하는 단계, 및 병렬 인코더 프로세스를 사용하여 상기 공유 메모리에 상기 생성된 부가적인 인코딩 정보를 저장하는 단계으로서, 상기 부가적인 인코딩 정보는 픽셀들의 블록들에 대한 양자화 파라미터들을 포함하는, 상기 생성된 부가적인 인코딩 정보를 저장하는 단계를 포함한다.
추가 부가적인 실시예에서, 소스 비디오 데이터에 대한 통계들은: 평균 양자화 파라미터, 헤더 비트들의 크기, 텍스처 비트들의 크기, 인트라 블록들의 수, 인터 블록들의 수, 및 스킵 블록들의 수로 이루어진 그룹으로부터 선택된 통계들을 포함한다.
또 다른 부가적인 실시예에서, 소스 비디오 데이터에 대한 초기 인코딩 정보를 결정하는 단계는 또한 프레임 복잡도 측정치를 산출하는 단계를 포함한다.
다시 추가 실시예에서, 또 다른 병렬 인코딩 프로세스에 의해 비디오의 일부에 대해 이미 결정되지 않은 부가적인 인코딩 정보를 생성하는 단계는 또한 소스 비디오 데이터에서 비디오의 프레임의 일부를 인코딩하기 위한 코딩 트리 유닛(CTU) 크기를 결정하는 단계를 포함한다.
다시 또 다른 실시예에서, 소스 비디오 데이터에서 비디오의 프레임의 일부를 인코딩하기 위한 CTU 크기를 결정하는 단계는 또한 제 1 출력 스트림에서 적어도 하나의 출력 CTU로서 인코딩하기 위해 비디오의 프레임의 일부를 선택하는 단계, 크기가 유사한 CTU에 대해 결정되었는지를 확인하는 단계, 크기가 상기 유사한 CTU에 대해 결정되지 않았다면 CTU 크기를 선택하고 제 2 출력 스트림에 대해 결정된 이전 결정된 CTU 크기를 선택하는 단계 및 크기가 유사한 CTU에 대해 결정되었다면 상기 제 2 출력 스트림의 분해능과 상기 제 1 출력 스트림의 분해능을 비교하는 단계, 상기 제 1 출력 스트림의 분해능이 제 2 출력 스트림과 동일한 분해능이 아니라면 상기 CTU 크기를 스케일링하는 단계, 상기 선택된 CTU 크기가 상기 출력 CTU에 대해 수용 가능한지를 결정하는 단계, 상기 선택된 CTU 크기가 수용 가능하지 않다면 보다 작은 CTU 크기를 선택하는 단계, 및 상기 선택된 CTU 크기가 상기 출력 CTU에 대해 수용 가능하다면 비디오의 프레임의 부분에 상기 선택된 CTU 크기를 적용하는 단계를 포함한다.
추가의 부가적인 실시예에서, 소스 비디오 데이터에 대한 초기 인코딩 정보를 결정하는 단계는 또한 복수의 대안적인 비디오 스트림들 중 적어도 하나에서 비디오의 적어도 하나의 프레임에 대한 모드 분포를 결정하는 단계를 포함한다.
또 다른 부가적인 실시예에서, 복수의 대안적인 비디오 스트림들을 생성하기 위해 수집된 통계들, 초기 인코딩 정보, 및 부가적인 인코딩 정보를 사용하여 상기 소스 비디오 데이터를 병렬로 인코딩하는 단계는 또한 대안적인 비디오 스트림에서 비디오의 프레임에서 프로세싱된 블록들의 카운트를 유지하는 단계, 상기 모드 분포에 기초하여 블록들의 임계 수를 결정하는 단계, 및 블록들의 카운트가 상기 블록들의 임계 수를 충족시킨다면 블록 유형 결정들에 대한 기준들을 조정하는 단계를 포함한다.
다시 추가의 부가적인 실시예에서, 또 다른 병렬 인코딩 프로세스에 의해 비디오의 일부에 대해 이미 결정되었으며 상기 공유 메모리에 저장된 부가적인 인코딩 정보를 재사용하는 단계는 또한 제 1 대안 스트림에서의 비디오 프레임에서 제 1 블록을 인코딩할 때 모션 벡터가 제 2 대안 스트림에서의 제 2 대응 블록에 대해 존재하는지의 여부를 결정하는 단계, 상기 제 1 대안 스트림 및 상기 제 2 대안 스트림이 동일한 분해능인지를 결정하는 단계, 상기 제 1 대안 스트림 및 상기 제 2 대안 스트림이 동일한 분해능이 아니라면 상기 모션 벡터를 스케일링하는 단계, 상기 모션 벡터를 정제하는 단계, 및 상기 제 1 대안 스트림에서의 상기 비디오 프레임에서 상기 제 1 블록을 인코딩할 때 상기 모션 벡터를 적용하는 단계를 포함한다.
다시 또 다른 부가적인 실시예에서, 초기 인코딩 정보는 또한 헤더 크기, 매크로블록 크기, 및 헤더 크기 대 매크로블록 크기의 상대 비율을 포함한다.
다시 추가 실시예에서, 초기 인코딩 정보는 또한 가상 기준 디코더 데이터를 포함한다.
다시 추가 실시예에서, 상기 병렬 인코딩 프로세스들의 각각은 상이한 분해능에서 인코딩한다.
추가 부가적인 실시예에서, 병렬 인코딩 프로세스들의 각각은 하나 이상의 대안적인 비디오 스트림들을 인코딩하며 병렬 인코딩 프로세스에 의해 인코딩된 대안적인 비디오 스트림들의 각각은 상이한 비트레이트이다.
또 다른 부가적인 실시예에서, 상기 병렬 인코딩 프로세스들의 각각은 상기 소스 비디오 데이터로부터 상기 복수의 대안적인 비디오 스트림들의 서브세트에서의 각각의 스트림으로 순차적으로 차례로 블록을 인코딩한다.
다시 추가 부가적인 실시예에서, 부가적인 인코딩 정보는 레이트 왜곡 정보 및 양자화 파라미터들을 포함한다.
다시 추가 부가적인 실시예에서, 픽셀들의 블록들은 코딩 트리 유닛들이다.
다시 또 다른 부가적인 실시예에서, 픽셀들의 블록들은 코딩 유닛들이다.
또 다른 추가 실시예에서, 픽셀들의 블록들은 변환 유닛들이다.
또 다른 추가 실시예에서, 픽셀들의 블록들에 대한 양자화 파라미터들은 픽셀들의 블록들에 대한 복잡도 측정치들을 사용하여 생성된다.
또 다른 추가 실시예에서, 픽셀들의 블록들에 대한 양자화 파라미터들은 이전 생성된 양자화 파라미터들을 사용하여 생성된다.
다시 또 다른 부가적인 실시예에서, 픽셀들의 블록들에 대한 양자화 파라미터들은 왜곡 레이트 및 비트 레이트를 사용하여 생성된다.
도 1은 본 발명의 실시예들에 따른 적응적 스트리밍 시스템의 시스템도.
도 2는 본 발명의 실시예들에 따라 적응적 스트리밍 시스템들에서의 사용을 위해 비디오 데이터의 스트림들을 인코딩하도록 구성된 미디어 서버를 개념적으로 도시한 도면.
도 3은 본 발명의 실시예들에 따라 비디오의 스트림들을 인코딩할 때 블록 크기 정보를 재사용하기 위한 프로세스를 도시하는 흐름도.
도 4는 본 발명의 실시예들에 따라 비디오의 스트림들을 인코딩할 때 블록 유형 결정들을 조정하기 위한 프로세스를 도시하는 흐름도.
도 5는 본 발명의 실시예들에 따라 비디오의 스트림들을 인코딩할 때 모션 벡터들을 재사용하기 위한 프로세스를 도시하는 흐름도.
도 6은 본 발명의 실시예들에 따라 비디오 데이터의 대안 스트림들의 인코딩 에서 통계들 및 인코딩 정보를 공유하기 위한 프로세스를 도시하는 흐름도.
도 7은 본 발명의 실시예들에 따른 픽셀들의 블록에 대한 복잡도 측정치를 생성하기 위한 프로세스를 도시하는 흐름도.
도 8은 본 발명의 실시예들에 따른 픽셀들의 블록에 대한 양자화 파라미터를 생성하기 위한 프로세스를 도시하는 흐름도.
도 9는 본 발명의 실시예들에 따른 픽셀들의 유사한 블록에 대한 양자화 파라미터를 사용하여 픽셀들의 블록에 대한 양자화 파라미터를 생성하기 위한 프로세스를 도시하는 흐름도.
도 10a는 CTU 블록들의 복잡도 측정치들의 플롯을 도시하는 그래프.
도 10b는 CTU 블록들의 복잡도 측정치들 및 양자화 파라미터들의 플롯을 도시하는 그래프.
이제 도면들로 가면, 본 발명의 실시예들에 따른 적응적 비트레이트 스트리밍을 위한 다수의 비디오 스트림들을 인코딩하기 위한 시스템들 및 방법들이 도시된다. 본 발명의 실시예들에 따르면, 인코더들은 콘텐트에 대한 통계들에 대한 미디어 콘텐트를 분석하고, 상기 콘텐트를 인코딩하기 위해 사용된 인코딩 정보를 결정하며, 상이한 분해능들 및 비트레이트들에서 다수의 비디오 스트림들로서 상기 콘텐트를 인코딩할 수 있다. 본 발명이 HEVC/H.265 및 H.265 AVC와 같은 적응적 스트리밍 시스템들 및 블록-기반 비디오 인코딩 기술들에 대하여 이하에 설명되지만, 설명된 시스템들 및 방법들은 비디오 데이터의 상이한 스트림들이 블록-기반이 아닌 비디오 인코딩 기술들 및 네트워크 클라이언트의 연결 품질에 기초하여 선택되는 종래의 스트리밍 시스템들에서 동일하게 적용 가능하다.
적응적 스트리밍 시스템들에서, 멀티미디어 콘텐트는 비디오 데이터의 대안 스트림들의 세트로서 인코딩된다. 비디오 데이터의 각각의 대안 스트림이 동일한 소스 멀티미디어 콘텐트를 사용하여 인코딩되기 때문에, 유사한 인코딩 정보는 비디오 데이터의 각각의 대안 스트림의 인코딩에서 결정된다. 인코딩 정보는 이에 제한되지 않지만, 프레임 복잡도 측정치, 블록 크기들의 선택, 블록 모드 분포 및 모션 추정 결과들을 포함할 수 있다. 본 발명의 많은 실시예들에 따른 시스템들 및 방법들은 비디오 데이터의 적어도 하나의 다른 대안 스트림의 인코딩에서 비디오 데이터의 하나의 대안 스트림의 인코딩에서 결정된 인코딩 정보를 재사용한다. 비디오 데이터의 여러 개의 대안 스트림들의 인코딩에서 인코딩 정보를 재사용함으로써, 비디오 데이터의 대안 스트림들의 인코딩에서의 상당한 개선들이 달성될 수 있으며 특히 상당한 시간 절감들이 본 발명의 실시예들에 따라 실현될 수 있다.
적응적 스트리밍 시스템들은 인터넷과 같은, 네트워크를 통해 상이한 최대 비트레이트들 및 분해능들에서 인코딩된 멀티미디어 콘텐트를 스트리밍하도록 구성된다. 적응적 스트리밍 시스템들은 현재 스트리밍 상태들에 기초하여 지원될 수 있는, 최고 품질 멀티미디어 콘텐트를 스트리밍한다. 멀티미디어 콘텐트는 통상적으로 비디오 및 오디오 데이터, 자막들, 및 다른 관련 메타데이터를 포함한다. 네크워크 데이터 레이트에 독립적인 최고 품질 비디오 경험을 제공하기 위해, 적응적 스트리밍 시스템들은 이에 제한되지 않지만, 이용 가능한 네트워크 데이터 레이트 및 비디오 디코더 성능을 포함하여, 다양한 인자들에 따라 비디오 데이터의 전달 전체에 걸쳐 비디오 데이터의 이용 가능한 소스들 사이에서 스위칭하도록 구성된다. 스트리밍 상태들이 악화될 때, 적응적 스트리밍 시스템은 통상적으로 보다 낮은 최대 비트레이트들에서 인코딩된 멀티미디어 스트림들로 스위칭하려고 시도한다. 이용 가능한 네트워크 데이터 레이트가 최저 최대 비트레이트에서 인코딩된 스트림의 스트리밍을 지원할 수 없는 경우에, 그 후 재생은 종종 충분한 양의 콘텐트가 재생을 재시작하기 위해 버퍼링될 수 있을 때까지 중단된다. 본 발명의 실시예들에 따른 적응적 스트리밍 시스템에서 이용될 수 있는 재생 동안 비디오 스트림들 사이에서 스위칭하기 위한 시스템들 및 방법들이 2011년 8월 30일에 출원된, Braness 외의 "하이퍼텍스트 전송 프로토콜을 사용하여 마트로시카 컨테이너 파일들에 저장된 미디어의 적응적 비트레이트 스트리밍을 위한 시스템들 및 방법들"이라는 제목의, 미국 특허 출원 일련 번호 제13/221,682호에 설명되며, 그 전체는 참조로서 통합된다.
적응적 스트리밍 시스템들에서 이용된 비디오 데이터의 다수의 소스들을 생성하기 위해, 소스 인코더는 멀티미디어 콘텐트의 조각에 포함된 소스 비디오로부터 비디오 데이터의 복수의 대안 스트림들을 인코딩하도록 구성될 수 있다. 적응적 스트리밍 시스템들에서의 사용을 위해 소스 비디오를 인코딩하기 위한 시스템들 및 방법이 2011년 8월 30일에 출원된, Braness 외의 "하이퍼텍스트 전송 프로토콜을 사용하여 적응적 비트레이트 스트리밍을 위해 마트로시카 컨테이너 파일들에 소스 미디어를 인코딩하기 위한 시스템들 및 방법들"이라는 제목의, 미국 특허 출원 번호 제13/221,794호에 개시되며, 그 전체는 참조로서 통합된다. 본 발명의 실시예들에 따르면, 소스 인코더는 미디어 소스 및/또는 미디어 서버를 사용하여 구현될 수 있다.
상기 서술된 바와 같이, 동일한 소스 비디오에 기초한 비디오 데이터의 대안 스트림들은 유사한 콘텐트를 포함하고, 그러므로 소스 콘텐트로부터 결정된 통계들 및 비디오 데이터의 하나의 대안 스트림에 대해 결정된 인코딩 정보는 비디오 데이터의 다른 대안 스트림들 중 하나 이상의 인코딩에서 사용될 수 있다. 본 발명의 실시예들에 따르면, 동일한 소스 비디오에 기초한 비디오 데이터의 대안 스트림들의 세트는 동일한 분해능이지만 상이한 비트레이트들에서 비디오 데이터를 포함할 수 있다. 본 발명의 많은 실시예들에서, 비디오 데이터의 특정한 대안 스트림의 인코딩을 위해 산출된 모션 추정 결과들은 비디오 데이터의 다른 대안 스트림들 중에서 재사용될 수 있다. 이하에서 논의되는 바와 같이, 비디오 데이터의 대안 스트림들의 인코딩에서 결정된 다양한 통계들 및 인코딩 정보는 비디오 데이터의 대안 스트림들 중에서 재사용될 수 있다. 본 발명의 실시예들에 따라 비디오 데이터의 대안 스트림들을 인코딩할 때 통계들 및 인코딩 정보를 공유하기 위한 시스템들 및 방법들이 이하에서 추가로 논의된다.
적응적 스트리밍 시스템 아키텍처
본 발명의 실시예들에 따른 적응적 스트리밍 시스템들은 사용자 디바이스들로 스트리밍하기 위해 이용 가능해질 비디오의 다수의 스트림들을 생성하도록 구성된다. 본 발명의 많은 실시예들에서, 적응적 스트리밍 시스템은 소스 미디어로부터 비디오의 다수의 스트림들의 인코딩을 수행하는 소스 인코딩 서버를 포함한다. 본 발명의 실시예들에 따른 적응적 스트리밍 시스템이 도 1에 도시된다. 도시된 적응적 스트리밍 시스템(10)은 복수의 대안 스트림들로서 소스 미디어를 인코딩하도록 구성된 소스 인코딩 서버(12)를 포함한다. 소스 미디어는 인코딩 서버(12) 상에 저장될 수 있거나 미디어 서버(13)로부터 검색될 수 있다. 이하에서 추가로 논의되는 바와 같이, 소스 인코딩 서버(12)는 인코딩된 스트림들을 포함하는 컨테이너 파일들을 생성하며, 적어도 복수의 그것은 인코딩된 비디오의 대안 스트림들이다. 인코딩 서버는 각각의 출력 분해능에서 콘텐트에 대한 통계들을 수집하기 위해 제 1 패스를 및 다수의 출력 스트림들로 콘텐트를 인코딩하기 위해 제 2 패스를 만들며, 여기에서 스트림들은 다양한 분해능들 및 비트레이트들을 가질 수 있다. 몇몇 실시예들에서, 제 1 패스는 제 2 패스가 시작되기 전에 완료된다. 다른 실시예들에서, 제 2 패스는 제 1 패스가 완료되기 전에 시작될 수 있다. 다시 말해서, 프레임들이 제 2 패스 프로세스(들)에 의해 프로세싱되기 전에 제 1 패스 프로세스(들)에 의해 프로세싱되는 경우 제 1 및 제 2 패스들에 대한 계산 프로세스들이 동시에 실행될 수 있다. 이들 파일들은 HTTP 서버일 수 있는, 콘텐트 서버(14)로 업로딩된다. 다양한 재생 디바이스들(18, 20, 및 22)은 그 후 인터넷과 같은 네트워크(16)를 통해 콘텐트 서버(14)로부터 인코딩된 스트림들의 부분들을 요청할 수 있다.
미디어 콘텐트 스트림들을 전달하기 위한 특정 적응적 스트리밍 시스템이 도 1에 대하여 상기 논의되지만, 다양한 스트리밍 시스템들 중 임의의 것이 본 발명의 실시예들에 따라 미디어 콘텐트 스트림들을 전달하기 위해 이용될 수 있다.
소스 인코더들
도시된 실시예에서, 적응적 비트레이트 스트리밍 시스템은 상이한 분해능들 및/또는 비트레이트들을 가진 인코딩된 비디오의 대안 스트림들로 비디오 콘텐트의 소스 스트리밍을 인코딩할 수 있는 하나 이상의 소스 인코더들을 포함한다. 많은 실시예들에서, 소스 인코더는 멀티미디어의 스트림들을 인코딩할 수 있는 임의의 디바이스를 사용하여 구현될 수 있으며, 여기에서 스트림들은 상이한 분해능들, 샘플링 레이트들, 및/또는 최대 비트레이트들에서 인코딩된다. 본 발명의 실시예에 따른 적응적 스트리밍 시스템 소스 인코더의 기본 아키텍처는 도 2에 도시된다. 소스 인코더(200)는 메모리(230) 및 네트워크 인터페이스(240)와 통신하는 프로세서(210)를 포함한다. 도시된 실시예에서, 휘발성 메모리(230)는 소스 인코딩 애플리케이션(250)을 포함한다. 프로세서는 소스 인코딩 애플리케이션(250)에 의해, 또한 휘발성 메모리에 있는, 소스 비디오 데이터(260)로부터 비디오 데이터의 복수의 스트림들을 인코딩하도록 구성된다. 소스 비디오 데이터(260)는 메모리에 이미 존재할 수 있거나 네트워크 인터페이스(240)를 통해 수신될 수 있다.
복수의 실시예들에서, 소스 인코더는 다수의 프로세서들을 포함하며 인코딩 프로세스는 다수의 프로세서들 중에서 분포될 수 있다. 많은 실시예들에서, 소스 인코딩 애플리케이션(250)은 각각의 프로세스가 하나 이상의 출력 스트림들을 인코딩하는 인코더 제어기(270)인 하나 이상의 프로세서들 상에서 실행하는 다수의 프로세스들을 론칭할 수 있다. 추가 실시예들에서, 각각의 인코더 제어기는 동일한 분해능에서 및 상이한 비트레이트들에서 다수의 출력 스트림들을 인코딩한다. 여러 개의 실시예들에서, 3개의 출력 분해능들의 각각에 대한 인코더 제어기는 하나 이상의 프로세서들 상에서 실행되도록 론칭되며, 여기에서 출력 분해능들은 768×432, 1280×720, 및 1920×1080이다. 몇몇 실시예들에서, 인코더 제어기(270)는 두 개의 상이한 비트레이트들에서 768×432 출력 스트림들을 인코딩하고, 인코더 제어기(280)는 3개의 상이한 비트레이트들에서 1280×720에서, 및 인코더 제어기(290)는 3개의 상이한 비트레이트들에서 1920×1080에서 인코딩한다. 인코더 제어기들(270, 280, 및 290)는 통상적으로 그것들이 실행할 때 메모리(230)에 존재한다. 본 발명의 많은 실시예들에 따르면, 인코더 제어기들(270, 280, 및 290)은 제어기들 사이에서 통계들, 인코딩 정보 및 다른 정보의 데이터 교환을 위해 메모리에 공유 데이터 버퍼들(295)을 가진다.
소스 인코더에 대한 특정 아키텍처가 도 2에 도시되지만, 비디오 인코더(250)가 디스크 또는 몇몇 다른 형태의 저장 장치상에 위치되며 런타임 시 메모리(230)로 로딩되는 아키텍처들을 포함하는 다양한 아키텍처들 중 임의의 것은 본 발명의 실시예들에 따른 멀티미디어 콘텐트를 인코딩하기 위해 이용될 수 있다. 본 발명의 실시예들에 따른 비디오 데이터의 대안 스트림들의 인코딩에서 통계들 및 인코딩 정보의 재사용을 위한 시스템들 및 방법들이 이하에서 추가로 논의된다.
통계 및 인코딩 정보를 수집 및 사용하는 단계
본 발명의 많은 실시예들에서, 통계들 및 인코딩 정보는 콘텐트를 다수의 출력 스트림들로 인코딩하기 전에 미디어 콘텐트의 조각에 대해 결정된다. 이하에서 추가로 보다 상세히 논의될 바와 같이, 통계들 및 인코딩 정보는 콘텐트를 어떻게 인코딩할지에 대한 의사 결정을 가속화하기 위해 인코딩 프로세스들 사이에서 저장 및 공유될 수 있다. 제 1 패스에서 수집하기 위한 통계들은 (이에 제한되지 않지만): 평균 양자화 파라미터, 헤더 비트들의 크기, 텍스처 비트들의 크기, 인트라 매크로블록들/CTU들의 수, 인터 매크로블록들/CTU들의 수, 스킵 매크로블록들/CTU들의 수를 포함할 수 있다. 인코딩 정보는 (이에 제한되지 않지만): 프레임 복잡도 측정치들, 코딩 트리 유닛(CTU) 구조, 모드 분포, 및 모션 정보를 포함할 수 있다. 본 발명의 실시예들에 따른 비디오의 대안 스트림들의 인코딩에서 인코딩 정보의 수집 및 사용이 이하에서 논의된다.
프레임 복잡도 측정치
소스 콘텐트를 인코딩하기 전에, 프레임 복잡도 측정치는 콘텐트의 각각의 프레임에 할당될 수 있다. 프레임 복잡도 측정치는 프레임에서 시각적 정보의 복잡도의 레벨, 및 그에 의해 상기 프레임(즉, 비트들에서)을 인코딩하는 단계으로부터 출력 콘텐트 스트림을 야기할 데이터의 표시를 나타낸다. 이 기술분야에 알려진 것들을 포함하는 알고리즘들은 프레임 복잡도 측정치를 산출하기 위해 본 발명의 실시예들에 따라 이용될 수 있다. 이러한 알고리즘들은 프레임에서의 픽셀들 또는 다수의 프레임들에서의 대응 픽셀들에 걸친 평균 값들로부터 컬러 및 밝기와 같은 값들의 편차, 및/또는 이전 프레임들에서의 것들과 프레임들에서의 픽셀들, 및/또는 픽셀들의 블록들 사이에서의 유사성들과 같은 인터(즉, 사이) 및 인트라(즉, 내) 프레임 측정들을 고려할 수 있다. 더욱이, 알고리즘들은 모션 추정을 행할 때 콘텐트를 인코딩하는데 사용된 것들과 유사한 측정치들을 산출할 수 있다.
이하에서 추가로 논의될 바와 같이, 프레임 복잡도 측정치는 입력 스트림으로부터 출력 스트림에서의 프레임으로 프레임을 인코딩할 파라미터들을 선택할 때 사용될 수 있다. 본 발명의 많은 실시예들에서, 프레임 복잡도 측정치는 콘텐트의 각각의 프레임에 할당되며 정수로서 표현되고, 여기에서 보다 큰 값은 프레임 내에서 보다 큰 복잡도를 표시한다. 본 발명의 추가 실시예들에서, 프레임 복잡도 측정치는 입력 스트림에서의 프레임에 할당되며 동일한 측정치는 복수의 대안 출력 스트림들에서의 대응 프레임들을 인코딩하기 위한 파라미터들을 선택하기 위해 사용된다.
이 기술분야에 알려진 것들을 포함하는 비트레이트 제어 알고리즘들은 얼마나 많은 비트들을 출력 스트림의 비디오 및 버퍼 레벨들의 각각의 인코딩된 프레임에 할당할지를 결정하기 위해 및 비디오의 각각의 프레임을 인코딩할 때 적용할 양자화 레벨들을 선택하기 위해 본 발명의 실시예들에 따라 이용될 수 있다. 본 발명의 실시예들에 따르면, 이들 알고리즘들은 입력 콘텐트 스트림에 대해 한 번 계산된 프레임 복잡도 측정치를 이용하며 상기 입력 스트림으로부터 인코딩된 다수의 출력 스트림들에 대한 양자화 레벨을 결정하기 위해 상기 측정치를 재사용할 수 있다.
블록 크기 결정들
블록-지향 인코딩 표준들에서, 픽셀들은 인코딩 프로세스에서 파티션들 또는 "블록들"로서 취해진다. 몇몇 현재 표준들에서, 블록 크기는 가변적이며 여기에서 프레임에서의 파티션들이 상이한 크기들을 가질 수 있다. HEVC 표준은 코딩 트리 유닛(CTU)의 블록 크기가 통상적으로 64×64, 32×32, 16×16, 또는 8×8 픽셀들인 CTU들로서 알려진 파티션들을 사용한다. 비디오의 프레임은 상이한 크기들 및 배열들의 CTU들의 혼합을 포함할 수 있다. 종종, 프레임에서 CTU들의 블록 크기들(또는 관련 비디오 압축 표준에 따라 픽셀들의 다른 "블록" 파티션들)은 인코딩된 프레임의 비트들에서의 결과적인 크기 및 효율성에 기초하여 선택된다. 본 발명의 실시예들에 따른 인코더는 그것이 또 다른 대안 출력 스트림에서 프레임들의 대응 부분들에 대해 이미 이루어진 유사한 결정들을 가질 때 출력 스트림에 대한 콘텐트의 프레임들을 인코딩할 때 사용하기 위해 블록 크기들에 대한 결정들을 가속화할 수 있다.
인코더는 통상적으로 프레임의 이미지 품질을 유지하면서 결과적인 인코딩된 출력 프레임의 크기(비트들에서)에 적어도 부분적으로 기초한 블록 크기들을 선택한다. 일반적으로, 보다 작은 크기의 출력 프레임들(즉, 보다 효율적인)이 요구되며 인코딩에서 보다 큰 블록 크기들을 사용하여 보다 높은 압축을 갖고 성취될 수 있다. 인코더는 프레임의 일부를 인코딩할 때 보다 큰 블록 크기들을 사용하려고 노력할 수 있으며, 결과적인 이미지의 품질 또는 정확도가 임계치를 충족하지 않는다면, 프레임의 상기 부분에 대해 점진적으로 보다 작은 블록 크기들을 시도한다. 예를 들면, 프레임의 32×32 픽셀 부분은 4개의 16×16 픽셀 CTU들로서 인코딩하기 위해 검사될 수 있다. 16×16 픽셀 CTU들 중 임의의 것이 바람직하지 않다면, 그것은 4개의 8×8 픽셀 CTU들로 추가로 분할될 수 있다. 다른 비디오 표준들에서, 특정한 표준에서 특정된 보다 큰 및 보다 작은 블록 크기들은 유사한 방식으로 검사될 수 있다.
본 발명의 실시예들에 따르면, 특정한 데이터는 동일한 입력 스트림으로부터 대안 출력 스트림들을 인코딩하는 인코더 제어기들 사이에서 보유되며 공유될 수 있다. 공유 데이터는 프레임들의 부분들에 대해 검사된 블록 크기들을 포함할 수 있다. 예를 들면, 인코더 제어기가 16×16 CTU들(또는 CTU 크기들의 임의의 다른 조합)로서 프레임의 32×32 픽셀 부분을 프로세싱하기 위해 선택된다면, 인코더 제어기 또는 또 다른 인코더 제어기가 동일한 분해능이지만 상이한 비트레이트에서 프레임의 동일한 부분을 인코딩할 때, 그것은 이전에 이루어진 결정(들)을 생략하며 동일한 크기 CTU들을 사용하고/하거나 다른 CTU 크기들을 검사할 수 있다. 보다 높은 비트레이트들에서, 보다 높은 비트레이트는 보다 많은 저장된 정보를 수용할 수 있으며 그러므로 보다 큰 블록 크기들에 기인한 보다 높은 압축이 요구되지 않기 때문에 보다 큰 블록 크기들을 검사하는 단계는 불필요할 수 있다. 그러므로, 인코더 제어기가 보다 높은 비트레이트에서 프레임의 동일한 부분을 인코딩할 때, 그것은 32×32 픽셀 CTU들을 갖고 인코딩하지 않기 위해 이전 검사/결정을 생략하며 간단히 16×16 CTU들을 사용할 수 있고/있거나 8×8 픽셀 CTU들이 타겟 비트레이트를 충족시키면서 동일하거나 보다 양호한 품질을 달성한다면 검사할 수 있다.
지난 CTU 크기 선택들은 또한 상이한 분해능의 스트림에서 CTU 크기들을 선택할 때 유용할 수 있다. 예를 들면, 32×32의 CTU 크기가 검사되었으며 16×16 이하의 파티션들을 위하여 분해능 1920×1080을 가진 스트림에서의 프레임의 일부에 대해 거절되었다고 가정하자. 분해능 3840×2160의 스트림에서의 프레임의 동일한 부분은 64×64의 크기를 커버할 것이다. 인코더는 32×32의 크기가 보다 낮은 분해능 스트림에서 거절되었기 때문에 보다 높은 분해능 프레임에서의 상기 부분에 대해 64×64의 CTU 크기를 확인하는 단계를 생략할 수 있다. 인코더는 32×32 이하의 CTU 크기들을 검사함으로써 시작할 수 있다.
본 발명의 실시예들에 따라 비디오의 스트림을 인코딩할 때 블록 크기 정보를 재사용하기 위한 프로세스가 도 3에 도시된다. 프로세스는 크기가 유사한 CTU(즉, 또 다른 스트림에서의 대응 프레임에서 대응 CTU)에 대해 결정되었는지를 확인하는 단계(310)를 포함한다. 그 후 CTU 크기가 검사되기 위해 선택되지 않는다면(312), 통상적으로 보다 큰 크기로부터 시작한다. 크기가 유사한 CTU에 대해 결정되었다면, 유사한 CTU의 소스 스트림의 분해능은 현재 스트림에 비교된다(312). 분해능이 상이하다면, CTU 크기는 현재 스트림으로 스케일링(314)된다. 미리 결정된 CTU 크기(미리 결정된다면) 또는 선택된 CTU 크기(미리 결정되지 않았다면)는 인코딩되는 현재 CTU에 대해 검사된다(316). 크기가 수용 가능하지 않다면, 보다 작은 CTU 크기가 시도된다(318). 크기가 수용 가능하다면, CTU 크기는 현재 CTU에 적용된다(320).
비디오들의 스트림을 인코딩할 때 CTU 크기 결정들을 재사용하기 위한 특정 프로세스가 도 3에 대하여 상기 논의되지만, 다양한 프로세스들 중 임의의 것이 본 발명의 실시예들에 따라 다수의 미디어 콘텐트 스트림들을 인코딩할 때 CTU(또는 관련 비디오 압축 표준에 따라 픽셀들의 다른 "블록" 파티션들) 크기 결정들을 재사용하기 위해 이용될 수 있다. 게다가, HEVC가 아닌 다른 비디오 표준들에서 "블록" 파티션들은 여기에서 논의된 것들이 아닌 이용 가능한 크기들을 가질 수 있으며, 여기에서 논의된 블록 크기들을 선택하기 위한 기술들이 동일하게 적용 가능하다는 것이 당업자에게 이해된다. 이하에서 추가로 논의될 바와 같이, 하나의 인코더 제어기(즉, 동일한 분해능 및 상이한 비트레이트들에서 다수의 스트림들을 인코딩하는 소프트웨어 프로세스)에 의한 결정들은 인코더 제어기에 의해 또는 상이한 분해능을 인코딩한 또 다른 인코딩 제어기에 의해 저장되며 재사용될 수 있다.
모드 분포 및 모드 선택들
모드 분포는 비디오의 프레임 내에서 인트라, 인터, 및 스킵 매크로 블록들(또는 관련 비디오 압축 표준에 따른 픽셀들의 다른 "블록" 파티션들)의 전체 비를 나타낸다. P 프레임들 및 B 프레임들과 같은 예측 프레임들은 인트라(프레임 내에서의 정보만을 갖고 인코딩된) 및/또는 인터(또 다른 프레임에서의 정보를 참조하여 인코디된) 프레임 매크로블록들을 포함할 수 있다. 상이한 비디오 압축 표준들 하에서, 블록 픽셀 파티션들은 매크로블록들 또는 코딩 트리 유닛들(CTU들)로서 다양하게 불리울 수 있다. 모드 분포는 블록 자체가 매크로블록 또는 CTU로 불리우는지에 관계없이 블록 유형들을 나타낼 수 있다. 이 기술분야에 알려진 것들을 포함하여, 테스트들 및/또는 알고리즘들이 이미지 품질을 유지하면서 어떤 유형의 블록이 상기 블록을 인코딩할 때 가장 효율적인지를 알기 위해 프레임에서의 각각의 매크로블록을 분석하기 위해 이용될 수 있다. 예를 들면, 인코딩 효율성의 측정치들은 특정한 매크로블록을 인코딩하기 위해 요구된 비트들의 수일 수 있다.
인코딩 효율성 및 이미지 품질을 위해, 대안 스트림들에서 대응 프레임들에 걸친 동일한 모드 분포에 가능한 한 가깝게 유지하는 것이 종종 바람직하다. 예를 들면, 30% 인트라 블록들, 60% 인터 블록들, 및 10% 스킵 블록들을 가진 프레임(p)을 고려해볼 때, 동일한 분해능 및 상이한 비트레이트에서 제 1 대안 스트림에서의 대응 프레임(p1)은 인트라, 인터, 및 스킵 블록들의 유사한 분포, 즉 타겟 모드 분포를 가져야 한다. 상이한 분해능 및 상이한 비트레이트에서 제 2 대안 스트림에서의 대응 프레임(p2)은 이상적으로 또한 블록 유형들의 유사한 분포를 가질 것이다.
모드 분포는 프레임에서의 블록들을 프로세싱할 때 어떤 블록 유형을 사용할지에 대한 인코더에 의해 이루어진 결정들을 가속화하기 위해 사용될 수 있다. 결정된 모드 분포에 따르려고 함으로써, 결정들의 수는 감소될 수 있다. 예를 들면, 특정한 프레임을 프로세싱하는 끝을 향해, 프레임의 모드 분포는 타겟 모드 분포로부터 벗어날 수 있다. 그러므로, 블록들은 이미지의 양호한 품질 및 무결성을 유지하면서 타겟 모드 분포에 더 가까운 이들 블록들을 인코딩한 후 결과적인 모드 분포를 이끌기 위해 특정한 유형(예로서, 인트라, 인터, 스킵)이도록 선택될 수 있다. 본 발명의 다양한 실시예들에서, 블록 유형을 선택할 때 결정들은 보다 많은 복잡도(예로서, 보다 많은 인트라 코딩된 블록들)가 보다 높은 비트레이트들에서 수용되기 때문에 상이한 비트레이트들에서의 스트림들 사이에서 달라질 수 있다.
본 발명의 실시예들에 따라 블록 유형 결정들을 조정하기 위한 프로세스가 도 4에 도시된다. 프로세스(400)는 프레임에서의 블록들이 인코딩될 때 또는 프레임이 분석되며 블록 유형들이 인코딩되지 않고 선택될 때 이용될 수 있다. 프로세스는 프로세싱되는(예로서, 분석되거나 인코딩된) 블록들의 카운트를 유지하는 단계(410)를 포함한다. 블록들의 임계 수, 또는 대안적으로 프레임에서의 총 블록들의 비율이 도달된다면, 블록 유형들을 선택하기 위한 기준들은 프레임에서의 블록들의 타겟 모드 분포를 유지할 블록 유형들을 선택하기 위해 더 조정될 수 있다(414). 프레임의 끝이 도달되지 않았다면(416), 프로세싱은 프레임에서의 블록들에 대해 계속되며 프로세싱된 블록들의 카운트를 업데이트한다(410).
비디오의 스트림들을 인코딩할 때 블록 유형 결정들을 조정하기 위한 특정 프로세스가 도 4에 대하여 상기 논의되지만, 다양한 프로세스들 중 임의의 것이 본 발명의 실시예들에 따라 다수의 미디어 콘텐트 스트림들을 인코딩할 때 블록 유형 결정들을 조정하기 위해 이용될 수 있다.
모션 추정
비디오 압축에서, P 프레임들 및 B 프레임들과 같은 예측 프레임들인 기준 프레임(I, P, 또는 B 프레임일 수 있는)으로부터 정보를 인출하며 모션 추정에서 사용된 모션 벡터들 및 잔여 데이터와 같은 정보를 포함한다. 픽셀들의 블록(예로서, 매크로블록, CTU, 또는 유사한 파티션)을 위한 모션 벡터는 통상적으로 예측된 프레임에서 기준 프레임으로부터 픽셀들의 표시된 블록을 위치시킬 곳을 설명한다. 잔여 데이터는 픽셀들의 블록 및 픽셀들의 기준 블록 사이에서의 임의의 차이들을 설명한다. 본 발명의 많은 실시예들에서, 모션 벡터들과 같은 모션 추정 정보는 상이한 해상도 및/또는 비트레이트에서 하나의 출력 스트림으로부터 또 다른 출력 스트림으로 재사용될 수 있다.
본 발명의 여러 개의 실시예들에서, 모션 벡터들은 주어진 분해능 및 비트레이트에서 적어도 하나의 출력 스트림에 대해 생성된다. 모션 벡터들은 그 후 상이한 비트레이트에서 동일한 분해능에서 적어도 하나의 다른 출력 스트림에서 인코딩할 때 적용되며 정제된다. 본 발명의 추가 실시예들에서, 출력 스트림에 대해 생성되는 모션 벡터들은 보다 높은 분해능에서 적어도 하나의 다른 출력 스트림을 인코딩할 때 적용되며 정제된다. 모션 벡터들은 제 1 스트림 및 제 2 스트림 사이에서 분해능에서의 차이에 비례하여 스케일링되며 그 후 보다 높은 분해능에서 이용 가능한 보다 높은 정밀도를 이용하기 위해 정제된다. 예를 들면, 분해능 768×432의 스트림에 대해 생성된 모션 벡터들은 1280/768로 벡터의 수평 구성요소를 및 720/432로 벡터의 수직 구성요소를 곱함으로써 분해능 1280×720의 스트림을 인코딩할 때 사용될 수 있다. 곱셈기들(1280/768 및 720/432)은 분해능에서의 상기 변화에 대한 스케일 인자들로서 고려될 수 있다. 더욱이, 인코더는 매크로블록에 대한 잔여 데이터 및 모션 벡터의 인코딩 비용이 매우 낮다고 결정할 수 있으며 또 다른 출력 스트림에서의 상기 매크로블록에 대한 인코딩 비용을 확인하는 것을 생략할 수 있다. 이러한 식으로, 모션 벡터들은 다수의 출력 스트림들에 걸쳐 재사용될 수 있으며 모션 추정은 새로운 모션 벡터들을 생성할 필요가 없음으로써 가속화된다. 다수의 출력 스트림들에 걸친 모션 추정 정보의 공유 및/또는 재사용을 위한 다른 기술들이 본 발명의 실시예들에 따라 이용될 수 있다. 대안 스트림들을 인코딩할 때 모션 추정 정보를 재사용하기 위한 시스템들 및 방법들은 2012년 5월 31일에 출원된, Zurpal 외의, "비디오 데이터의 대안 스트림들을 인코딩할 때 인코딩 정보의 재사용을 위한 시스템들 및 방법들"이라는 제목의, 미국 특허 출원 번호 제13/485,609호에 개시되며, 그 전체는 참조로서 통합된다.
본 발명의 실시예들에 따라 비디오의 스트림을 인코딩할 때 모션 벡터들을 재사용하기 위한 프로세스는 도 5에 도시된다. 비디오의 스트림에서의 프레임을 인코딩할 때, 인코더는 모션 벡터가 현재 프레임을 인코딩할 때 재사용될 수 있는 비디오의 상이한 스트림에서의 대응 매크로블록/CTU에 대해 이미 생성되었는지를 확인(510)할 수 있다. 그렇지 않다면, 새로운 모션 벡터가 생성되며 저장된다(512). 모션 벡터가 존재한다면, 인코더는 비디오의 다른 스트림이 현재 스트림과 동일한 분해능에 있는지를 확인(514)할 수 있다. 그것이 동일한 분해능이라면, 모션 벡터가 직접 적용될 수 있다(516). 모션 벡터는 또한 하나 두 개의 이웃 픽셀들에 걸친 작은 다이아몬드 탐색을 갖고 또는 서브-픽셀 정제를 갖고와 같은, 탐색을 갖고 정제될 수 있다. 다양한 다른 탐색 패턴들이 대안적으로 모션 벡터를 정제하기 위해 이용될 수 있다. 그것이 상이한 분해능이면, 모션 벡터는 적용되기 전에 현재 분해능으로 스케일링(518)되며 정제(520)될 수 있다.
비디오의 스트림을 인코딩할 때 모션 벡터들을 재사용하기 위한 특정 프로세스가 도 5에 대하여 상기 논의되지만, 다양한 프로세스들 중 임의의 것이 본 발명의 실시예들에 따라 다수의 미디어 콘텐트 스트림들을 인코딩할 때 모션 벡터들을 재사용하기 위해 이용될 수 있다.
적응적 비트레이트 스트리밍을 위한 2-패스 인코딩 콘텐트
2-패스 프로세스를 사용한 인코딩 콘텐트는 정보의 공유 및 재사용을 통해 효율성들을 제공할 수 있다. 본 발명의 많은 실시예들에서, 인코더는 콘텐트를 수신하고, 제 1 패스에서 콘텐트를 분석하며 제 2 패스에서 콘텐트를 인코딩한다. 제 1 패스에서 수집된 통계들 및 다른 정보는 제 2 패스에서 인코딩을 가속화하기 위해 사용될 수 있으며 통계들 및 인코딩 정보는 제 2 패스에서의 인코딩 프로세스들 사이에서 공유될 수 있다. 몇몇 실시예들에서, 제 1 패스는 제 2 패스가 시작되기 전에 완료된다. 다른 실시예들에서, 제 2 패스는 제 1 패스가 완료되기 전에 시작될 수 있다. 다시 말해서, 제 1 및 제 2 패스들에 대한 계산 프로세스들은 프레임들이 제 2 패스 프로세스(들)에 의해 프로세싱되기 전에 제 1 패스 프로세스(들)에 의해 프로세싱되는 경우 동시에 실행할 수 있다.
본 발명의 실시예에 따라 콘텐트를 인코딩하기 위한 프로세스가 도 6에 도시된다. 인코딩 프로세스(600)는 미디어 콘텐트를 수신하는 단계를 포함한다(610). 콘텐트는 단일 입력 파일(예로서, 멀티미디어 파일 또는 컨테이너 포맷 파일) 또는 미디어 파일들의 모음에 포함될 수 있다. 콘텐트는 또한 인코더에 의해 수신된 비디오의 입력 스트림일 수 있다. 본 발명의 여러 개의 실시예들에서, 인코딩 프로세스는 인코딩 애플리케이션으로서 인코딩 서버상에서 구현되며 디스크 판독/기록 동작들은 각각의 입력 프레임이 단지 한 번 판독될 필요가 있으므로 감소된다.
인코딩 프로세스는 또한 미디어 스트림에 대한 통계들을 수집하기 위해 제 1 패스를 만드는 것을 포함한다(612). 제 1 패스는 소스 입력 비디오 스트림에서 콘텐트의 초기 분석을 하며 인코딩될 각각의 분해능에 대한 통계들을 수집하도록 의도된다. 본 발명의 많은 실시예들에서, 입력 스트림은 각각의 원하는 출력 분해능을 위한 스트림으로 변환되며 통계들은 각각의 스트림에 대해 수집된다. 변환은 컬러 변환(예로서, RGB 대 YUV 등, ITU 601 대 709, 또는 포맷 특정 변환들) 및 각각의 프레임의 치수들/분해능을 리사이징하는 단계를 포함할 수 있다. 프레임 복잡도 측정치와 같은 인코딩 정보는 상기 추가로 논의된 바와 같이 기술들을 사용하여 프레임에서 이미지 데이터의 복잡도의 레벨에 기초하여 스트림에서의 각각의 프레임에 할당될 수 있다. 모드 분포는 또한 각각의 프레임에 대해 결정될 수 있다. 복잡도 측정치들 및 모드 분포들은 최종 스트림들의 인코딩에 대한 입력으로서 사용될 수 있다.
다른 인코딩 정보는 스트림들을 인코딩할 때 사용될 매크로블록 데이터의 크기 및 헤더 데이터의 크기를 포함할 수 있다. 헤더 크기를 고려해볼 때, 인코더는 얼마나 많은 비트들이 오버헤드 데이터에 할당되는지 및 얼마나 많은 비트들이 콘텐트를 인코딩하기 위해 이용 가능한지를 추정할 수 있다. 매크로블록 크기는 또한 콘텐트를 인코딩할 때 비트 할당의 보다 양호한 추정들에 기여할 수 있다. 효과적인 레이트 제어를 위해, 헤더 크기 대 매크로블록 크기의 상대 비율은 출력 스트림들에 걸쳐 일관적이어야 한다. 헤더 크기, 매크로블록 크기, 및/또는 헤더 크기 대 매크로블록 크기의 상대 비율은 인코딩 프로세스에 대한 인코딩 파라미터들로서 제공될 수 있다.
인코딩 정보는 또한 가상 기준 디코더(hypothetical reference decoder; HRD) 데이터를 포함할 수 있다. HRD 모델은 프레임 크기들 및 버퍼 충만도를 산출하는 단계를 돕기 위해 몇몇 비디오 압축 표준들에서 특정된다. HRD는 재생 디바이스 버퍼에서 버퍼 오버플로우를 회피하기 위해 인코더 상에서 디코더 거동(behavior)을 재생한다. HRD 데이터는 제 1 분석 패스에서 결정되며 제 2 인코딩 패스에서의 사용을 위해 공유 버퍼들 또는 로컬 캐시들에 저장될 수 있다.
하나의 분해능을 위해 수집된 다른 통계들은 동일한 분해능 및/또는 또 다른 분해능에서 다양한 비트레이트들에서 스트림들을 인코딩하기 위한 결정들을 가속화하기 위해 사용될 수 있다. 제 1 패스에서 수집하기 위한 통계들은 (이에 제한되지 않지만): 평균 양자화 파라미터, 헤더 비트들의 크기, 텍스처 비트들의 크기, 인트라 매크로블록들/CTU들의 수, 인터 매크로블록들/CTU들의 수, 스킵 매크로블록들/CTU들의 수를 포함할 수 있다. 본 발명의 여러 개의 실시예들에서, 통계들은 내부적으로 캐싱될 수 있고(예로서, 단일 파일로 출력) 및/또는 제 2 패스에서 인코딩할 때 각각의 인코더 제어기에 액세스 가능한 메모리에서의 공유 버퍼들에 저장될 수 있다.
제 2 패스에서, 콘텐트는 출력 스트림들로 인코딩된다(616). 본 발명의 많은 실시예들에서, 별개의 스레드 또는 프로세스가 각각의 스레드 또는 프로세스가 인코더 제어기로서 불리우는 각각의 출력 분해능에 대한 인코딩 애플리케이션에 의해 론칭된다(614). 본 발명의 추가 실시예들에서, 각각의 인코더 제어기는 동일한 분해능에서 그러나 상이한 비트레이트들에서 다수의 출력 스트림들을 인코딩한다. 본 발명의 여러 개의 실시예들에서, 인코딩 서버는 다수의 프로세서들을 가지며 인코더 제어기들은 각각 상이한 프로세서들 상에서 실행될 수 있거나 그 외 프로세서들에 걸쳐 분포될 수 있다. 출력 스트림들은 고정 비트 레이트(CBR) 또는 가변 비트 레이트(VBR)에서 인코딩될 수 있다.
스트림들의 인코딩이 완료될 때까지(618), 인코더 제어기들은 내부 캐시들 및/또는 메모리에서의 공유 버퍼들에 저장된 정보 및 통계들을 사용하여 동시에 실행할 수 있다. 인코더 제어기는 인코딩 정보가 그것이 인코딩하는 블록들 및/또는 프레임들에 대해 존재하는지에 대해 메모리를 확인할 수 있으며(620) 현재 블록 또는 프레임을 프로세싱할 때 상기 정보를 이용할 수 있다(622). 상기 추가로 논의되는 바와 같이, 상이한 유형들의 인코딩 정보는 인코더가 결정들을 생략하도록 허용하기 위해 사용될 수 있거나 현재 블록 또는 프레임을 프로세싱하기 위한 인코딩 정보를 결정하기 위해 시작 포인트로서 사용될 수 있다. 정보가 아직 존재하지 않는다면, 그것은 생성될 수 있으며(624) 스트림의 인코딩(616)은 계속된다.
공유 정보는 모션 벡터들과 같은 모션 추정 정보를 포함할 수 있다. 스트림에 대해 생성된 모션 벡터들은 동일한 분해능에서 또는 상이한 분해능에서 또 다른 스트림을 인코딩할 때 재사용될 수 있다. 상기 추가로 논의된 바와 같이, 보다 높은 분해능에서 스트림을 인코딩하기 위해 재사용된 모션 벡터는 분해능에서의 차이를 보상하기 위해 스케일링되고 정제될 수 있다. 몇몇 통계들은 인코딩되는 스트림의 분해능에 특정적일 수 있다. 상기 논의된 바와 같이, 특정한 해상도 및 비트레이트에서 CTU 크기 선택들은 유지되며 보다 높은 비트레이트에서 동일한 분해능을 인코딩하는데 적용될 수 있다. 인코더 제어기가 프레임의 일부에서 CTU 크기에 대한 결정을 할 때, 그것은 보다 높은 비트레이트에서 프레임의 동일한 부분을 인코딩할 때 상기 결정을 생략하며 CTU 크기를 재사용하거나 보다 작은 CTU 크기들을 시도할 수 있다.
본 발명의 많은 실시예들에서, 프레임의 주어진 부분에서의 CTU는 상이한 비트레이트들에서 복수의 출력 스트림들에 대해 동일한 인코더 제어기에 의해 순차적으로 인코딩된다. 인코더 제어기가 출력 스트림에 대한 CTU를 인코딩한 후, 그것이 그 후로 상이한 출력 스트림에 대한 CTU를 인코딩한다면, 상기 CTU를 인코딩하기 위해 요구된 데이터는 여전히 프로세서 캐시 또는 다른 로컬 메모리에 있을 가능성이 있다. 본 발명의 실시예들에 따르면, 인코더 제어기는 순차적으로 차례로 각각의 출력 스트림에 대한 CTU를 인코딩한다. 각각의 출력 스트림에 대한 대응 CTU들은 상이한 비트레이트들에서 스트림들에 대한 상이한 양자화 파라미터들을 사용하여 인코딩될 수 있다.
블록-지향 비디오 압축을 가진 인코딩은 통상적으로 프레임 내에서 이미지 정보의 압축에 기여하는 양자화 파라미터를 고려하는 단계를 수반한다. 프레임에 대한 양자화 파라미터는 통상적으로 프레임의 모드 분포 및 프레임 복잡도 측정치와 같은 인자들에 기초하여 선택되며 가능한 최고 이미지 품질을 유지하면서 인코딩된 프레임이 타겟 크기(비트들에서)이도록 선택된다. 상기 추가로 논의된 바와 같이, 프레임 복잡도 측정치 및 모드 분포에 대한 값들은 입력 스트림의 프레임에 대해 결정되며 다수의 출력 스트림들에서의 대응하는 출력 프레임들을 프로세싱하는데 이용될 수 있다. 이전 프레임으로부터의 양자화 파라미터(들)는 시작 값으로서 사용될 수 있으며 현재 프레임에 대한 모드 분포 및 프레임 복잡도 측정치를 사용하여 정제될 수 있다. 예를 들면, 다음 프레임이 이전 프레임보다 낮은 복잡도 측정치를 가진다면, 양자화 파라미터들은 덜 복잡한 이미지가 충실도의 심각한 손실 없이 더 압축될 수 있으므로 상기 프레임에 대해 증가될 수 있다. 양자화 파라미터들은 보다 높은 비트레이트에서 데이터에 대한 보다 높은 용량 때문에 보다 높은 비트레이트 스트림에 대해 동일한 프레임을 인코딩할 때 감소될 수 있다. 본 발명의 많은 실시예들에서, 양자화 파라미터들은 각각의 출력 스트림의 타겟 비트레이트에 대해 조정하는 동안 동일한 프레임 복잡도 측정치 및 모드 분포를 사용하여 각각의 출력 스트림에서의 대응 프레임들에 대해 독립적으로 결정될 수 있다. 보다 낮은 비트레이트 출력 스트림에서의 프레임에서 CTU들에 대해 결정된 양자화 파라미터들은 보다 높은 비트레이트 출력 스트림에서의 대응 CTU들로 불리우며 그에 대해 감소될 수 있다. 본 발명의 실시예들에 따른 인코더들은 출력 스트림들을 인코딩할 때 레이트 왜곡 정보를 산출하며 보다 높은 비트레이트에서 출력 스트림을 인코딩할 때 양자화 파라미터들을 선택하기 위해 레이트 왜곡 정보를 재사용할 수 있다. 본 발명의 여러 개의 실시예들에서, 각각의 출력 스트림에서의 각각의 프레임은 그것의 모드 분포가 입력 스트림으로부터의 소스 프레임을 사용하여 결정된 타겟 모드 분포와 대략 동일하도록 인코딩된다. 다른 유형들의 공유 정보는 상기 추가로 상이한 인코더 제어기들에 의해 액세스 가능하고 사용될 수 있다.
본 발명의 다양한 실시예들에서, 비디오의 하나 이상의 프레임들은 남아있는 모션 예측을 인코딩하는 블록들로 분할된다. 이들 블록들은 HEVC 표준에서의 변환 유닛들(TU)로서 불리우며 4×4, 8×8, 16×16, 또는 32×32의 크기들을 가질 수 있다. 예측 잔여물들에 대한 다른 유형들의 블록 유닛들은 관련 표준 또는 비디오 코덱에 의존하여 이용될 수 있다. 본 발명의 실시예들에 따른 인코더들은 인코더가 구성되는 비디오 코덱 또는 표준에 의해 정의되는 CTU들, TU들, 코딩 유닛들(CU들) 및/또는 다른 유형들의 인코딩 블록들을 인코딩할 때 양자화 파라미터들을 사용할 수 있다. 스트림의 통계들에 기초한 비디오의 프레임에서 블록들에 대한 양자화 파라미터들 및/또는 이전 산출된 양자화 파라미터들을 선택하는 프로세스는 적응적 양자화로 불리울 수 있다. 픽셀들의 블록들에 대한 양자화 파라미터들은 픽셀들의 이들 블록들에 대한 복잡도 측정치들(상기 추가로 논의된 프레임 복잡도 측정치들과 유사한) 및/또는 픽셀들의 유사한 블록들에 대해 이미 산출된 양자화 파라미터들에 기초하여 제 1 패스 및/또는 제 2 패스에서 산출될 수 있다. 제 1 패스에서 산출되는 양자화 파라미터들 및/또는 복잡도 측정치들이, 예를 들면, 인코더 제어기들에 의해 액세스 가능한 공유 버퍼들에 저장되며 제 2 패스에서 이용될 수 있다. 예를 들면, 하나의 분해능에서 입력 스트림에 대해 산출되는 값들은 상이한 비트 레이트들에서 동일한 분해능에서 출력 스트림들을 인코딩할 때 이용될 수 있다.
도 6에 대하여 상기 설명된 프로세스에서, 통계들은 입력 비디오 스트림에 대해 수집되거나 산출된다(612). 산출되는 통계는 입력 비디오 스트림 내에서의 프레임에서 픽셀들의 블록에 대한 복잡도 측정치를 포함할 수 있다. 본 발명의 많은 실시예들에서, 픽셀들의 블록에 대한 복잡도 측정치는 제 2 패스에서 블록을 인코딩하기 위한 양자화 파라미터를 산출할 때 저장되며 사용될 수 있다. 본 발명의 실시예들에 따른 복잡도 측정치를 생성하기 위한 프로세스가 도 7에 도시된다. 프로세스는 비디오의 프레임에서 픽셀들의 블록을 선택하는 단계를 포함한다(710). 프로세스는 블록의 복잡도를 분석한다(712). 복잡도 측정치는 예를 들면, AVC 표준에서, 휘도의 히스토그램 및/또는 대비 레벨 분포로부터 산출될 수 있다. 그러나, 임의의 비디오 인코딩 표준하에서 다수의 기술들 중 임의의 것이 본 발명의 실시예들에 따른 복잡도 측정치를 산출하기 위해 사용될 수 있다. 복잡도 측정치는 양자화 파라미터를 생성할 때(예로서, 인코딩의 제 2 패스에서) 사용하기 위해 저장될 수 있다(714). 도 10a는 입력 스트림의 제 1 패스에서 산출된 바와 같이 CTU들의 복잡도 측정치들의 플롯을 도시한다. 도면에 도시된 바와 같이, 복잡도 측정치들은 상이한 CTU들 사이에서 달라질 수 있다.
다시 도 6을 참조하면, 상기 추가로 설명된 프로세스는 그것이 존재하지 않는다면 인코딩 정보를 생성하는 단계(624) 및 그것이 존재한다면 인코딩 정보를 재사용하는 단계(622)를 포함한다. 인코딩 정보는 픽셀들의 특정한 블록(CTU 또는 TU와 같은)에 대한 양자화 파라미터를 포함할 수 있다. 본 발명의 실시예들에 따른 양자화 파라미터를 생성하기 위한 프로세스(인코딩 정보를 생성(624)할 때와 같은)는 도 8에 도시된다. 프로세스는 픽셀들의 블록을 선택하는 단계(810)를 포함한다. 블록에 대한 저장된 복잡도 측정치가 검색된다(812). 제 2 패스에서 블록(CTU 또는 TU와 같은)을 인코딩하기 위한 양자화 파라미터는 제 1 패스에서의 블록에 대해 산출된 복잡도 측정치와 같은 통계들을 사용하여 결정될 수 있다(814). 산출은 또한 평균 기반 화상 양자화 파라미터로부터의 편차를 고려할 수 있다.
양자화 파라미터들은 제 1 패스에서 결정된 복잡도 측정치들 및/또는 이미 인코딩된 다른 출력 스트림들에서(예를 들면, 보다 낮은 또는 보다 높은 비트 레이트 스트림에서)의 블록들에 대해 결정된 양자화 파라미터들을 이용할 수 있다. 픽셀들의 유사한 블록에 대해 이미 생성된 양자화 파라미터를 사용하기 위한 프로세스(인코딩 정보를 재사용(622)할 때와 같은)가 도 9에 도시된다. 프로세스는 픽셀들의 블록을 선택하는 단계(910)를 포함한다. 저장된 양자화 파라미터는 유사한 블록에 대해 검색된다(912). 유사한 블록은 선택된 블록과 입력 스트림에서의 프레임에서 동일한 블록으로부터 생성된 출력 스트림에서의 프레임에서의 블록이다. 예를 들면, 유사한 블록은 동일한 분해능이지만 상이한 비트 레이트의 출력 스트림에서 이미 인코딩된 대응 블록일 수 있다. 양자화 파라미터는 검색된 양자화 파라미터를 사용하여 선택된 블록에 대해 산출된다. 양자화 파라미터는 입력 스트림 및/또는 이에 제한되지 않지만 왜곡 레이트 및 비트 레이트와 같은 출력 스트림들의 이미 인코딩된 프레임들에 대해 산출된 통계들에 대해 추가로 조정될 수 있다(916). 양자화 파라미터는 최소 왜곡 및 타겟 비트 레이트를 달성하기 위해 산출될 수 있다. 도 10b는 도 10a에 도시된 복잡도 측정치들의 플롯과 함께 3개의 상이한 출력 스트림들에서(동일한 분해능 및 상이한 비트 레이트들에서) CTU들에 대해 산출되는 양자화 파라미터들의 플롯을 도시한다. 도면에 도시된 바와 같이, 복잡도 측정치 값들이 양자화 파라미터 값들을 결정할 때 사용되었으며 따라서 플롯들은 그것들의 관계로 인해 유사한 일반적 형태를 가진다.
재생 동안 스트림들의 스위칭을 용이하게 하기 위해, 비디오 콘텐트의 대안 스트림들의 세트는 각각의 스트림에서의 동일한 위치에 인트라 프레임들(I 프레임들)을 가져야 한다. 하나의 스트림에서 I 프레임이 있는 경우에, 다른 대안 스트림들의 각각에서의 동일한 위치(즉, 시간)에서의 대응 프레임들은 I 프레임이어야 한다. I 프레임이 프레임을 렌더링하기 위해 필요한 정보 모두를 포함하기 때문에, 재생 디바이스가 스트림들을 스위칭할 필요가 있을 때, 그것은 재생이 프레임들을 잃지 않고 끊김 없도록 I 프레임에서 스위칭할 수 있다. 본 발명의 많은 실시예들에서, I 프레임들은 복수의 대안 출력 스트림들에서 동일한 위치에서의 프레임들에 대해 인코딩된다. P 프레임 또는 B 프레임이 출력 스트림에 대해 인코딩된 경우, 인코더는 또 다른 출력 스트림을 인코딩할 때 I 프레임과 동일한 위치에서 대응 프레임을 인코딩하기 위해 검사하는 단계를 생략할 수 있으며 B 프레임 또는 P 프레임으로서 프레임을 인코딩할 수 있다.
공유된 통계들을 이용한 다수의 미디어 콘텐트 스트림들을 인코딩하기 위한 특정 프로세스가 도 6에 대하여 상기 논의되지만, 다양한 프로세스들 중 임의의 것이 본 발명의 실시예들에 따른 적응적 비트레이트 스트리밍을 위한 다수의 미디어 콘텐트 스트림들을 인코딩하기 위해 이용될 수 있다.
본 발명이 특정한 특정 양상들에서 설명되었지만, 많은 부가적인 수정들 및 변형들이 당업자들에게 명백할 것이다. 그러므로 본 발명은, 본 발명의 범위 및 사상으로부터 벗어나지 않고, 그것들이 따르는 특정한 표준 내에서 특정된 것들을 넘어 특징들을 지원하는 인코더들 및 디코더들을 이용하는 단계과 같은 구현에서의 다양한 변화들을 포함하여, 구체적으로 설명된 것 외에 실시될 수 있다는 것이 이해될 것이다. 따라서, 본 발명의 실시예들은 모든 점들에서 예시적이며 제한적이지 않은 것으로 고려되어야 한다.
10: 적응적 스트리밍 시스템 12: 소스 인코딩 서버
13: 미디어 서버 14: 콘텐트 서버
16: 네트워크 18, 20, 22: 재생 디바이스
200: 소스 인코더 210: 프로세서
230: 메모리 240: 네트워크 인터페이스
250: 소스 인코딩 애플리케이션 260: 소스 비디오 데이터
270: 인코더 제어기 280: 인코더 제어기
295: 공유 데이터 버퍼

Claims (40)

  1. 복수의 대안적인 비디오 스트림들로서 소스 비디오를 인코딩하도록 구성된 소스 인코더에 있어서:
    소스 인코더 애플리케이션을 포함하는 메모리;
    공유 메모리; 및
    상기 소스 인코딩 애플리케이션에 의해:
    멀티미디어 콘텐트를 수신하는 것으로서, 상기 멀티미디어 콘텐트는 1차 분해능을 가진 소스 비디오 데이터를 포함하는, 상기 멀티미디어 콘텐트를 수신하고;
    상기 수신된 멀티미디어 콘텐트를 통해 제 1 패스에서 소스 비디오 데이터에 대한 통계들을 수집하며 상기 통계들을 공유 메모리에 기록하는 것으로서, 상기 통계들은 픽셀들의 블록들의 복잡도 측정치들을 포함하는, 상기 소스 비디오 데이터에 대한 통계들을 수집 및 기록하고;
    상기 수신된 멀티미디어 콘텐트를 통해 상기 제 1 패스 동안 소스 비디오 데이터에 대한 초기 인코딩 정보를 결정하며 상기 초기 인코딩 정보를 공유 메모리에 기록하며;
    복수의 병렬 인코딩 프로세스들을 갖고 상기 수신된 멀티미디어 콘텐트를 통해 제 2 패스 동안 복수의 대안적인 비디오 스트림들을 생성하기 위해 수집된 통계들 및 초기 인코딩 정보를 사용하여 상기 소스 비디오 데이터를 병렬로 인코딩하는 것으로서, 상기 소스 비디오의 인코딩은 부가적인 인코딩 정보를 이용하고, 상기 병렬 인코딩 프로세스들은 또 다른 병렬 인코딩 프로세스에 의해 비디오의 일부에 대해 이미 결정되었으며 상기 공유 메모리에 저장된 부가적인 인코딩 정보를 재사용하도록 구성되며, 상기 병렬 인코딩 프로세스들은 또 다른 병렬 인코딩 프로세스에 의해 비디오의 일부에 대해 이미 결정되지 않은 부가적인 인코딩 정보를 생성하며 상기 공유 메모리에 상기 생성된 부가적인 인코딩 정보를 저장하도록 구성되고, 상기 부가적인 인코딩 정보는 픽셀들의 블록들에 대한 양자화 파라미터들을 포함하는, 상기 소스 비디오 데이터를 병렬로 인코딩하도록 구성된 병렬 프로세싱 시스템을 포함하는, 소스 인코더.
  2. 제 1 항에 있어서,
    소스 비디오 데이터에 대한 통계들은: 평균 양자화 파라미터, 헤더 비트들의 크기, 텍스처 비트들의 크기, 인트라 블록들의 수, 인터 블록들의 수, 및 스킵 블록들의 수로 이루어진 그룹으로부터 선택된 통계들을 포함하는, 소스 인코더.
  3. 제 1 항에 있어서,
    소스 비디오 데이터에 대한 초기 인코딩 정보를 결정하도록 구성되는 상기 병렬 프로세싱 시스템은 프레임 복잡도 측정치를 산출하도록 구성된 상기 병렬 프로세싱 시스템을 더 포함하는, 소스 인코더.
  4. 제 1 항에 있어서,
    또 다른 병렬 인코딩 프로세스에 의해 비디오의 일부에 대해 이미 결정되지 않은 부가적인 인코딩 정보를 생성하도록 구성되는 상기 병렬 인코딩 프로세스들은 상기 소스 비디오 데이터에서 비디오의 프레임의 일부를 인코딩하기 위한 코딩 트리 유닛(Coding Tree Unit; CTU) 크기를 결정하는 단계를 더 포함하는, 소스 인코더.
  5. 제 4 항에 있어서,
    상기 소스 비디오 데이터에서 비디오의 프레임의 일부를 인코딩하기 위한 CTU 크기를 결정하는 단계는:
    제 1 출력 스트림에서 적어도 하나의 출력 CTU로서 인코딩하기 위해 비디오의 프레임의 일부를 선택하는 단계;
    크기가 유사한 CTU에 대해 결정되었는지를 확인하는 단계;
    크기가 상기 유사한 CTU에 대해 결정되지 않았다면 CTU 크기를 선택하는 단계;
    제 2 출력 스트림에 대해 결정된 이전 결정된 CTU 크기를 선택하며 크기가 유사한 CTU에 대해 결정되었다면 상기 제 2 출력 스트림의 분해능과 상기 제 1 출력 스트림의 분해능을 비교하는 단계;
    상기 제 1 출력 스트림의 분해능이 상기 제 2 출력 스트림과 동일한 분해능이 아니라면 상기 CTU 크기를 스케일링하는 단계;
    상기 선택된 CTU 크기가 상기 출력 CTU에 대해 수용 가능한지를 결정하는 단계;
    상기 선택된 CTU 크기가 수용 가능하지 않을 때 보다 작은 CTU 크기를 선택하는 단계; 및
    상기 선택된 CTU 크기가 상기 출력 CTU에 대해 수용 가능하다면 상기 비디오의 프레임의 부분에 상기 선택된 CTU 크기를 적용하는 단계를 포함하는, 소스 인코더.
  6. 제 1 항에 있어서,
    소스 비디오 데이터에 대한 초기 인코딩 정보를 결정하도록 구성되는 상기 병렬 프로세싱 시스템은 상기 복수의 대안적인 비디오 스트림들 중 적어도 하나에서 비디오의 적어도 하나의 프레임에 대한 모드 분포를 결정하도록 구성된 상기 병렬 프로세싱 시스템을 더 포함하는, 소스 인코더.
  7. 제 6 항에 있어서,
    복수의 대안적인 비디오 스트림들을 생성하기 위해 수집된 통계들 및 초기 인코딩 정보를 사용하여 상기 소스 비디오 데이터를 병렬로 인코딩하도록 구성되는 상기 병렬 프로세싱 시스템은:
    대안적인 비디오 스트림에서의 비디오의 프레임에서 프로세싱된 블록들의 카운트를 유지하고;
    상기 모드 분포에 기초하여 블록들의 임계 수를 결정하며;
    상기 블록들의 카운트가 상기 블록들의 임계 수를 충족시킨다면 블록 유형 결정들에 대한 기준들을 조정하도록 구성되는 상기 병렬 프로세싱 시스템을 더 포함하는, 소스 인코더.
  8. 제 1 항에 있어서,
    또 다른 병렬 인코딩 프로세스에 의해 비디오의 일부에 대해 이미 결정되었으며 상기 공유 메모리에 저장된 부가적인 인코딩 정보를 재사용하도록 구성되는 상기 병렬 인코딩 프로세스들은:
    제 1 대안 스트림에서 비디오 프레임에서의 제 1 블록을 인코딩할 때 모션 벡터가 제 2 대안 스트림에서의 제 2 대응 블록에 대해 존재하는지의 여부를 결정하고;
    상기 제 1 대안 스트림 및 상기 제 2 대안 스트림이 동일한 분해능인지를 결정하고;
    상기 제 1 대안 스트림 및 상기 제 2 대안 스트림이 동일한 분해능이 아니라면 상기 모션 벡터를 스케일링하고;
    상기 모션 벡터를 정제하며;
    상기 제 1 대안 스트림에서 상기 비디오 프레임에서의 상기 제 1 블록을 인코딩할 때 상기 모션 벡터를 적용하도록 구성되는 상기 병렬 인코딩 프로세스들을 더 포함하는, 소스 인코더.
  9. 제 1 항에 있어서,
    초기 인코딩 정보는 헤더 크기, 매크로블록 크기, 및 헤더 크기 대 매크로블록 크기의 상대 비율을 더 포함하는, 소스 인코더.
  10. 제 1 항에 있어서,
    초기 인코딩 정보는 가상 기준 디코더(hypothetical reference decoder) 데이터를 더 포함하는, 소스 인코더.
  11. 제 1 항에 있어서,
    상기 병렬 인코딩 프로세스들의 각각은 상이한 분해능에서 인코딩하는, 소스 인코더.
  12. 제 11 항에 있어서,
    상기 병렬 인코딩 프로세스들의 각각은 하나 이상의 대안적인 비디오 스트림들을 인코딩하며 병렬 인코딩 프로세스에 의해 인코딩된 상기 대안적인 비디오 스트림들의 각각은 상이한 비트레이트인, 소스 인코더.
  13. 제 1 항에 있어서,
    상기 병렬 인코딩 프로세스들의 각각은 상기 소스 비디오 데이터로부터 상기 복수의 대안적인 비디오 스트림들의 서브세트에서의 각각의 스트림으로 블록을 순차적으로 차례로 인코딩하는, 소스 인코더.
  14. 제 1 항에 있어서,
    부가적인 인코딩 정보는 레이트 왜곡 정보 및 양자화 파라미터들을 포함하는, 소스 인코더.
  15. 제 1 항에 있어서,
    상기 픽셀들의 블록들은 코딩 트리 유닛들인, 소스 인코더.
  16. 제 1 항에 있어서,
    상기 픽셀들의 블록들은 코딩 유닛들인, 소스 인코더.
  17. 제 1 항에 있어서,
    상기 픽셀들의 블록들은 변환 유닛들인, 소스 인코더.
  18. 제 1 항에 있어서,
    상기 픽셀들의 블록들에 대한 상기 양자화 파라미터들은 픽셀들의 블록들에 대한 복잡도 측정치들을 사용하여 생성되는, 소스 인코더.
  19. 제 1 항에 있어서,
    픽셀들의 블록들에 대한 상기 양자화 파라미터들은 이전 생성된 양자화 파라미터들을 사용하여 생성되는, 소스 인코더.
  20. 제 1 항에 있어서,
    픽셀들의 블록들에 대한 상기 양자화 파라미터들은 왜곡 레이트 및 비트 레이트를 사용하여 생성되는, 소스 인코더.
  21. 복수의 대안적인 비디오 스트림들로서 소스 비디오를 인코딩하기 위한 방법에 있어서:
    멀티미디어 콘텐트를 수신하는 단계로서, 상기 멀티미디어 콘텐트는 소스 인코더를 사용하여 1차 분해능을 가진 소스 비디오 데이터를 포함하는, 상기 멀티미디어 콘텐트를 수신하는 단계;
    소스 인코더를 사용하여 상기 수신된 멀티미디어 콘텐트를 통해 제 1 패스에서 소스 비디오 데이터에 대한 통계들을 수집하며 상기 통계들을 공유 메모리에 기록하는 단계로서, 상기 통계들은 픽셀들의 블록들의 복잡도 측정치들을 포함하는, 상기 소스 비디오 데이터에 대한 통계들을 수집 및 기록하는 단계;
    소스 인코더를 사용하여 상기 수신된 멀티미디어 콘텐트를 통해 상기 제 1 패스 동안 소스 비디오 데이터에 대한 초기 인코딩 정보를 결정하며 상기 초기 인코딩 정보를 공유 메모리에 기록하는 단계; 및
    소스 인코더를 사용하여 복수의 병렬 인코딩 프로세스들을 갖고 상기 수신된 멀티미디어 콘텐트를 통해 제 2 패스 동안 복수의 대안적인 비디오 스트림들을 생성하기 위해 수집된 통계들, 초기 인코딩 정보, 및 부가적인 인코딩 정보를 사용하여 상기 소스 비디오 데이터를 병렬로 인코딩하는 단계로서, 상기 소스 비디오의 인코딩은:
    또 다른 병렬 인코딩 프로세스에 의해 비디오의 일부에 대해 이미 결정되었으며 상기 복수의 병렬 인코딩 프로세스들 중 적어도 하나를 사용하여 상기 공유 메모리에 저장된 부가적인 인코딩 정보를 재사용하는 단계로서, 상기 부가적인 인코딩 정보는 픽셀들의 블록들에 대한 양자화 파라미터들을 포함하는, 상기 부가적인 인코딩 정보를 재사용하는 단계;
    상기 복수의 병렬 인코딩 프로세스들의 또 다른 것에 의해 비디오의 일부에 대해 이미 결정되지 않은 부가적인 인코딩 정보를 생성하는 단계; 및
    병렬 인코더 프로세스를 사용하여 상기 공유 메모리에 상기 생성된 부가적인 인코딩 정보를 저장하는 단계를 더 포함하는, 상기 소스 비디오 데이터를 병렬로 인코딩하는 단계를 포함하는, 소스 비디오를 인코딩하기 위한 방법.
  22. 제 21 항에 있어서,
    소스 비디오 데이터에 대한 통계들은: 평균 양자화 파라미터, 헤더 비트들의 크기, 텍스처 비트들의 크기, 인트라 블록들의 수, 인터 블록들의 수, 및 스킵 블록들의 수로 이루어진 그룹으로부터 선택된 통계들을 포함하는, 소스 비디오를 인코딩하기 위한 방법.
  23. 제 21 항에 있어서,
    소스 비디오 데이터에 대한 초기 인코딩 정보를 결정하는 단계는 프레임 복잡도 측정치를 산출하는 단계를 더 포함하는, 소스 비디오를 인코딩하기 위한 방법.
  24. 제 21 항에 있어서,
    또 다른 병렬 인코딩 프로세스에 의해 비디오의 일부에 대해 이미 결정되지 않은 부가적인 인코딩 정보를 생성하는 단계는 상기 소스 비디오 데이터에서 비디오의 프레임의 일부를 인코딩하기 위한 코딩 트리 유닛(CTU) 크기를 결정하는 단계를 더 포함하는, 소스 비디오를 인코딩하기 위한 방법.
  25. 제 24 항에 있어서,
    상기 소스 비디오 데이터에서 비디오의 프레임의 일부를 인코딩하기 위한 CTU 크기를 결정하는 단계는:
    제 1 출력 스트림에서 적어도 하나의 출력 CTU로서 인코딩하기 위해 비디오의 프레임의 일부를 선택하는 단계;
    크기가 유사한 CTU에 대해 결정되었는지를 확인하는 단계;
    크기가 상기 유사한 CTU에 대해 결정되지 않았다면 CTU 크기를 선택하는 단계;
    제 2 출력 스트림에 대해 결정된 이전 결정된 CTU 크기를 선택하며 크기가 유사한 CTU에 대해 결정되었다면 상기 제 2 출력 스트림의 분해능과 상기 제 1 출력 스트림의 분해능을 비교하는 단계;
    상기 제 1 출력 스트림의 분해능이 제 2 출력 스트림과 동일한 분해능이 아니라면 상기 CTU 크기를 스케일링하는 단계;
    상기 선택된 CTU 크기가 상기 출력 CTU에 대해 수용 가능한지를 결정하는 단계;
    상기 선택된 CTU 크기가 수용 가능하지 않다면 보다 작은 CTU 크기를 선택하는 단계; 및
    상기 선택된 CTU 크기가 상기 출력 CTU에 대해 수용 가능하다면 상기 비디오의 프레임의 부분에 상기 선택된 CTU 크기를 적용하는 단계를 더 포함하는, 소스 비디오를 인코딩하기 위한 방법.
  26. 제 21 항에 있어서,
    소스 비디오 데이터에 대한 초기 인코딩 정보를 결정하는 단계는 상기 복수의 대안적인 비디오 스트림들 중 적어도 하나에서 비디오의 적어도 하나의 프레임에 대한 모드 분포를 결정하는 단계를 더 포함하는, 소스 비디오를 인코딩하기 위한 방법.
  27. 제 26 항에 있어서,
    복수의 대안적인 비디오 스트림들을 생성하기 위해 수집된 통계들, 초기 인코딩 정보, 및 부가적인 인코딩 정보를 사용하여 상기 소스 비디오 데이터를 병렬로 인코딩하는 단계는:
    대안적인 비디오 스트림에서의 비디오의 프레임에서 프로세싱된 블록들의 카운트를 유지하는 단계;
    상기 모드 분포에 기초하여 블록들의 임계 수를 결정하는 단계; 및
    상기 블록들의 카운트가 상기 블록들의 임계 수를 충족시킨다면 블록 유형 결정들에 대한 기준들을 조정하는 단계를 더 포함하는, 소스 비디오를 인코딩하기 위한 방법.
  28. 제 21 항에 있어서,
    또 다른 병렬 인코딩 프로세스에 의해 비디오의 일부에 대해 이미 결정되었으며 상기 공유 메모리에 저장된 부가적인 인코딩 정보를 재사용하는 단계는:
    제 1 대안 스트림에서 비디오 프레임에서의 제 1 블록을 인코딩할 때 모션 벡터가 제 2 대안 스트림에서의 제 2 대응 블록에 대해 존재하는지의 여부를 결정하는 단계;
    상기 제 1 대안 스트림 및 상기 제 2 대안 스트림이 동일한 분해능인지를 결정하는 단계;
    상기 제 1 대안 스트림 및 상기 제 2 대안 스트림이 동일한 분해능이 아니라면 상기 모션 벡터를 스케일링하는 단계;
    상기 모션 벡터를 정제하는 단계; 및
    상기 제 1 대안 스트림에서 상기 비디오 프레임에서의 상기 제 1 블록을 인코딩할 때 상기 모션 벡터를 적용하는 단계를 더 포함하는, 소스 비디오를 인코딩하기 위한 방법.
  29. 제 21 항에 있어서,
    초기 인코딩 정보는 헤더 크기, 매크로블록 크기, 및 헤더 크기 대 매크로블록 크기의 상대 비율을 더 포함하는, 소스 비디오를 인코딩하기 위한 방법.
  30. 제 21 항에 있어서,
    초기 인코딩 정보는 가상 기준 디코더 데이터를 더 포함하는, 소스 비디오를 인코딩하기 위한 방법.
  31. 제 21 항에 있어서,
    상기 병렬 인코딩 프로세스들의 각각은 상이한 분해능에서 인코딩하는, 소스 비디오를 인코딩하기 위한 방법.
  32. 제 31 항에 있어서,
    상기 병렬 인코딩 프로세스들의 각각은 하나 이상의 대안적인 비디오 스트림들을 인코딩하며 병렬 인코딩 프로세스에 의해 인코딩된 상기 대안적인 비디오 스트림들의 각각은 상이한 비트레이트인, 소스 비디오를 인코딩하기 위한 방법.
  33. 제 21 항에 있어서,
    상기 병렬 인코딩 프로세스들의 각각은 상기 소스 비디오 데이터로부터 상기 복수의 대안적인 비디오 스트림들의 서브세트에서의 각각의 스트림으로 블록을 순차적으로 차례로 인코딩하는, 소스 비디오를 인코딩하기 위한 방법.
  34. 제 21 항에 있어서,
    부가적인 인코딩 정보는 레이트 왜곡 정보 및 양자화 파라미터들을 포함하는, 소스 비디오를 인코딩하기 위한 방법.
  35. 제 21 항에 있어서,
    상기 픽셀들의 블록들은 코딩 트리 유닛들인, 소스 비디오를 인코딩하기 위한 방법.
  36. 제 21 항에 있어서,
    상기 픽셀들의 블록들은 코딩 유닛들인, 소스 비디오를 인코딩하기 위한 방법.
  37. 제 21 항에 있어서,
    상기 픽셀들의 블록들은 변환 유닛들인, 소스 비디오를 인코딩하기 위한 방법.
  38. 제 21 항에 있어서,
    픽셀들의 블록들에 대한 상기 양자화 파라미터들은 픽셀들의 블록들에 대한 복잡도 측정치들을 사용하여 생성되는, 소스 비디오를 인코딩하기 위한 방법.
  39. 제 21 항에 있어서,
    픽셀들의 블록들에 대한 상기 양자화 파라미터들은 이전 생성된 양자화 파라미터들을 사용하여 생성되는, 소스 비디오를 인코딩하기 위한 방법.
  40. 제 21 항에 있어서,
    픽셀들의 블록들에 대한 상기 양자화 파라미터들은 왜곡 레이트 및 비트 레이트를 사용하여 생성되는, 소스 비디오를 인코딩하기 위한 방법.
KR1020157036373A 2013-05-24 2014-05-23 적응적 비트레이트 스트리밍을 위해 적응적 양자화를 갖고 다수의 비디오 스트림들을 인코딩하는 시스템들 및 방법들 KR101823321B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201361827512P 2013-05-24 2013-05-24
US61/827,512 2013-05-24
US13/931,449 US9350990B2 (en) 2013-02-28 2013-06-28 Systems and methods of encoding multiple video streams with adaptive quantization for adaptive bitrate streaming
US13/931,449 2013-06-28
PCT/US2014/039425 WO2014190308A1 (en) 2013-05-24 2014-05-23 Systems and methods of encoding multiple video streams with adaptive quantization for adaptive bitrate streaming

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020187002004A Division KR20180010343A (ko) 2013-05-24 2014-05-23 적응적 비트레이트 스트리밍을 위해 적응적 양자화를 갖고 다수의 비디오 스트림들을 인코딩하는 시스템들 및 방법들

Publications (2)

Publication Number Publication Date
KR20160021141A true KR20160021141A (ko) 2016-02-24
KR101823321B1 KR101823321B1 (ko) 2018-01-31

Family

ID=51934234

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020157036373A KR101823321B1 (ko) 2013-05-24 2014-05-23 적응적 비트레이트 스트리밍을 위해 적응적 양자화를 갖고 다수의 비디오 스트림들을 인코딩하는 시스템들 및 방법들
KR1020187002004A KR20180010343A (ko) 2013-05-24 2014-05-23 적응적 비트레이트 스트리밍을 위해 적응적 양자화를 갖고 다수의 비디오 스트림들을 인코딩하는 시스템들 및 방법들

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020187002004A KR20180010343A (ko) 2013-05-24 2014-05-23 적응적 비트레이트 스트리밍을 위해 적응적 양자화를 갖고 다수의 비디오 스트림들을 인코딩하는 시스템들 및 방법들

Country Status (5)

Country Link
EP (1) EP3005689A4 (ko)
JP (1) JP2016526336A (ko)
KR (2) KR101823321B1 (ko)
CN (1) CN105359511A (ko)
WO (1) WO2014190308A1 (ko)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10595070B2 (en) 2016-06-15 2020-03-17 Divx, Llc Systems and methods for encoding video content
US10728564B2 (en) 2013-02-28 2020-07-28 Sonic Ip, Llc Systems and methods of encoding multiple video streams for adaptive bitrate streaming
US10956766B2 (en) 2016-05-13 2021-03-23 Vid Scale, Inc. Bit depth remapping based on viewing parameters
US11025902B2 (en) 2012-05-31 2021-06-01 Nld Holdings I, Llc Systems and methods for the reuse of encoding information in encoding alternative streams of video data
US11272237B2 (en) 2017-03-07 2022-03-08 Interdigital Madison Patent Holdings, Sas Tailored video streaming for multi-device presentations
US11503314B2 (en) 2016-07-08 2022-11-15 Interdigital Madison Patent Holdings, Sas Systems and methods for region-of-interest tone remapping
US11611785B2 (en) 2011-08-30 2023-03-21 Divx, Llc Systems and methods for encoding and streaming video encoded using a plurality of maximum bitrate levels
US11765150B2 (en) 2013-07-25 2023-09-19 Convida Wireless, Llc End-to-end M2M service layer sessions
US11765406B2 (en) 2017-02-17 2023-09-19 Interdigital Madison Patent Holdings, Sas Systems and methods for selective object-of-interest zooming in streaming video
US11871451B2 (en) 2018-09-27 2024-01-09 Interdigital Patent Holdings, Inc. Sub-band operations in unlicensed spectrums of new radio
US11877308B2 (en) 2016-11-03 2024-01-16 Interdigital Patent Holdings, Inc. Frame structure in NR

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9350990B2 (en) 2013-02-28 2016-05-24 Sonic Ip, Inc. Systems and methods of encoding multiple video streams with adaptive quantization for adaptive bitrate streaming
CN106162174B (zh) * 2016-08-31 2019-10-29 北京奇艺世纪科技有限公司 一种视频多分辨率编码方法和装置
CN106961604B (zh) * 2017-03-07 2018-06-15 腾讯科技(深圳)有限公司 视频编码的码率分配、编码单元码率分配方法及装置
WO2018164930A1 (en) * 2017-03-08 2018-09-13 Vid Scale, Inc. Improving motion vector accuracy by sharing cross-information between normal and zoom views
US10771789B2 (en) * 2017-05-19 2020-09-08 Google Llc Complexity adaptive rate control
CN110213583B (zh) * 2018-02-28 2022-11-22 腾讯科技(深圳)有限公司 视频编码方法、系统、装置及计算机程序介质
KR102592036B1 (ko) 2019-02-25 2023-10-23 삼성전자 주식회사 사용자 중심 컨텐츠 스트리밍을 위한 방법 및 시스템
US10827181B1 (en) 2019-05-03 2020-11-03 At&T Intellectual Property I, L.P. Differential adaptive bitrate streaming based on scene complexity
US11936864B2 (en) 2019-11-07 2024-03-19 Bitmovin, Inc. Fast multi-rate encoding for adaptive streaming using machine learning
US11546401B2 (en) 2019-11-07 2023-01-03 Bitmovin, Inc. Fast multi-rate encoding for adaptive HTTP streaming

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5477272A (en) * 1993-07-22 1995-12-19 Gte Laboratories Incorporated Variable-block size multi-resolution motion estimation scheme for pyramid coding
JPH10262255A (ja) * 1997-03-18 1998-09-29 Toshiba Corp 画像符号化装置
IL122299A (en) * 1997-11-25 2003-11-23 Broadcom Corp Video encoding device
US6192154B1 (en) * 1998-01-26 2001-02-20 International Business Machines Corporation Two-pass encoding method of digital motion video sequences for constant-or variable bit rate
US7072393B2 (en) * 2001-06-25 2006-07-04 International Business Machines Corporation Multiple parallel encoders and statistical analysis thereof for encoding a video sequence
JP4104066B2 (ja) * 2003-02-26 2008-06-18 Kddi株式会社 ビデオ情報複数同時符号化装置
JP4196726B2 (ja) * 2003-05-14 2008-12-17 ソニー株式会社 画像処理装置および画像処理方法、記録媒体、並びに、プログラム
US20050232497A1 (en) * 2004-04-15 2005-10-20 Microsoft Corporation High-fidelity transcoding
US8135063B2 (en) * 2006-09-08 2012-03-13 Mediatek Inc. Rate control method with frame-layer bit allocation and video encoder
US8824546B2 (en) * 2007-06-19 2014-09-02 Vantrix Corporation Buffer based rate control in video coding
JP5038367B2 (ja) * 2009-07-27 2012-10-03 日本電信電話株式会社 スケーラブル動画像符号化方法、スケーラブル動画像符号化装置およびスケーラブル動画像符号化プログラム
US8705616B2 (en) * 2010-06-11 2014-04-22 Microsoft Corporation Parallel multiple bitrate video encoding to reduce latency and dependences between groups of pictures
US9021119B2 (en) * 2011-01-06 2015-04-28 Sonic Ip, Inc. Systems and methods for performing adaptive bitrate streaming based upon the delay of each stream and the channel rate
JP5810700B2 (ja) * 2011-07-19 2015-11-11 ソニー株式会社 画像処理装置及び画像処理方法
WO2013075101A1 (en) * 2011-11-18 2013-05-23 General Instrument Corporation An explicit way for signaling a collocated picture for high efficicency video coding (hevc)
US9357210B2 (en) * 2013-02-28 2016-05-31 Sonic Ip, Inc. Systems and methods of encoding multiple video streams for adaptive bitrate streaming

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11611785B2 (en) 2011-08-30 2023-03-21 Divx, Llc Systems and methods for encoding and streaming video encoded using a plurality of maximum bitrate levels
US11025902B2 (en) 2012-05-31 2021-06-01 Nld Holdings I, Llc Systems and methods for the reuse of encoding information in encoding alternative streams of video data
US10728564B2 (en) 2013-02-28 2020-07-28 Sonic Ip, Llc Systems and methods of encoding multiple video streams for adaptive bitrate streaming
US11765150B2 (en) 2013-07-25 2023-09-19 Convida Wireless, Llc End-to-end M2M service layer sessions
US10956766B2 (en) 2016-05-13 2021-03-23 Vid Scale, Inc. Bit depth remapping based on viewing parameters
US11483609B2 (en) 2016-06-15 2022-10-25 Divx, Llc Systems and methods for encoding video content
US11729451B2 (en) 2016-06-15 2023-08-15 Divx, Llc Systems and methods for encoding video content
US10595070B2 (en) 2016-06-15 2020-03-17 Divx, Llc Systems and methods for encoding video content
US11503314B2 (en) 2016-07-08 2022-11-15 Interdigital Madison Patent Holdings, Sas Systems and methods for region-of-interest tone remapping
US11949891B2 (en) 2016-07-08 2024-04-02 Interdigital Madison Patent Holdings, Sas Systems and methods for region-of-interest tone remapping
US11877308B2 (en) 2016-11-03 2024-01-16 Interdigital Patent Holdings, Inc. Frame structure in NR
US11765406B2 (en) 2017-02-17 2023-09-19 Interdigital Madison Patent Holdings, Sas Systems and methods for selective object-of-interest zooming in streaming video
US11272237B2 (en) 2017-03-07 2022-03-08 Interdigital Madison Patent Holdings, Sas Tailored video streaming for multi-device presentations
US11871451B2 (en) 2018-09-27 2024-01-09 Interdigital Patent Holdings, Inc. Sub-band operations in unlicensed spectrums of new radio

Also Published As

Publication number Publication date
CN105359511A (zh) 2016-02-24
EP3005689A1 (en) 2016-04-13
EP3005689A4 (en) 2017-01-11
KR101823321B1 (ko) 2018-01-31
JP2016526336A (ja) 2016-09-01
KR20180010343A (ko) 2018-01-30
WO2014190308A1 (en) 2014-11-27

Similar Documents

Publication Publication Date Title
KR101823321B1 (ko) 적응적 비트레이트 스트리밍을 위해 적응적 양자화를 갖고 다수의 비디오 스트림들을 인코딩하는 시스템들 및 방법들
US10728564B2 (en) Systems and methods of encoding multiple video streams for adaptive bitrate streaming
US9350990B2 (en) Systems and methods of encoding multiple video streams with adaptive quantization for adaptive bitrate streaming
US11025902B2 (en) Systems and methods for the reuse of encoding information in encoding alternative streams of video data
KR100987365B1 (ko) 비디오 프레임들로부터 키 프레임들의 선택
US20160073106A1 (en) Techniques for adaptive video streaming
CN101529912B (zh) 用于在多通路编码器中高效地进行第一通路编码的方法和设备
US20120195369A1 (en) Adaptive bit rate control based on scenes
US7302000B2 (en) Method and system for two-pass video encoding using sliding windows
EP2410752B1 (en) Image coding apparatus, image coding control method and image coding program
CN112272299A (zh) 一种视频编码的方法、装置、设备和存储介质
KR101602871B1 (ko) 데이터 부호화 방법 및 장치와 데이터 복호화 방법 및 장치
US20220345715A1 (en) Ai prediction for video compression
JP2002152735A (ja) 画像再符号化装置
Pedersen et al. Just In Time Joint Encoding of Multiple Video Streams

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
A107 Divisional application of patent
GRNT Written decision to grant