KR101436267B1 - 비디오 구성요소들을 멀티플렉싱하기 위한 데이터의 시그널링 - Google Patents

비디오 구성요소들을 멀티플렉싱하기 위한 데이터의 시그널링 Download PDF

Info

Publication number
KR101436267B1
KR101436267B1 KR1020137003808A KR20137003808A KR101436267B1 KR 101436267 B1 KR101436267 B1 KR 101436267B1 KR 1020137003808 A KR1020137003808 A KR 1020137003808A KR 20137003808 A KR20137003808 A KR 20137003808A KR 101436267 B1 KR101436267 B1 KR 101436267B1
Authority
KR
South Korea
Prior art keywords
components
component
properties
samples
transmitting
Prior art date
Application number
KR1020137003808A
Other languages
English (en)
Other versions
KR20130053444A (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 US12/986,028 external-priority patent/US9185439B2/en
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20130053444A publication Critical patent/KR20130053444A/ko
Application granted granted Critical
Publication of KR101436267B1 publication Critical patent/KR101436267B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/60Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client 
    • H04N21/63Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing
    • H04N21/637Control signals issued by the client directed to the server or network components
    • H04N21/6377Control signals issued by the client directed to the server or network components directed to server
    • 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/231Content storage operation, e.g. caching movies for short term storage, replicating data over plural servers, prioritizing data for deletion
    • 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/234Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs
    • H04N21/2343Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving reformatting operations of video signals for distribution or compliance with end-user requests or end-user device requirements
    • 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
    • H04N21/23614Multiplexing of additional data and video streams

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

서버는 오디오 및 비디오 구성요소들 자신들의 인코딩된 샘플들과는 독립적으로, 오디오 및 비디오 구성요소들의 특성들을 기술하는 정보를 클라이언트에 제공할 수도 있다. 클라이언트는 그 정보를 이용하여, 구성요소들을 선택한 후, 그 선택된 구성요소들을, 예컨대, 스트리밍 네트워크 프로토콜에 따라서 요청할 수도 있다. 일 예에서, 캡슐화된 비디오 데이터를 전송하는 장치는, 비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 결정하도록 구성된 프로세서로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 및 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 상기 프로세서; 및 특성들을 클라이언트 디바이스에 전송하고, 그 특성들을 전송한 후 클라이언트 디바이스로부터 구성요소들 중 적어도 하나의 구성요소들에 대한 요청을 수신하며, 요청에 응답하여 그 요청된 구성요소들을 클라이언트 디바이스에 전송하도록 구성된 하나 이상의 인터페이스들을 포함한다.

Description

비디오 구성요소들을 멀티플렉싱하기 위한 데이터의 시그널링{SIGNALING DATA FOR MULTIPLEXING VIDEO COMPONENTS}
본 출원은 2010년 7월 15일자에 출원된 미국 가특허출원 제 61/364,747호, 및 2010년 7월 21일자에 출원된 미국 가특허출원 번호 제 61/366,436호의 이익을 주장하며, 이의 양자가 본원에 각각의 전체로 참조로 포함된다.
본 개시물은 인코딩된 비디오 유닛의 저장 및 전송에 관한 것이다.
디지털 비디오 능력들은 디지털 텔레비전, 디지털 직접 브로드캐스트 시스템들, 무선 브로드캐스트 시스템들, 개인 휴대정보 단말기들 (PDAs), 랩탑 또는 데스크탑 컴퓨터들, 디지털 카메라들, 디지털 리코딩 디바이스들, 디지털 미디어 플레이어들, 비디오 게이밍 디바이스들, 비디오 게임 콘솔들, 셀룰러 또는 위성 무선 전화기들, 원격 화상회의 디바이스들, 및 기타 등등을 포함한, 광범위한 디바이스들에 포함될 수 있다. 디지털 비디오 디바이스들은 디지털 비디오 정보를 보다 효율적으로 송수신하기 위해서, 비디오 압축 기법들, 예컨대 MPEG-2, MPEG-4, ITU-T H.263 또는 ITU-T H.264/MPEG-4, 파트 10, AVC (고도 비디오 코딩) 에 의해 정의된 표준들, 및 이런 표준들의 확장판들에 설명된 비디오 압축 기법들을 구현한다.
비디오 압축 기법들은 비디오 시퀀스들에 고유한 리던던시를 감소시키거나 또는 제거하기 위해 공간 예측 및/또는 시간 예측을 수행한다. 블록-기반의 비디오 코딩에 있어, 비디오 프레임 또는 슬라이스는 매크로블록들로 파티셔닝될 수도 있다. 각각의 매크로블록은 더 파티셔닝될 수도 있다. 인트라-코딩된 (I) 프레임 또는 슬라이스에서 매크로블록들은 이웃하는 매크로블록들에 대한 공간 예측을 이용하여 인코딩된다. 인터-코딩된 (P 또는 B) 프레임 또는 슬라이스에서 매크로블록들은 동일한 프레임 또는 슬라이스에서 이웃하는 매크로블록들에 대한 공간 예측, 또는 다른 참조 프레임들에서의 매크로블록들에 대한 시간 예측을 이용할 수도 있다.
비디오 데이터가 인코딩된 후, 비디오 데이터는 송신 또는 저장을 위해 패킷화될 수도 있다. 비디오 데이터는 다양한 표준들 중 임의의 표준, 예컨대 ISO (International Organization for Standardization) 기반 미디어 파일 포맷 및 이의 확장판들, 예컨대 AVC 에 따르는 비디오 파일에 어셈블리될 수도 있다.
H.264/AVC 에 기초한 새로운 비디오 코딩 표준들을 개발하려는 노력들이 이루어져 왔다. 하나의 이런 표준이 스케일러블 비디오 코딩 (Scalable Video Coding; SVC) 표준이며, 이 표준은 H.264/AVC 에 대한 스케일러블 확장판이다. 또 다른 표준은 멀티-뷰 비디오 코딩 (MVC) 이며, 이 표준은 H.264/AVC 에 대한 멀티뷰 확장판이 되었다. MVC 의 합동 초안 (joint draft) 은 2008년 7월, 독일 (Germany), 하노버 (Hannover) 에서 개최되고 http://wftp3.itu.int/av-arch/jvt-site/2008_07_Hannover/JVT-AB204.zip 에서 입수가능한, 28차 JVT 회의, JVT-AB204, "Joint Draft 8.0 on Multiview Video Coding" 에 설명되어 있다. AVC 표준의 버전은 2009년 2월, CH, 제노바에서 개최되고 http://wftp3.itu.int/av-arch/jvt-site/2009_01_Geneva/JVT-AD007.zip 에서 입수가능한, 30차 JVT 회의, JVT-AD007, "Editors' draft revision to ITU-T Rec. H.264 | ISO/IEC 14496-10 Advanced Video Coding - in preparation for ITU-T SG 16 AAP Consent (in integrated form)" 에 설명되어 있다. 이 문서는 AVC 사양에 SVC 및 MVC 를 포함한다.
일반적으로, 본 개시물은 비디오 데이터를, 예컨대, 네트워크 스트리밍 프로토콜, 예컨대 하이퍼텍스트 전송 프로토콜 (HTTP) 스트리밍을 통해서 전송하는 기법들을 설명한다. 일부의 경우, 비디오 콘텐츠는 다수의 가능한 오디오 데이터와 비디오 데이터의 조합들을 포함할 수도 있다. 예를 들어, 콘텐츠는 (예컨대, 영어, 스페인어, 및 불어와 같은 상이한 언어들로 된) 다수의 가능한 오디오 트랙들, 및 (예컨대, 여러 비트레이트들, 여러 프레임 레이트들과 같은 상이한 코딩 파라미터들로 및/또는 다른 여러 특성들로 인코딩되는) 다수의 가능한 비디오 트랙들을 가질 수도 있다. 이들 트랙들은 오디오 구성요소들 및 비디오 구성요소들과 같은 구성요소들로서 지칭될 수도 있다. 구성요소들 각각의 조합은 멀티미디어 콘텐츠의 고유한 프리젠테이션 (presentation) 을 형성할 수도 있으며, 클라이언트에 서비스로서 전달될 수도 있다. 본 개시물의 기법들은 서버로 하여금 여러 표현들 (representations) 의 특성들 (characteristics), 또는 멀티미디어 구성요소들을, 단일 데이터 구조로 시그널링할 수 있도록 한다. 이러한 방법으로, 클라이언트 디바이스는 그 데이터 구조를 취출하고 예컨대, 스트리밍 네트워크 프로토콜에 따라서 그 서버에게 요청할 표현들 중 하나를 선택할 수도 있다.
일 예에서, 캡슐화된 비디오 데이터를 전송하는 방법은, 비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 클라이언트 디바이스에 전송하는 단계로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 구성요소들 사이의 의존성들 및 3D 표현을 위한 목표 출력 뷰들의 개수 중 적어도 하나를 포함하는, 상기 전송하는 단계, 특성들을 전송한 후에 구성요소들 중 적어도 하나의 구성요소들에 대한 요청을 클라이언트 디바이스로부터 수신하는 단계, 및 요청에 응답하여 그 요청된 구성요소들을 클라이언트 디바이스에 전송하는 단계를 포함한다.
또 다른 예에서, 캡슐화된 비디오 데이터를 전송하는 장치는, 비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 결정하도록 구성된 프로세서로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 및 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 상기 프로세서, 및 특성들을 클라이언트 디바이스에 전송하고, 그 특성들을 전송한 후 클라이언트 디바이스로부터 구성요소들 중 적어도 하나의 구성요소들에 대한 요청을 수신하고, 요청에 응답하여 그 요청된 구성요소들을 클라이언트 디바이스에 전송하도록 구성된 하나 이상의 인터페이스들을 포함한다.
또 다른 예에서, 캡슐화된 비디오 데이터를 전송하는 장치는, 클라이언트 디바이스에 비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 전송하는 수단으로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 및 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 상기 전송하는 수단, 특성들을 전송한 후에 구성요소들 중 적어도 하나의 구성요소들에 대한 요청을 클라이언트 디바이스로부터 수신하는 수단, 및 요청에 응답하여 그 요청된 구성요소들을 클라이언트 디바이스에 전송하는 수단을 포함한다.
또 다른 예에서, 컴퓨터 프로그램 제품은, 실행될 때, 캡슐화된 비디오 데이터를 전송하기 위해 소스 디바이스의 프로세서로 하여금, 프레임 레이트, 프로파일 표시자, 레벨 표시자, 및 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 클라이언트 디바이스에 전송하게 하고, 그 특성들을 전송한 후 클라이언트 디바이스로부터 구성요소들 중 적어도 하나의 구성요소들에 대한 요청을 수신하게 하며, 요청에 응답하여 그 요청된 구성요소들을 클라이언트 디바이스에 전송하게 하는 명령들을 포함하는 컴퓨터 판독가능 저장 매체를 포함한다.
또 다른 예에서, 캡슐화된 비디오 데이터를 수신하는 방법은, 비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 소스 디바이스에게 요청하는 단계로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 및 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 상기 요청하는 단계, 그 특성들에 기초하여 구성요소들 중 하나 이상을 선택하는 단계, 그 선택된 구성요소들의 샘플들을 요청하는 단계, 및 그 샘플들이 수신된 후 그 샘플들을 디코딩하여 제시하는 단계를 포함한다.
또 다른 예에서, 캡슐화된 비디오 데이터를 수신하는 장치는, 비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 소스 디바이스에게 요청하도록 구성된 하나 이상의 인터페이스들로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 및 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 상기 인터페이스들, 및 그 특성들에 기초하여 구성요소들 중 하나 이상을 선택하고, 하나 이상의 인터페이스들로 하여금 그 선택된 구성요소들의 샘플들에 대한 요청들을 소스 디바이스에게 서브밋 (submit) 하도록 구성된 프로세서를 포함한다.
또 다른 예에서, 캡슐화된 비디오 데이터를 수신하는 장치는, 비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 소스 디바이스에게 요청하는 수단으로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 및 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 상기 요청하는 수단, 그 특성들에 기초하여 구성요소들 중 하나 이상을 선택하는 수단, 그 선택된 구성요소들의 샘플들을 요청하는 수단, 및 그 샘플들이 수신된 후 그 샘플들을 디코딩하여 제시하는 수단을 포함한다.
또 다른 예에서, 컴퓨터 프로그램 제품은, 캡슐화된 비디오 데이터를 수신하기 위해 디바이스의 프로세서로 하여금, 프레임 레이트, 프로파일 표시자, 레벨 표시자, 및 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 소스 디바이스에게 요청하게 하고, 그 특성들에 기초하여 구성요소들 중 하나 이상을 선택하게 하고, 그 선택된 구성요소들의 샘플들을 요청하게 하며, 그 샘플들이 수신된 후 샘플들을 디코딩하여 제시하게 하는 명령들을 포함하는 컴퓨터 판독가능 저장 매체를 포함한다.
하나 이상의 예들의 세부 사항들이 첨부도면 및 아래의 상세한 설명에서 개시된다. 다른 피쳐들, 오브젝트들, 및 이점들 설명 및 도면들로부터, 그리고 청구항들로부터 명백히 알 수 있을 것이다.
도 1 은 오디오/비디오 (A/V) 소스 디바이스가 오디오 및 비디오 데이터를 A/V 목적지 디바이스에 전송하는 예시적인 시스템을 도시하는 블록도이다.
도 2 는 도 1 에 나타낸 A/V 소스 디바이스에 사용하기에 적합한 예시적인 캡슐화 유닛의 구성요소들을 도시하는 블록도이다.
도 3 은 도 1 의 시스템에 사용될 수 있는 예시적인 구성요소 맵 박스 및 예시적인 구성요소 배열 박스를 도시하는 개념도이다.
도 4 는 도 1 의 시스템에서 예시적인 비디오 구성요소 및 예시적인 오디오 구성요소를 멀티플렉싱하는 예시적인 타이밍 간격을 도시하는 개념도이다.
도 5 는 구성요소 맵 박스 및 구성요소 배열 박스들을 서버로부터 클라이언트에 제공하는 예시적인 방법을 도시하는 플로우차트이다.
일반적으로, 본 개시물은 비디오 콘텐츠를 전송하는 기법들을 설명한다. 본 개시물의 기법들은 비디오 콘텐츠를 스트리밍 프로토콜, 예컨대 하이퍼텍스트 전송 프로토콜 (HTTP) 스트리밍을 이용하여 전송하는 것을 포함한다. HTTP 가 예시의 목적들을 위해 설명되지만, 본 개시물에서 개시된 기법들은 다른 유형들의 스트리밍에 유용할 수도 있다. 비디오 콘텐츠는 ISO 기반 미디어 파일 포맷 또는 그의 확장판들과 같은 특정의 파일 포맷의 비디오 파일들로 캡슐화될 수도 있다. 비디오 콘텐츠는 또한 MPEG-2 전송 스트림으로 캡슐화될 수도 있다. 콘텐츠 서버는 상이한 유형들의 미디어 데이터 (예컨대, 오디오 및 비디오), 및 각각의 유형에 대한 여러 데이터의 세트들 (예컨대, 영어, 스페인어, 및 독일어 오디오와 같은 상이한 언어들 및/또는 MPEG-2, MPEG-4, H.264/AVC, 또는 H.265 와 같은 비디오에 대한 상이한 인코딩 유형들) 을 포함한, 멀티미디어 서비스를 제공할 수도 있다. 본 개시물의 기법들은 특히 각 유형의 데이터의 여러 유형들과 세트들이 결합되어 멀티플렉싱될 수 있는 방법을 시그널링하는데 유용할 수도 있다.
본 개시물은 장면의 관련된 멀티미디어 데이터의 컬렉션을 "콘텐츠" 로 지칭하며, 그 콘텐츠는 다수의 비디오 및/또는 오디오 콘텐츠 구성요소들을 포함할 수도 있다. 용어 "콘텐츠 구성요소" 또는 간단히 "구성요소" 는 비디오 또는 오디오 데이터와 같은, 단일 유형의 미디어를 지칭한다. 데이터의 구성요소는 데이터의 트랙, 서브-트랙, 또는 트랙들 또는 서브-트랙들의 컬렉션을 지칭할 수도 있다. 일반적으로, "트랙" 은 관련되는 인코딩된 화상 샘플들의 시퀀스에 대응할 수도 있으며, 한편 서브-트랙은 그 트랙의 인코딩된 샘플들의 서브세트에 대응할 수도 있다. 일 예로서, 콘텐츠 구성요소는 비디오 트랙, 오디오 트랙, 또는 영화 자막들에 대응할 수도 있다. HTTP 스트리밍 서버는 콘텐츠 구성요소들의 세트를 클라이언트에 그 클라이언트에 대한 서비스로서 전달할 수도 있다.
서비스는 그 콘텐츠에 이용가능한 모든 비디오 콘텐츠 구성요소들로부터의 하나의 비디오 콘텐츠 구성요소의 선택, 및 그 콘텐츠에 이용가능한 모든 오디오 콘텐츠 구성요소들로부터의 하나의 오디오 콘텐츠 구성요소의 선택에 대응할 수도 있다. 예를 들어, HTTP 서버에 저장된 콘텐츠로서, 풋볼 매칭 프로그램은, 다수의 비디오 콘텐츠 구성요소들, 예컨대, 상이한 비트레이트들 (512 kbps 또는 1 Mbps) 또는 상이한 프레임 레이트들, 및 다수의 오디오 구성요소들, 예컨대, 영어, 스페인어, 또는 중국어를 가질 수도 있다. 따라서, 클라이언트에 제공되는 서비스는 하나의 비디오 구성요소 및 하나의 오디오 구성요소, 예컨대, 512 kbps 비디오와 함께 스페인어 오디오의 선택에 대응할 수도 있다. 비디오 구성요소와 오디오 구성요소의 조합은 또한 콘텐츠의 표현 (representation) 으로서 지칭될 수도 있다.
HTTP 스트리밍에서, 일 예로서, 클라이언트 디바이스는 데이터에 대한 하나 이상의 요청들을 HTTP 취득 요청들 (HTTP Get requests) 또는 부분 취득 요청들 (partial Get requests) 의 형태로 발생시킨다. HTTP 취득 요청은 파일의 URL (uniform resource locator) 또는 URN (uniform resource name) 을 규정한다. HTTP 부분 취득 요청은 파일의 URL 또는 URN 뿐만 아니라, 취출할 파일의 바이트 범위를 규정한다. HTTP 스트리밍 서버는 HTTP 부분 취득 요청의 경우에 그 파일을 요청된 URL 또는 URN, 또는 파일의 요청된 바이트 범위에서 출력함으로써 (예컨대, 전송함으로써) HTTP 취득 요청에 응답할 수도 있다. 클라이언트가 HTTP 취득 및 부분 취득 요청들을 적절하게 발생하도록 하기 위해서, 서버는, 클라이언트가 원하는 콘텐츠 구성요소들을 선택하여 그 구성요소들에 대한 HTTP 취득 및/또는 부분 취득 요청들을 적절히 발생할 수 있도록, 콘텐츠 구성요소들에 대응하는 파일들의 URLs 및/또는 URNs 에 관한 정보 뿐만 아니라, 그 구성요소들의 특성들을 클라이언트에 제공할 수도 있다.
본 개시물의 기법들은 콘텐츠 구성요소들의 특성들을 시그널링하는 것, 예컨대, 여러 콘텐츠 구성요소들에 대한 데이터의 위치들을 시그널링하는 것을 포함한다. 이러한 방법으로, 클라이언트 디바이스는 콘텐츠의 표현을 선택하고 여러 유형들의 콘텐츠 구성요소들의 조합들에 대한 요청들을 발생할 수도 있다. 예를 들어, 상기 예에 따르면, 사용자는 512 kbps 비디오를 스페인어 오디오와 함께 시청하기로 선택할 수도 있다. 시청자의 클라이언트 디바이스는 이들 2개의 구성요소들에 대한 요청을 서브밋할 수도 있다. 즉, 클라이언트 디바이스는 512 kbps 비디오 및 스페인어 오디오의 데이터에 대한 위치들을 서버로부터의 시그널링된 데이터를 이용하여 결정하고, 그 후 이들 콘텐츠 구성요소들에 대응하는 데이터에 대한 요청을 발생할 수도 있다. 이 요청에 응답하여, 서버는 이들 2개의 구성요소들을 클라이언트 디바이스에 대한 서비스로서 전달할 수도 있다.
ISO 기반 미디어 파일 포맷은, 표현을 위한 타이밍된 미디어 정보를 미디어의 상호교환, 관리, 편집, 및 표현을 용이하게 하는 유연한 확장가능한 포맷으로 포함하도록, 설계된다. ISO 기반 미디어 파일 포맷 (ISO/IEC 14496-12:2004) 은 시간-기반의 미디어 파일들에 대한 일반 구조를 정의하는 MPEG-4 파트-12 에 규정되어 있다. H.264/MPEG-4 AVC 비디오 압축에 대한 지원이 정의된 AVC 파일 포맷 (ISO/IEC 14496-15), 3GPP 파일 포맷, SVC 파일 포맷, 및 MVC 파일 포맷과 같은 집단 (family) 에서 다른 파일 포맷들에 대한 기초로서 사용된다. 3GPP 파일 포맷 및 MVC 파일 포맷은 AVC 파일 포맷의 확장판들이다. ISO 기반 미디어 파일 포맷은 예컨대, 오디오-시각적 표현들과 같은, 미디어 데이터의 타이밍된 시퀀스들에 대한 타이밍, 구조, 및 미디어 정보를 포함한다. 파일 구조는 객체지향적일 수도 있다. 파일은 기본 오브젝트들로 매우 단순하게 분해될 수 있으며, 그들의 유형으로부터 오브젝트들의 구조가 암시된다.
ISO 기반 미디어 파일 포맷 (및 이의 확장판들) 에 따르는 파일들은 일련의 오브젝트들, 소위 "박스들" 로서 형성될 수도 있다. ISO 기반 미디어 파일 포맷의 데이터가 박스들 내에 포함될 수도 있으므로, 그 파일 내에 어떤 다른 데이터도 포함될 필요가 없고 그 파일 내 박스들의 외부에 데이터가 존재할 필요가 없다. 이것은 특정의 파일 포맷에 의해 요구되는 임의의 초기 서명 (initial signature) 을 포함한다. "박스" 는 고유한 유형 식별자 및 길이에 의해 정의되는 객체지향적인 빌딩 (building) 블록일 수도 있다. 일반적으로, 표현은 하나의 파일에 포함되며, 미디어 표현이 자체-포함된다 (self-contained). 영화 컨테이너 (영화 박스) 는 미디어의 메타데이터를 포함할 수도 있으며, 비디오 및 오디오 프레임들은 그 미디어 데이터 컨테이너에 포함될 수도 있으며 다른 파일들에 있을 수 있다.
본 개시물의 기법들에 따르면, 서버는 여러 콘텐츠 구성요소들의 특성들을 시그널링하는 구성요소 맵 박스를 제공할 수도 있다. 구성요소 맵 박스는 여러 콘텐츠 구성요소들에 대한 인코딩된 샘플들을 저장하는 파일들과는 별개인 파일에 저장될 수도 있는 데이터 구조에 대응할 수도 있다. 구성요소 맵 박스는 비디오 데이터에 대해 그 코딩된 비디오 샘플들을 실제로 포함하는 파일들 외부에 저장되는 데이터 구조로 종래 시그널링되지 않은 콘텐츠 구성요소의 특성들을 시그널링할 수도 있다. 이런 데이터 구조는, 구성요소 맵 박스에서와 같이, 또한 HTTP 스트리밍의 매니페스트 (manifest) 파일 또는 미디어 프리젠테이션 설명 (Media Presentation Description) 으로 시그널링될 수도 있다.
이 특성들은 예를 들어, 프레임 레이트, 프로파일 표시자, 레벨 표시자, 및 구성요소들 사이의 의존성들을 포함할 수도 있다. 구성요소 맵 박스에 의해 시그널링되는 특성들은 또한 3D 비디오에 대한 3차원의 특성들, 예컨대 뷰들의 개수 및 뷰들 (예컨대, 스테레오 쌍을 형성하는 2개의 뷰들) 사이의 관계들을 포함할 수도 있다. 구성요소 맵 박스는 콘텐츠 구성요소에 대한 비트레이트 및 해상도와 같은, 콘텐츠 구성요소에 대한 종래의 시그널링된 특성들에 더해, 이들 특성들을 시그널링할 수도 있다. 구성요소 맵 박스는 또한 콘텐츠의 서비스를 고유하게 식별하는 서비스 식별자 (예컨대, content_id 값) 를 제공할 수도 있다. 서비스의 구성요소 각각은 서비스 식별자와 연관될 수도 있다.
소스 디바이스는 콘텐츠가 캡슐화되는 방법에 상관없이, 비디오 콘텐츠에 대한 구성요소 맵 박스를 제공하도록 구성될 수도 있다. 즉, 소스 디바이스는 비디오 콘텐츠가 AVC (고도 비디오 코딩) 파일 포맷, 스케일러블 비디오 코딩 (SVC) 파일 포맷, 멀티뷰 비디오 코딩 (MVC) 파일 포맷, 3GPP (Third Generation Partnership Project) 파일 포맷, 또는 다른 파일 포맷들에 따라서 캡슐화되는지 여부에 상관 없이, 구성요소 맵 박스를 클라이언트 디바이스들에 제공할 수도 있다. 구성요소 맵 박스는 특정의 콘텐츠에 대한 콘텐츠 구성요소들의 특성들을 시그널링할 수도 있다. 일부 예들에서, 각각의 구성요소는 파일의 비디오 또는 오디오 트랙, 일련의 작은 파일들 내의 트랙, 트랙 단편들, 트랙들의 조합들 (예컨대, SVC 또는 MVC 에서), 또는 트랙의 서브세트에 대응할 수도 있다.
일반적으로, 구성요소 맵 박스는 기술하는 비디오 데이터와 개별적으로 저장될 수도 있다. 일부 예들에서, 구성요소 맵 박스는 별개의 파일에 포함되거나 또는 콘텐츠 구성요소들을 포함하는 하나의 영화 파일의 부분, 예컨대, mp4 또는 3GP 파일, 또는 본 개시물에서 설명하는 기능을 지원하는 다른 파일로서 포함될 수도 있다. 구성요소 맵 박스의 위치는 캡슐화하는 파일 유형에 따라 변할 수 있다. 더욱이, 구성요소 맵 박스는 ISO 기반 미디어 파일 포맷에 대한 확장판 또는 그의 확장판들 중 하나 이상이 될 수도 있다. 이런 데이터 구조는, 구성요소 맵 박스에서와 같이, 또한 HTTP 스트리밍의 매니페스트 파일 또는 미디어 프리젠테이션 설명으로 시그널링될 수도 있다.
디폴트로, 구성요소 맵 박스는 연관되는 콘텐츠의 전체 지속기간에 적용될 수도 있다. 그러나, 일부의 경우, 구성요소 맵 박스는 오직 콘텐츠의 특정의 타이밍 간격에만 적용될 수도 있다. 이런 경우, 서버는 다수의 구성요소 맵 박스들을 제공하고, 그 구성요소 맵 박스가 대응하는 타이밍 간격 각각 동안 시그널링할 수도 있다. 일부 예들에서, 서버가 다수의 구성요소 맵 박스들을 제공할 때, 서버는 정적 모드로 구성될 수도 있으며, 이때 구성요소 맵 박스들은 동일한 파일에서 타이밍 간격 순서로 인접하게 배열된다. 일부 예들에서, 서버는 동적 모드로 구성될 수도 있으며, 이때 구성요소 맵 박스들은 별개의 파일들로 및/또는 서로 불연속적인 위치들에 제공될 수도 있다. 동적 모드는 라이브 스트리밍에 이점들을 제공할 수도 있으며, 한편 정적 모드는 더 큰 시간 범위에서 시도하는 것에 대해 이점들을 제공할 수도 있다.
본 개시물은 또한 그 파일의 트랙들과 여러 구성요소들 사이의 관계들을 시그널링하기 위해 각각의 파일 내에 포함될 수도 있는 구성요소 배열 박스를 제공한다. 예를 들어, 2개 이상 트랙들에 대한 데이터를 포함하는 파일에서 구성요소 배열 박스는 그 파일 내 트랙들에 대한 트랙 식별자들과, 대응하는 콘텐츠 구성요소들에 대한 구성요소 식별자들 사이의 관계를 시그널링할 수도 있다. 이러한 방법으로, 클라이언트 디바이스는 먼저 서버 디바이스로부터 구성요소 맵 박스를 취출할 수도 있다. 클라이언트 디바이스는 그 후, 구성요소 맵 박스에 의해 시그널링된 특성들에 기초하여 표현의 하나 이상의 구성요소들을 선택할 수도 있다. 그 후, 클라이언트 디바이스는 구성요소 맵 박스에 의해 기술되는 구성요소들을 저장하고 있는 파일들로부터 구성요소 배열 박스들을 취출할 수도 있다. 특정의 구성요소에 대한 단편들의 바이트 범위들과 같은 세그먼트 정보를 포함할 수도 있는 구성요소 맵 박스를 이용하여, 클라이언트는 그 선택된 구성요소들의 단편들이 그 파일들에서 저장되어 있는 장소를 결정할 수도 있다. 이 결정에 기초하여, 클라이언트는 그 선택된 구성요소들에 대응하는 트랙들 또는 서브-트랙들의 단편들에 대한 요청들 (예컨대, HTTP 취득 또는 부분 취득 요청들) 을 서브밋할 수도 있다.
이러한 방법으로, 어떻게 각각의 파일 또는 각각의 트랙이 구성요소 맵 박스에서의 콘텐츠 구성요소와 연관되는지에 관한 정보를 시그널링하는 대신, 이 정보는 각각의 파일들과 연관되는 구성요소 배열 박스들에 저장될 수도 있다. 구성요소 맵 박스는 콘텐츠의 모든 구성요소들의 구성요소 식별자들 (예컨대, component_id 값들) 을 시그널링할 수도 있으며, 한편 구성요소 배열 박스는 그 구성요소 배열 박스에 대응하는 파일 내에 저장된 구성요소들의 component_id 값들과 component_id 값들과 연관되는 content_id 값들 사이의 관계들을 시그널링할 수도 있다. 구성요소 맵 박스는 또한, 일부의 경우, 세그먼트 정보를 저장할 수도 있다. 또, 구성요소 맵 박스는 구성요소 맵 박스가 세그먼트 정보를 포함하는지 여부를 나타내는 플래그를 포함할 수도 있다. 클라이언트 디바이스는, 구성요소 맵 박스가 세그먼트 정보를 포함하지 않는 경우 그 표현의 미디어 데이터가 의존적인 표현들에 포함된다고 가정하도록, 구성될 수도 있다.
서버는 고유한 component_id 값들을 미디어의 유형 각각에 할당함으로써, component_id 값이 동일한 서비스에서 임의의 비디오 또는 오디오 구성요소에 고유한 것으로 보증할 수도 있다. 특정의 유형의 구성요소들은 서로 전환할 수도 있다. 즉, 클라이언트는 여러 비디오 구성요소들 사이에, 예컨대, 변하는 네트워크 조건들 또는 다른 인자들에 응답하여, 전환할 수도 있다. 클라이언트는 각각의 가용 유형의 구성요소들을 요청할 필요가 없다. 예를 들어, 클라이언트는 폐쇄 자막 구성요소들을 포함하는 콘텐츠에 대한 자막들을 요청하는 것을 생략할 수도 있다. 더욱이, 일부의 경우, 동일한 미디어 유형의 다수의 구성요소들이 예컨대, 3D 비디오 또는 화면 속 화면 (picture in picture; PIP) 을 지원하기 위해, 요청될 수도 있다. 서버는 특정의 기능들, 예컨대 화면 속 화면을 지원하기 위해 추가적인 시그널링을 제공할 수도 있다.
예를 들어, 서버는 구성요소가 화면 속 화면 데이터의 설명을 포함하고 있는지 여부를 나타내는 플래그를 제공할 수도 있다. 그 구성요소가 화면 속 화면 데이터를 포함하고 있다고 그 플래그가 나타내면, 구성요소 맵 박스는 화면 속 화면 디스플레이를 형성하는데 함께 나타낼 표현의 식별자를 현재의 표현과 함께 제공할 수도 있다. 하나의 표현은 큰 화상에 대응할 수도 있지만, 다른 하나의 표현은 그 큰 화상에 오버레이된 더 작은 화상에 대응할 수도 있다.
위에서 언급한 바와 같이, 서버는 구성요소 배열 박스를 하나 이상의 구성요소들에 대응하는 인코딩된 샘플들을 포함하는 각각의 파일에 제공할 수도 있다. 구성요소 배열 박스는 그 파일의 헤더 데이터에 제공될 수도 있다. 구성요소 배열 박스는 그 파일에 포함된 구성요소들 및 구성요소들이 예컨대, 그 파일 내에 트랙들로서 저장되는 방법을 나타낼 수도 있다. 구성요소 배열 박스는 그 파일에서 대응하는 트랙의 구성요소 식별자 값과 트랙 식별자 값들 사이에 맵핑을 제공할 수도 있다.
구성요소 맵 박스는 또한 콘텐츠 구성요소들 사이의 의존성들을 시그널링할 수도 있으며, 여기서, 그 시그널링된 의존성들은 액세스 유닛 내부의 콘텐츠 구성요소들의 디코딩 순서에 대한 현재의 콘텐츠 구성요소와 함께, 의존성들의 순서를 포함할 수도 있다. 현재의 표현에 대한 의존성들에 관한 시그널링된 정보는 현재의 표현 및/또는 그 현재의 표현이 의존하는 표현들에 의존하는 표현들 중 어느 한쪽 또는 양자를 포함할 수도 있다. 또한, 시간 차원에서 콘텐츠 구성요소들 사이의 의존성들이 존재할 수도 있다. 그러나, 각각의 비디오 구성요소에 대한 temporal_id 값들을 간단히 나타내는 것은, 전체적으로 독립적인 대안적 비디오 비트스트림들에서 시간 하위 계층들이 반드시 서로에 대한 프레임 레이트들의 맵핑을 가질 필요가 없기 때문에, 충분하지 않을 지도 모른다. 예를 들어, 하나의 비디오 구성요소는 24 fps 의 프레임 레이트와, 0 인 temporal_id 를 가질 수도 있으며, 12 fps 의 서브-계층 (2개의 시간 계층들을 가정하면) 을 가질 수도 있으며, 한편, 또 다른 비디오 구성요소는 30 fps 의 프레임 레이트와, 0 인 temporal_id 를 가질 수도 있으며, 7.5 fps 의 하위 계층 (3개의 시간 계층들을 가정하면) 을 가질 수도 있다. 따라서, 서버는 2개의 비디오 구성요소들의 의존성이 시그널링될 때 시간 계층 차이를 나타낼 수도 있다.
일반적으로, 구성요소의 시그널링된 특성들은 예를 들어, 평균 비트레이트, 최대 비트레이트 (예컨대, 1초 이상), 해상도, 프레임 레이트, 다른 구성요소들에 대한 의존성, 및/또는 예컨대, 멀티뷰 비디오에 대한 예약된 확장판들을 포함할 수도 있으며, 이 확장판들은 출력용으로 목표된 뷰들의 개수 및 그들 뷰들에 대한 식별자들을 포함할 수도 있다. 콘텐츠 구성요소를 형성하는 일련의 미디어 단편들에 관한 정보가 또한 시그널링될 수도 있다. 각각의 미디어 단편에 대한 시그널링된 정보는 미디어 단편의 바이트 오프셋, 그 미디어 단편에서 제 1 샘플의 디코딩 시간, 그 단편에서 랜덤 액세스 포인트 및 그의 디코딩 시간과 표현 시간, 및/또는 그 단편이 콘텐츠 구성요소의 새로운 세그먼트 (따라서, 상이한 URL) 에 속하는지 여부를 나타내는 플래그를 포함할 수도 있다.
일부의 경우, 오디오 데이터의 단편들은 비디오 데이터의 단편들과 시간적으로 정렬된다. 본 개시물은 특정의 시간 간격에 기초하여 다수의 콘텐츠 구성요소들을 멀티플렉싱하는 기법들을 제공한다. 구성요소 맵 박스는 지원되는 멀티플렉싱 간격들의 리스트, 또는 멀티플렉싱 간격들의 범위를 제공할 수도 있다. 멀티플렉싱 간격은 T 로서 나타낼 수도 있으며, 멀티플렉스된 오디오 및 비디오 데이터의 시간 길이를 나타낼 수도 있다. 요청되는 다음 시간 간격이 [n*T, (n+1)*T] 인 것으로 가정한다. 클라이언트 디바이스는 (n*T) <= t <= ((n+1)*T) 의 범위에서 시작 시간 (t) 을 갖는 각각의 콘텐츠 구성요소에 어떤 단편이 있는지 여부를 결정할 수도 있다. 있다면, 클라이언트 디바이스는 그 단편을 요청할 수도 있다. n*T 이전에 시작하는 단편들은 현재의 멀티플렉싱 간격 n*T 이전에 요청될 수도 있으며, 반면 간격 (n+1)*T 이후에 시작하는 단편들은 그 후의 멀티플렉싱 간격에서 요청될 수도 있다. 이러한 방법으로, 서로 또는 요청된 멀티플렉싱 간격으로 정렬하는 단편 경계들을 갖지 않는 콘텐츠 구성요소들은 그럼에도 불구하고, 멀티플렉싱될 수도 있다. 더욱이, 멀티플렉싱 간격은 서비스 동안 콘텐츠 구성요소들의 멀티플렉싱을 방해하지 않고 변할 수도 있다.
클라이언트 디바이스는 멀티플렉싱 간격을 변경함으로써 변하는 네트워크 조건들에 적응하도록 구성될 수도 있다. 예를 들어, 대역폭이 상대적으로 더 많이 이용가능하게 될 때, 클라이언트 디바이스는 멀티플렉싱 간격을 증가시킬 수도 있다. 한편, 대역폭이 상대적으로 덜 이용가능하게 될 때, 클라이언트 디바이스는 멀티플렉싱 간격을 감소시킬 수도 있다. 클라이언트 디바이스는 추가로 어떤 타이밍 간격 및 순간 비트레이트에 기초하여 멀티플렉스된 단편들을 요청하도록 구성될 수도 있다. 클라이언트 디바이스는 순간 비트레이트를 단편 내 바이트들의 개수 및 단편의 시간 지속기간에 기초하여 계산할 수도 있다.
일부 예들에서, 서버는 시간 스플리싱 (splicing) 을 지원하기 위해, 동일한 구성요소 식별자를 2개의 연속적인 미디어 표현들, 예컨대, 순차적인 타이밍 정보를 갖는 2개의 비디오 파일들에 할당할 수도 있다. 위에서 언급한 바와 같이, 일부의 경우, 표현들은 상이한 파일들에 저장된 콘텐츠 구성요소들을 포함할 수도 있다. 따라서, 클라이언트 디바이스는 그 콘텐츠의 특정의 시간 간격 동안 데이터를 취출하기 위해 다수의 취득 또는 부분 취득 요청들을 서브밋할 필요가 있을 수도 있다. 즉, 클라이언트는 그 표현에 대한 콘텐츠 구성요소들을 저장하는 여러 파일들을 참조하는 다수의 취득 또는 부분 취득 요청들을 서브밋할 필요가 있을 수도 있다. 다수의 요청들이 어떤 시간 간격에서 멀티플렉싱되는 데이터를 취득하는 것이 요구될 때, 클라이언트 디바이스는 또 다른 시간 간격에서 어떤 데이터도 현재의 시간 간격에서 원하는 미디어 단편 데이터 사이에서 수신되지 않는 것을 보장하기 위해 그 요청들을 파이프라인으로 형성할 수도 있다.
이러한 방법으로, 다수의 파일들에서 구성요소들을 갖는 미디어 콘텐츠는 네트워크 스트리밍 컨텍스트, 예컨대 HTTP 스트리밍으로 지원될 수 있다. 즉, 미디어 콘텐츠의 표현은 하나의 파일에서의 한 구성요소 및 별개의 파일에서의 또 다른 구성요소를 포함할 수도 있다. 서버는 상이한 파일들에서의 구성요소들의 특성들을 단일 데이터 구조로, 예컨대, 구성요소 맵 박스로 시그널링할 수도 있다. 이것은 클라이언트가 임의의 목표 콘텐츠 구성요소에 대한, 또는 목표 콘텐츠 구성요소의 임의의 지속기간에 대한 요청들을 할 수 있도록 할 수도 있다.
본 개시물의 구성요소 맵 박스 및 구성요소 배열 박스에 유사한 데이터 구조들의 사용은 또한 다른 이점들을 제공할 수도 있다. 예를 들어, 상이한 구성요소들에서 2개의 미디어 트랙들은 각각의 구성요소들 내에 동일한 트랙 식별자 (track_id) 값을 가질 수도 있다. 그러나, 위에서 언급한 바와 같이, 구성요소 맵 박스는 구성요소들을 트랙 식별자 값과 동일하지 않은 구성요소 식별자를 이용하여 분리하는 것을 지칭할 수도 있다. 각각의 파일이 구성요소 식별자들을 트랙 식별자들에 맵핑하는 구성요소 배열 박스를 포함할 수도 있기 때문에, 구성요소 맵 박스는 구성요소들을 그 트랙 식별자 값과는 독립적인 구성요소 식별자를 이용하여 지칭할 수도 있다. 구성요소 배열 박스는 또한 예컨대, 콘텐츠 전달 네트워크 (CDN) 서버가 많은 상이한 콘텐츠에 대응하는 다수의 파일들을 저장할 때 어느 파일이 어느 콘텐츠에 대응하는지를 규정하는 효율적인 메커니즘을 제공할 수도 있다.
더욱이, 본 개시물의 기법들은 상이한 네트워크 버퍼 사이즈들을 가진 클라이언트들을 지원할 수도 있다. 즉, 일부 클라이언트들은 예컨대, 네트워크 조건들, 클라이언트 능력들, 및 기타 등등으로 인해, 그 밖의 다른 버퍼들과는 상이한 사이즈의 버퍼들을 요구할 수도 있다. 따라서, 일부의 경우, 특정의 표현에 대한 구성요소들의 다수의 유형들이 상이한 시간 간격들로 멀티플렉싱되는 것을 필요로 할 수도 있다. 본 개시물은 서버가 상이한 가능한 멀티플렉싱 시간 간격들을 시그널링하고, 따라서, 요청되는 데이터의 사이즈들에서의 변동, 따라서, 예컨대, HTTP 를 이용하는 클라이언트와 서버 사이의 라운드 트립 시간의 관점에서 송신의 성능을 고려하는 기법들을 제공한다.
더욱이, 일부의 경우, 하나의 파일에서의 콘텐츠 구성요소가 하나 이상의 다른 파일들에서의 여러 다른 콘텐츠 구성요소들에 의존할 수도 있다. 이런 의존성은 액세스 유닛 내에서 일어날 수도 있다. 일 예로서, 비디오 콘텐츠 구성요소는 CIF (common interface format) 계층 및 QCIF (quarter common interface format) 계층에 의존하는 CIF SVC 향상 계층에 대응할 수도 있다. 양자의 CIF 및 QCIF 계층들은 하나의 파일에 있을 수도 있는 반면, 4CIF 향상 계층은 또 다른 파일에 있을 수도 있다. 본 개시물의 기법들은 클라이언트의 디코더가 샘플들을 이들 계층들로부터 적합한 디코딩 순서로, 그 의존성들에 기초하여 수신할 수 있게, 클라이언트가 CIF, QCIF, 및 4CIF 계층들에 대한 데이터를 적절하게 요청하는 것을 보장할 수도 있다.
일부 예들에서, 동적 서버는 콘텐츠 구성요소들을 함께 멀티플렉싱하는 파일들을 동적으로 생성하는데 사용될 수도 있다. 예를 들어, 동적 서버는 구성요소들을 함께 멀티플렉싱하여, 현재의 시간 간격에 대한 데이터를 동적 파일의 연속적인 부분으로 만들기 위해, 공통 게이트웨이 인터페이스 (CGI) 서비스에 따르는 방법들을 지원할 수도 있다. CGI 는 http://tools.ietf.org/html/rfc3875 에서 입수가능한 Comment 3875 의 요구서 (Request for Comment 3875) 에 설명되어 있다. CGI 와 같은 서비스를 이용하여, 서버는 콘텐츠의 표현에 대한 여러 콘텐츠 구성요소들의 조합을 포함하는 파일을 동적으로 생성할 수도 있다.
표현 (모션 시퀀스) 은 여러 파일들 내에 포함될 수도 있다. 타이밍 및 프레이밍 (위치 및 사이즈) 정보는 일반적으로 ISO 기반 미디어 파일 내에 있으며, 보조 파일들은 본질적으로 임의의 포맷을 이용할 수도 있다. 이 표현은 그 표현을 포함하는 시스템에 '로컬' 일 수도 있거나 또는 네트워크 또는 다른 스트림 전달 메커니즘을 통해서 제공될 수도 있다.
파일들은 로직 구조, 시간 구조, 및 물리적인 구조를 가질 수도 있으며, 이들 구조들은 쌍으로 될 것이 요구되지는 않는다. 파일의 로직 구조는 결과적으로 시간-평행 (time-parallel) 트랙들의 세트를 포함하는 영화 또는 비디오 클립 (잠재적으로는, 비디오 및 오디오 데이터 양자를 포함함) 일 수도 있다. 파일의 시간 구조는 그 트랙들이 샘플들의 시퀀스들을 시간에 맞춰 포함하고 그들 시퀀스들이 옵션적인 편집 리스트들에 의해 전체 영화의 타임라인에 맵핑되는 것일 수도 있다. 파일의 물리적인 구조는 미디어 데이터 샘플들 자체로부터 로직, 시간, 및 구조적 분해에 요구되는 데이터를 분리할 수도 있다. 이 구조적 정보는 영화 박스에 집중될 수도 있으며, 어쩌면 영화 단편 박스들에 의해 시간에 맞춰 확장될 수도 있다. 영화 박스는 샘플들의 로직 및 타이밍 관계들을 문서화할 수도 있으며, 또한 그들이 위치되는 포인터들을 포함할 수도 있다. 그들 포인터들은 예컨대, URL 에 의해 참조되는 동일한 파일 또는 또 다른 파일을 가리킬 수도 있다.
각각의 미디어 스트림은 그 미디어 유형 (오디오, 비디오 등) 에 특수화된 트랙에 포함될 수도 있으며 샘플 엔트리에 의해 추가로 파라미터화될 수도 있다. 샘플 엔트리는 정확한 미디어 유형 (스트림을 디코딩하는데 필요로 하는 디코더의 유형) 의 '이름' 및 요구되는 그 디코더의 임의의 파라미터화를 포함할 수도 있다. 이름은 또한 4-캐릭터 (character) 코드의 유형, 예컨대, "moov", 또는 "trak" 를 취할 수도 있다. MPEG-4 미디어 뿐만 아니라, 이 파일 포맷 패밀리를 이용하는 다른 조직들에 의해 사용되는 미디어 유형들에 대해, 정의된 샘플 엔트리 포맷들이 존재한다.
메타-데이터에 대한 지원은 일반적으로 2가지 형태들을 취한다. 첫째, 타이밍된 메타-데이터가 적합한 트랙에 저장되고, 원하는 바에 따라, 기술하고 있는 그 미디어 데이터와 동기화될 수도 있다. 둘째, 영화 또는 개개의 트랙에 부수하는 비-타이밍된 메타-데이터에 대한 일반적 지원이 있을 수도 있다. 구조적인 지원이 일반적이며, 그 파일 또는 또 다른 파일 내 다른 장소에, 미디어 데이터, 즉, 코딩된 비디오 화상들의 저장과 유사한 방법으로, 메타-데이터 리소스들의 저장을 가능하게 한다. 게다가, 이들 리소스들은 명명될 수도 있으며, 보호될 수도 있다.
용어 "프로그레시브 다운로드 (progressive download)" 는 통상 HTTP 프로토콜을 이용한, 서버로부터 클라이언트로의 디지털 미디어 파일들의 전송을 기술하기 위해 사용된다. 컴퓨터로부터 개시될 때, 컴퓨터는 다운로드가 완료되기 전에 미디어의 플레이백을 시작할 수도 있다. 스트리밍 미디어와 프로그레시브 다운로드 사이의 한가지 차이는 디지털 미디어 데이터가 디지털 미디어에 액세스하는 최종 사용자 디바이스에 의해 수신되어 저장되는 방법에 있다. 프로그레시브 다운로드 플레이백이 가능한 미디어 플레이어는, 웹 서버로부터 다운로드될 때, 영향을 받지 않은 파일의 헤더에 위치된 메타데이터 및 디지털 미디어 파일의 로컬 버퍼에 의존한다. 지정된 양의 버퍼된 데이터가 로컬 플레이백 디바이스에 이용가능하게 되는 지점에서, 디바이스는 그 미디어를 플레이하기 시작할 수도 있다. 이 지정된 양의 버퍼된 데이터는 인코더 설정들에서 콘텐츠의 제작자에 의해 그 파일에 내장될 수도 있으며, 클라이언트 컴퓨터의 미디어 플레이어에 의해 시행되는 추가적인 버퍼 설정들에 의해 강제될 수도 있다.
프로그레시브 다운로딩 또는 HTTP 스트리밍에서, 비디오 및 오디오 샘플들을 포함한, 모든 미디어 데이터를 포함하는 단일 영화 박스 (moov 박스) 를 제공하는 대신, 영화 단편들 (moof) 은 그 영화 박스 내에 포함된 샘플들에 더해서 여분의 샘플들을 포함하도록 지원된다. 일반적으로, 영화 단편들은 어떤 시간 기간에 대한 샘플들을 포함한다. 이 영화 단편들을 이용하여, 클라이언트는 원하는 시간을 빨리 찾을 수 있다. 영화 단편은 HTTP 스트리밍과 같은 스트리밍 프로토콜에 따라서, 클라이언트가 영화 단편을 취출하라는 부분-취득 요청을 발할 수 있도록, 연속적인 바이트들의 파일을 포함할 수도 있다.
일 예로서 3GPP 에 대해, HTTP/TCP/IP 전송이 다운로드 및 프로그레시브 다운로드를 위한 3GPP 파일들에 대해 지원된다. 더욱이, 비디오 스트리밍에 HTTP 를 이용하는 것은 얼마간의 이점들을 제공할 수도 있으며, HTTP 에 기초한 비디오 스트리밍 서비스들이 대중화되고 있다. HTTP 스트리밍은 기존 인터넷 구성요소들 및 프로토콜들이 사용될 수 있다는 어떤 이점들을 포함할 수도 있으므로, 비디오 데이터를 네트워크를 통해서 전송하는 새로운 기법들을 개발하는데 새로운 노력들이 요구되지 않는다. 다른 전송 프로토콜들, 예컨대, 실시간 프로토콜 (RTP) 페이로드 포맷은, 미디어 포맷 및 시그널링 컨텍스트를 인식하기 위해 중간 네트워크 디바이스들, 예컨대, 중간 박스들을 필요로 한다. 또한, HTTP 스트리밍은 클라이언트-구동될 수 있어, 제어 이슈들을 피할 수도 있다. HTTP 를 이용하는 것은 또한 HTTP 1.1 이 구현된 웹 서버에서 새로운 하드웨어 또는 소프트웨어 구현들을 반드시 필요로 하지 않는다. HTTP 스트리밍은 또한 TCP-친화성 및 방화벽 보호 (firewall traversal) 를 제공한다. HTTP 스트리밍에서, 미디어 표현은 클라이언트에 액세스가능한 데이터의 구조화된 컬렉션일 수도 있다. 클라이언트는 스트리밍 서비스를 사용자에게 제시하기 위해 미디어 데이터 정보를 요청하여 다운로드할 수도 있다.
서비스가 클라이언트의 사용자에 의해 영화의 표현으로서 체험되며, 이 영화는 서버에 의해 전달된 콘텐츠 구성요소들로부터 클라이언트에 의해 디코딩되어 렌더링된다. HTTP 스트리밍에서는, 하나의 요청에 응답하여 전체 콘텐츠를 수신하는 대신, 클라이언트가 콘텐츠 구성요소들의 세그먼트들을 요청할 수 있다. 이러한 방법으로, HTTP 스트리밍은 보다 유연한 콘텐츠의 전달을 가능하게 할 수도 있다. 세그먼트는 하나의 URL 에 의해 요청될 수 있는 연속적인 영화 단편의 세트를 포함할 수도 있다. 예를 들어, 세그먼트는 전체 작은 파일일 수도 있으며, 이 작은 파일은 비디오 및 오디오를 포함할 수도 있다. 또 다른 예로서, 세그먼트는 하나의 영화 단편에 대응할 수도 있으며, 이 영화 단면은 하나의 비디오 트랙 단편 및 하나의 오디오 트랙 단편을 포함할 수도 있다. 또한 또 다른 예로서, 세그먼트는 여러 영화 단편들에 대응할 수도 있으며, 이 중에서 임의의 단면 또는 모두는 하나의 비디오 단편 및 하나의 오디오 단편을 가질 수도 있으며, 영화 단편들은 디코딩 시간이 연속적일 수도 있다.
또한 콘텐츠 배포 네트워크로도 지칭되는, 콘텐츠 전달 네트워크 (CDN) 는, 그 네트워크에 걸친 클라이언트들에 의한 그 데이터에의 액세스를 위한 대역폭을 최대화하기 위해서 그 네트워크 내의 여러 지점들에 위치되고 데이터의 복사본들을 포함하는 컴퓨터들의 시스템을 포함할 수도 있다. 클라이언트는, 모든 클라이언트들이 동일한 중앙 서버에 액세스하는 것과는 대조적으로, 그 클라이언트 근처에 있는 데이터의 복사본에 액세스할 수도 있어, 개개의 서버 근처에서 병목들을 피할 수도 있다. 콘텐츠 유형들은 웹 오브젝트들, 다운로드가능한 오브젝트들 (미디어 파일들, 소프트웨어, 문서들, 및 기타 등등), 애플리케이션들, 실시간 미디어 스트림들, 및 인터넷 전달의 다른 구성요소들 (DNS, 루트들 (routes), 및 데이터베이스 쿼리들) 을 포함할 수도 있다. HTTP 프로토콜, 보다 구체적으로는, HTTP 1.1 에 기초하는 발신 (origin) 서버, 프록시들 및 캐시들에 오직 의존하는 많은 성공적인 CDNs 가 있다.
HTTP 스트리밍에서, 빈번하게 사용되는 동작들은 취득 및 부분 취득을 포함한다. 취득 동작은 주어진 URL (uniform resource locator) 또는 URN (uniform resource name) 과 연관되는 전체 파일을 취출한다. 부분 취득 동작은 바이트 범위를 입력 파라미터로서 수신하고 그 수신된 바이트 범위에 대응하는 파일의 연속적인 개수의 바이트들을 취출한다. 따라서, 부분 취득 동작이 하나 이상의 개개의 영화 단편들을 취득할 수 있기 때문에, 영화 단편들이 HTTP 스트리밍을 위해 제공될 수도 있다. 영화 단편은 상이한 트랙들로부터의 여러 트랙 단편들을 포함할 수도 있다.
HTTP 스트리밍의 상황에서, 세그먼트가 취득 요청 또는 부분 취득 요청 (HTTP 1.1 에서) 에 대한 응답으로서 전달될 수도 있다. CDN 에서, 프록시들 및 캐시들과 같은 컴퓨팅 디바이스들은 그 요청들에 응답하여 세그먼트들을 저장할 수 있다. 따라서, 그 세그먼트가 또 다른 클라이언트 (또는, 동일한 클라이언트) 에 의해 요청되고 클라이언트가 이 프록시 디바이스를 통과하는 경로를 가지면, 프록시 디바이스는 발신 서버로부터 다시 세그먼트를 취출함이 없이, 세그먼트의 로컬 복사본을 클라이언트로 전달할 수 있다. HTTP 스트리밍에서, 프록시 디바이스가 HTTP 1.1 를 지원하면, 바이트 범위들은, 요청들에 대한 응답으로서, 프록시 디바이스의 캐시에 저장되는 동안에 결합되거나 또는 요청에 대한 응답의 로컬 복사본으로서 사용되는 동안에 추출될 수 있다. 각각의 콘텐츠 구성요소는 연속적인 단편들의 섹션들을 포함할 수도 있으며, 그 섹션들 각각은 클라이언트 디바이스에 의해 전송된 HTTP 취득 또는 부분 취득에 의해 요청될 수 있다. 콘텐츠 구성요소의 이런 단편은 미디어 단편으로 지칭될 수도 있다.
여러 비트레이트들 및 여러 디바이스들을 지원할 뿐만 아니라, 여러 사용자 선호사항들을 적응시키기 위해, HTTP 스트리밍에서 하나 보다 많은 미디어 표현들이 있을 수도 있다. 그 표현들의 설명은 서버에 의해 발생되어 클라이언트에 전송될 때, 미디어 프리젠테이션 설명 (MPD) 데이터 구조로 기술될 수 있으며, 이 데이터 구조는 구성요소 맵 박스에 대응할 수도 있다. 즉, 종래의 MPD 데이터 구조는 본 개시물에서 설명하는 바와 같이, 구성요소 맵 박스에 대응하는 데이터를 포함할 수도 있다. 다른 예들에서, 구성요소 맵 박스는 구성요소 맵 박스에 대한 본 개시물에서 설명하는 데이터에 더해, MPD 데이터 구조와 유사한 데이터를 더 포함할 수도 있다. 설명되는 표현들은 하나 이상의 영화 파일들에 포함된, 콘텐츠 구성요소들을 포함할 수도 있다. 정적 콘텐츠 서버가 사용되면, 그 서버는 영화 파일들을 저장할 수도 있다. 동적 콘텐츠 서버가 지원되면, 그 서버는 그 수신된 요청에 응답하여 동적 파일 (콘텐츠) 을 발생할 수도 있다. 동적 콘텐츠가 서버에 의해 그때 그때 발생될 수도 있지만, 프록시들 및 캐시들과 같은 컴퓨팅 디바이스들에 투명하다. 따라서, 동적 콘텐츠 서버에 대한 요청들에 응답하여 제공되는 세그먼트들은 또한 캐시될 수 있다. 동적 콘텐츠 서버는 더 복잡한 구현예를 가질 수도 있으며, 아마 더 적은 스토리지가 서버 측에서 최적이거나 또는 더 적은 캐시가 콘텐츠의 전달 동안 효율적일 것이다.
게다가, 본 개시물은 또한 특정의 표현 (예컨대, 구성요소들의 조합) 이 완료된 (complete) 동작 지점인지 여부를 MPD 에서 시그널링하는 기법들을 포함한다. 즉, 서버는 표현이 완료된 비디오 동작 지점으로서 선택될 수 있는지 여부를 클라이언트에게 나타내기 위해 그 MPD 에 플래그를 제공할 수도 있다. 동작 지점은 어떤 시간 레벨에서 뷰들의 서브세트를 포함하고 자신에게 유효한 비트스트림을 표현하는, MVC 서브-비트스트림, 즉, MVC 비트스트림의 서브세트에 대응할 수도 있다. 동작 지점은 어떤 시간의 레벨 및 뷰 스케일러빌리티를 표현하며, 어떤 시간 레벨에서 뷰들의 어떤 서브세트를 나타내기 위해 유효한 비트스트림에 요구되는 NAL 유닛들만 오직 포함할 수도 있다. 동작 지점은 뷰들의 서브세트의 뷰 식별자 값들, 및 뷰들의 서브세트의 최고 시간 식별자에 의해 기술될 수도 있다.
MPD 는 또한 멀티미디어 콘텐츠에 대한 개개의 표현들을 기술할 수도 있다. 예를 들어, 각각의 표현에 대해, MPD 는 표현 식별자, 디폴트 속성 표현 식별자, 그 표현에 대한 프로파일 및 레벨 표시자, 그 표현에 대한 프레임 레이트, 의존성 그룹 식별자, 및 시간 식별자를 시그널링할 수도 있다. 표현 식별자는 멀티미디어 콘텐츠에 대한 연관되는 표현의 고유 식별자를 제공할 수도 있다. 디폴트 속성 표현 식별자는, 프로파일 및 레벨 표시자, 대역폭, 폭, 높이, 프레임 레이트, 의존성 그룹 식별자, 시간 식별자, 및/또는 3D 비디오에 대한 프레임 패킹 (packing) 유형 중 어느 것 또는 모두를 포함할 수도 있는, 현재의 표현에 대한 디폴트 속성들로서 사용될 속성들을 갖는 표현의 식별자를 제공할 수도 있다. 프레임 레이트 식별자는 대응하는 표현에 대한 비디오 구성요소(들) 의 프레임 레이트를 규정할 수도 있다. 의존성 그룹 식별자는 그 대응하는 표현이 할당되는 의존성 그룹을 규정할 수도 있다. 시간 식별자 값을 갖는 의존성 그룹에서의 표현들은 낮은 시간 식별자 값들을 갖는 동일한 의존성 그룹에서의 표현들에 의존할 수도 있다.
예컨대, 멀티뷰 비디오에 대응하는 3D 비디오 표현들에 있어, 구성요소 맵 박스는 출력을 위한 목표 뷰들의 개수를 기술할 수도 있다. 즉, 구성요소 맵 박스는 표현을 위한 목표 출력 뷰들의 개수를 나타내는 값을 포함할 수도 있다. 일부 예들에서, 구성요소 맵 박스는 단일 뷰에 대한 깊이 정보를 단일 뷰에 대한 코딩된 샘플들과 함께 제공할 수도 있으므로, 클라이언트 디바이스는 그 단일 뷰 및 깊이 정보로부터 제 2 뷰를 구성할 수도 있다. 플래그가 그 표현이 뷰 플러스 깊이 표현인 것을 나타내기 위해 제공될 수도 있다. 일부 예들에서, 깊이 정보와 각각 연관되는 다수의 뷰들이 그 표현에 포함될 수도 있다. 이러한 방법으로, 뷰들 각각이 스테레오 뷰 쌍을 생성하는 기초로서 사용될 수 있으므로, 표현의 뷰들 각각에 대해 2개의 뷰들을 발생시킬 수 있다. 따라서, 다수의 뷰들이 그 표현에 포함될 수도 있지만, 그 뷰들 중 2개가 반드시 스테레오 뷰 쌍을 형성하지는 않는다. 일부 예들에서, 표현이 그 대응하는 멀티미디어 콘텐츠에 대한 유효한 표현을 단독으로 형성할 수 없는 단지 의존적인 표현인지 여부를 나타내기 위해 플래그가 포함될 수도 있다.
도 1 은 오디오/비디오 (A/V) 소스 디바이스 (20) 가 오디오 및 비디오 데이터를 A/V 목적지 디바이스 (40) 에 전송하는 예시적인 시스템 (10) 을 도시하는 블록도이다. 도 1 의 시스템 (10) 은 원격 화상회의 시스템, 서버/클라이언트 시스템, 브로드캐스터/수신기 시스템, 또는 비디오 데이터가 소스 디바이스, 예컨대 A/V 소스 디바이스 (20) 로부터, 목적지 디바이스, 예컨대 A/V 목적지 디바이스 (40) 에 전송되는 임의의 다른 시스템에 대응할 수도 있다. 일부 예들에서, A/V 소스 디바이스 (20) 및 A/V 목적지 디바이스 (40) 는 양방향의 정보 교환을 수행할 수도 있다. 즉, A/V 소스 디바이스 (20) 및 A/V 목적지 디바이스 (40) 는 오디오 및 비디오 데이터를 인코딩 및 디코딩 양자를 행하는 (그리고, 송수신하는) 것이 가능할 수도 있다. 일부 예들에서, 오디오 인코더 (26) 는 또한 보코더로도 지칭되는, 보이스 인코더를 포함할 수도 있다.
도 1 의 예에서, A/V 소스 디바이스 (20) 는 오디오 소스 (22) 및 비디오 소스 (24) 를 포함한다. 오디오 소스 (22) 는 예를 들어, 오디오 인코더 (26) 에 의해 인코딩되는 캡쳐된 오디오 데이터를 나타내는 전기 신호들을 발생하는 마이크로폰을 포함할 수도 있다. 이의 대안으로, 오디오 소스 (22) 는 이전에 기록된 오디오 데이터를 저장하는 저장 매체, 오디오 데이터 발생기, 예컨대 컴퓨터화된 신시사이저, 또는 오디오 데이터의 임의의 다른 소스를 포함할 수도 있다. 비디오 소스 (24) 는 비디오 인코더 (28) 에 의해 인코딩되는 비디오 데이터를 발생하는 비디오 카메라, 이전에 기록된 비디오 데이터로 인코딩된 저장 매체, 비디오 데이터 발생 유닛, 또는 비디오 데이터의 임의의 다른 소스를 포함할 수도 있다.
원본 (Raw) 오디오 및 비디오 데이터는 아날로그 또는 디지털 데이터를 포함할 수도 있다. 아날로그 데이터는 오디오 인코더 (26) 및/또는 비디오 인코더 (28) 에 의해 인코딩되기 전에 디지털화될 수도 있다. 오디오 소스 (22) 는 대화 참가자가 말하는 동안에 그 대화 참가자로부터 오디오 데이터를 획득할 수도 있으며, 비디오 소스 (24) 는 대화 참가자의 비디오 데이터를 동시에 획득할 수도 있다. 다른 예들에서, 오디오 소스 (22) 는 저장된 오디오 데이터를 포함하는 컴퓨터 판독가능 저장 매체를 포함할 수도 있으며, 비디오 소스 (24) 는 저장된 비디오 데이터를 포함하는 컴퓨터 판독가능 저장 매체를 포함할 수도 있다. 이러한 방법으로, 본 개시물에서 설명하는 기법들은 라이브, 스트리밍, 실시간 오디오 및 비디오 데이터에 적용하거나 또는 아치브된, 사전-기록된 오디오 및 비디오 데이터에 적용될 수도 있다. 더욱이, 이 기법들은 컴퓨터-발생된 오디오 및 비디오 데이터에 적용될 수도 있다.
비디오 프레임들에 대응하는 오디오 프레임들은 일반적으로 비디오 프레임들 내에 포함된, 비디오 소스 (24) 에 의해 캡쳐된 비디오 데이터와 동시에, 오디오 소스 (22) 에 의해 캡쳐된 오디오 데이터를 포함하는 오디오 프레임들이다. 예를 들어, 대화 참가자가 일반적으로 말함으로써 오디오 데이터를 발생하는 동안, 오디오 소스 (22) 는 오디오 데이터를 캡쳐하고, 비디오 소스 (24) 는 동시에, 즉, 오디오 소스 (22) 가 오디오 데이터를 캡쳐하고 있는 동안 대화 참가자의 비디오 데이터를 캡쳐한다. 그러므로, 오디오 프레임은 하나 이상의 특정의 비디오 프레임들에 시간적으로 대응할 수도 있다. 따라서, 비디오 프레임에 대응하는 오디오 프레임은 일반적으로 오디오 데이터 및 비디오 데이터가 동시에 캡쳐되었으며 오디오 프레임 및 비디오 프레임이 동시에 캡쳐된 오디오 데이터 및 비디오 데이터를 각각 포함하는 상황에 대응한다.
일부 예들에서, 오디오 인코더 (26) 는 그 인코딩된 오디오 프레임에 대한 오디오 데이터가 기록된 시간을 나타내는, 각각의 인코딩된 오디오 프레임에서의 시간스탬프를 인코딩할 수도 있으며, 유사하게, 비디오 인코더 (28) 는 그 인코딩된 비디오 프레임에 대한 비디오 데이터가 기록된 시간을 나타내는, 각각의 인코딩된 비디오 프레임에서의 시간스탬프를 인코딩할 수도 있다. 이런 예들에서, 비디오 프레임에 대응하는 오디오 프레임은 시간스탬프를 포함하는 오디오 프레임 및 동일한 시간스탬프를 포함하는 비디오 프레임을 포함할 수도 있다. A/V 소스 디바이스 (20) 는 오디오 인코더 (26) 및/또는 비디오 인코더 (28) 가 시간스탬프들을 발생할 수도 있거나, 또는 오디오 소스 (22) 및 비디오 소스 (24) 가 시간스탬프로 오디오 및 비디오 데이터를 각각 연관시키는데 사용할 수도 있는 내부 클록을 포함할 수도 있다.
일부 예들에서, 오디오 소스 (22) 는 오디오 데이터가 기록된 시간에 대응하는 데이터를 오디오 인코더 (26) 에 전송할 수도 있으며, 비디오 소스 (24) 는 비디오 데이터가 기록된 시간에 대응하는 데이터를 비디오 인코더 (28) 에 전송할 수도 있다. 일부 예들에서, 오디오 인코더 (26) 는 오디오 데이터가 기록된 절대 시간을 반드시 나타내지 않고 인코딩된 오디오 데이터의 상대적인 시간 순서를 나타내기 위해 인코딩된 오디오 데이터에 시퀀스 식별자를 인코딩할 수도 있으며, 유사하게, 비디오 인코더 (28) 는 또한 인코딩된 비디오 유닛의 상대적인 시간 순서를 나타내기 위해 시퀀스 식별자들을 사용할 수도 있다. 이와 유사하게, 일부 예들에서, 시퀀스 식별자는 맵핑되거나 또는 아니면 시간스탬프와 상관될 수도 있다.
본 개시물의 기법들은 일반적으로 인코딩된 멀티미디어 (예컨대, 오디오 및 비디오) 데이터의 전송, 및 그 전송된 멀티미디어 데이터의 수신과 후속 해석 및 디코딩에 관한 것이다. 특히, 캡슐화 유닛 (30) 은 멀티미디어 콘텐츠에 대한 구성요소 맵 박스 뿐만 아니라, 멀티미디어 콘텐츠에 대응하는 각각의 파일에 대한 구성요소 배열 박스들을 발생할 수도 있다. 일부 예들에서, 프로세서는 캡슐화 유닛 (30) 에 대응하는 명령들을 실행할 수도 있다. 즉, 캡슐화 유닛 (30) 에 기인하는 기능을 수행하는 명령들은 컴퓨터 판독가능 매체 상에 저장되고 프로세서에 의해 실행될 수도 있다. 다른 프로세싱 회로는 다른 예들에서, 캡슐화 유닛 (30) 에 역시 기인하는 기능들을 수행하도록 구성될 수도 있다. 구성요소 맵 박스는 그 콘텐츠의 구성요소들 (예컨대, 오디오 구성요소들, 비디오 구성요소들, 또는 다른 구성요소들) 과는 개별적으로 저장될 수도 있다.
따라서, 목적지 디바이스 (40) 는 멀티미디어 콘텐츠에 대한 구성요소 맵 박스를 요청할 수도 있다. 목적지 디바이스 (40) 는 콘텐츠의 플레이백을 수행하도록 요청하는 구성요소들을 사용자의 선호사항들, 네트워크 조건들, 목적지 디바이스 (40) 의 디코딩 및 렌더링 능력들, 또는 다른 인자들에 기초하여 결정하기 위해 구성요소 맵 박스를 이용할 수도 있다.
A/V 소스 디바이스 (20) 는 A/V 목적지 디바이스 (40) 에 "서비스" 를 제공할 수도 있다. 서비스는 일반적으로 하나 이상의 오디오 콘텐츠 구성요소와 비디오 콘텐츠 구성요소의 조합에 대응하며, 여기서, 오디오 및 비디오 콘텐츠 구성요소들은 전체 콘텐츠 중 가용 콘텐츠 구성요소들의 서브세트들이다. 하나의 서비스는 2개의 뷰들을 갖는 스테레오 비디오에 대응할 수도 있으며, 한편 또 다른 서비스는 4개의 뷰들에 대응할 수도 있으며, 또한 또 다른 서비스는 8개의 뷰들에 대응할 수도 있다. 일반적으로, 서비스는 가용 콘텐츠 구성요소들의 조합 (즉, 서브세트) 을 제공하는 소스 디바이스 (20) 에 대응한다. 콘텐츠 구성요소들의 조합은 또한 그 콘텐츠의 표현으로도 지칭된다.
캡슐화 유닛 (30) 은 인코딩된 샘플들을 오디오 인코더 (26) 및 비디오 인코더 (28) 로부터 수신하고 대응하는 네트워크 추상화 계층 (NAL) 유닛들을 인코딩된 샘플들로부터 형성하며, 이 인코딩된 샘플들은 패킷화 기본 스트림 (PES; packetized elementary stream) 패킷들의 유형을 취할 수도 있다. H.264/AVC (고도 비디오 코딩) 의 예에서, 코딩된 비디오 세그먼트들이 NAL 유닛들로 조직화되며, 이 NAL 유닛들은 비디오 전화 통신, 스토리지, 브로드캐스트, 또는 스트리밍과 같은 애플리케이션들을 어드레싱 (addressing) 하는 "네트워크-친화적인" 비디오 표현을 제공한다. NAL 유닛들은 비디오 코딩 계층 (VCL) NAL 유닛들 및 비-VCL NAL 유닛들로 분류될 수 있다. VCL 유닛들은 코어 압축 엔진으로부터의 데이터를 포함할 수도 있으며 블록, 매크로블록, 및/또는 슬라이스 레벨 데이터를 포함할 수도 있다. 다른 NAL 유닛들은 비-VCL NAL 유닛들일 수도 있다. 일부 예들에서, 일반적으로 1차 코딩된 화상으로서 제시되는, 하나의 시간 인스턴스에서의 코딩된 화상이 액세스 유닛에 포함될 수도 있으며, 이 액세스 유닛은 하나 이상의 NAL 유닛들을 포함할 수도 있다.
본 개시물의 기법들에 따르면, 캡슐화 유닛 (30) 은 콘텐츠 구성요소들의 특성들을 기술하는 구성요소 맵 박스를 구성할 수도 있다. 캡슐화 유닛 (30) 은 또한 하나 이상의 비디오 파일들에 대한 구성요소 배열 박스들을 구성할 수도 있다. 캡슐화 유닛 (30) 은 각각의 구성요소 배열 박스를 대응하는 비디오 파일과 연관시킬 수도 있으며, 구성요소 맵 박스를 비디오 파일들의 세트와 연관시킬 수도 있다. 이러한 방법으로, 구성요소 배열 박스들과 비디오 파일들 사이에 1:1 대응이 존재하고, 구성요소 맵 박스들과 비디오 파일들 사이에 1:N 대응이 존재할 수도 있다.
위에서 언급한 바와 같이, 구성요소 맵 박스는 콘텐츠에 공통적인 구성요소들의 특성들을 기술할 수도 있다. 예를 들어, 콘텐츠는 오디오 구성요소들, 비디오 구성요소들, 및 다른 구성요소들, 예컨대 폐쇄 자막을 포함할 수도 있다. 어떤 유형의 구성요소들 각각은 서로 전환가능할 수도 있다. 예를 들어, 2개의 비디오 구성요소들이 2개의 구성요소들 중 어느 하나로부터의 데이터가 콘텐츠의 플레이백을 방해함이 없이 취출될 수도 있다는 점에서 전환가능할 수도 있다. 여러 구성요소들이 여러 방식으로 그리고 여러 품질들로 인코딩될 수도 있다. 예를 들어, 여러 비디오 구성요소들은 여러 프레임 레이트들, 비트레이트들에서, (예컨대, 상이한 코덱들에 대응하는) 상이한 인코더들을 이용하여 인코딩되어, 여러 파일 유형들 (예컨대, H.264/AVC 또는 MPEG-2 전송 스트림 (TS)) 로 캡슐화되거나 또는 아니면 서로 상이할 수도 있다. 그러나, 예를 들어, 비디오 구성요소의 선택은 오디오 구성요소의 선택과는 일반적으로 독립적이다. 구성요소 맵 박스에 의해 시그널링된 구성요소의 특성들은 평균 비트레이트, 최대 비트레이트 (예컨대, 구성요소에 대해 1초의 플레이백 시간 동안), 해상도, 프레임 레이트, 다른 구성요소들에 대한 의존성들, 및 멀티-뷰 비디오와 같은 여러 파일 유형들에 대한 확장판들, 예컨대, 출력용으로 목표된 뷰들의 개수 및 뷰들 각각에 대한 식별자들을 포함할 수도 있다.
HTTP 서버와 같은 서버로서 동작할 수도 있는 소스 디바이스 (20) 는 적응을 위해 동일한 콘텐츠의 다수의 표현들을 저장할 수도 있다. 일부 표현들은 다수의 콘텐츠 구성요소들을 포함할 수도 있다. 구성요소들은 소스 디바이스 (20) 의 저장 디바이스 (예컨대, 하나 이상의 하드 드라이브들) 상의 상이한 파일들에 저장될 수도 있으며, 따라서 표현은 상이한 파일들로부터의 데이터를 포함할 수도 있다. 여러 구성요소들의 특성들을 시그널링함으로써, 캡슐화 유닛 (30) 은 그 대응하는 콘텐츠를 렌더링하여 플레이백하기 위해 목적지 디바이스 (40) 에 각각의 전환가능한 구성요소 중 하나를 선택하는 능력을 제공할 수도 있다. 즉, 목적지 디바이스 (40) 는 구성요소 맵 박스를 특정의 콘텐츠에 대한 소스 디바이스 (20) 로부터 취출하고, 그 콘텐츠의 특정의 표현에 대응하는 콘텐츠에 대한 구성요소들을 선택하고, 그 후 그 선택된 구성요소들에 대한 데이터를 소스 디바이스 (20) 로부터, 예컨대, 스트리밍 프로토콜, 예컨대 HTTP 스트리밍에 따라서 취출할 수도 있다.
목적지 디바이스 (40) 는 네트워크 조건들, 예컨대 가용 대역폭, 및 구성요소들의 특성들에 기초하여 표현을 선택할 수도 있다. 더욱이, 목적지 디바이스 (40) 는 소스 디바이스 (20) 에 의해 시그널링된 데이터를 이용하여 변하는 네트워크 조건들에 적응시킬 수도 있다. 즉, 동일한 유형의 구성요소들이 서로 전환가능하기 때문에, 네트워크 조건들이 변할 때, 목적지 디바이스 (40) 는 새로 결정된 네트워크 조건들에 더 적합한 특정의 유형의 상이한 구성요소를 선택할 수도 있다.
캡슐화 유닛 (30) 는 구성요소 식별자 값들을 멀티미디어 콘텐츠의 구성요소 각각에 할당한다. 구성요소 식별자 값들은 유형에 관계없이 구성요소들에 고유하다. 즉, 예를 들어, 동일한 구성요소 식별자를 갖는 오디오 구성요소 및 비디오 구성요소가 없어야 한다. 구성요소 식별자들은 또한 개개의 파일들 내 트랙 식별자들에 반드시 관련될 필요가 없다. 예를 들어, 콘텐츠는 상이한 파일들에 각각 저장된 2개의 비디오 구성요소들을 가질 수도 있다. 파일들 각각은 특정의 파일에 로컬인 식별자들이 그 파일의 범위에, 외면적으로는 아니지만, 고유하므로, 비디오 구성요소들을 동일한 트랙 식별자를 이용하여 식별할 수도 있다. 그러나, 본 개시물의 기법들은 다수의 파일들 내에 상주할 수도 있는 구성요소들의 특성들을 제공하는 것을 수반하기 때문에, 본 개시물은 그 트랙 식별자들에 반드시 관련될 필요가 없는 구성요소 식별자들을 고유하게 할당하는 것을 제안한다.
구성요소 맵 박스는 또한 단편들이 그 파일에서 각각의 구성요소/트랙에 대해 저장되는 방법, 예컨대, 단편들이 시작하는 장소, 그들이 랜덤 액세스 포인트들을 포함하는지 여부 (및, 랜덤 액세스 포인트들이 순간 디코딩 리프레시 (IDR) 또는 개방 디코딩 리프레시 (ODR) 화상들인지 여부), 각각의 단편의 시작에 대한 바이트 오프셋들, 각각의 단편에서의 제 1 샘플들의 디코딩 시간들, 랜덤 액세스 포인트들에 대한 디코딩 및 프리젠테이션 시간들, 및 특정의 단편이 새로운 세그먼트에 속하는지 여부를 나타내는 플래그를 나타낼 수도 있다. 각각의 세그먼트는 독립적으로 취출할 수도 있다. 예를 들어, 캡슐화 유닛 (30) 은 각각의 세그먼트가 고유한 URL 또는 URN 을 이용하여 취출될 수 있도록, 구성요소의 세그먼트 각각을 저장할 수도 있다.
더욱이, 캡슐화 유닛 (30) 은 구성요소 배열 박스들을 콘텐츠에 대한 구성요소 식별자들과 대응하는 파일 내 트랙 식별자들 사이에 맵핑을 제공하는 파일들 각각에 제공할 수도 있다. 캡슐화 유닛 (30) 은 또한 동일한 유형의 구성요소들 사이의 의존성들을 시그널링할 수도 있다. 예를 들어, 어떤 구성요소들은 정확하게 디코딩되는 동일한 유형의 다른 구성요소들에 의존할 수도 있다. 일 예로서, 스케일러블 비디오 코딩 (SVC) 에서, 기초 계층 (base layer) 은 하나의 구성요소에 대응할 수도 있으며, 기초 계층에 대한 향상 계층은 또 다른 구성요소에 대응할 수도 있다. 또 다른 예로서, 멀티-뷰 비디오 코딩 (MVC) 에서, 하나의 뷰는 한 구성요소에 대응할 수도 있으며, 동일한 장면의 또 다른 뷰는 또 다른 구성요소에 대응할 수도 있다. 또한 또 다른 예로서, 한 구성요소의 샘플들은 또 다른 구성요소의 샘플들에 대해서 인코딩될 수도 있다. 예를 들어, MVC 에서, 인터-뷰 예측이 인에이블되는 상이한 뷰들에 대응하는 구성요소들일 수도 있다.
이러한 방법으로, 목적지 디바이스 (40) 는 구성요소들을 적절히 디코딩 및/또는 렌더링하기 위해, 구성요소들 사이의 의존성들을 결정하고 원하는 구성요소들에 더해서, 그 부모 구성요소들에 의존하는 구성요소들에 대한 부모 구성요소들을 취출할 수도 있다. 캡슐화 유닛 (30) 은 목적지 디바이스 (40) 가 그 구성요소들에 대한 데이터를 적합한 순서로 요청할 수 있도록, 의존성들의 순서 및/또는 구성요소들의 디코딩 순서를 추가로 시그널링할 수도 있다. 더욱이, 캡슐화 유닛 (30) 은 목적지 디바이스 (40) 가 디코딩 및/또는 렌더링을 위해 구성요소들의 샘플들을 적절하게 정렬할 수 있도록, 의존성들을 갖는 구성요소들 사이의 시간 계층 차이들을 시그널링할 수도 있다. 예를 들어, 하나의 비디오 구성요소는 24 의 프레임 레이트 및 12 fps 의 0 하위 계층인 temporal_id 를 갖는 반면, 또 다른 비디오 구성요소는 30 의 프레임 레이트 및 7.5 fps 의 0 하위 계층인 temporal_id 를 가질 수도 있다.
캡슐화 유닛 (30) 은 표현을 형성하기 위해 구성요소들의 조합들에 대한 여러 가능한 멀티플렉싱 간격들을 시그널링할 수도 있다. 이러한 방법으로, 목적지 디바이스 (40) 는 그 구성요소들의 이전 세그먼트들이 디코딩되고 디스플레이되고 있는 동안 그 구성요소들의 다가오는 세그먼트들에 대한 데이터가 취출될 수 있게 여러 구성요소들에 대한 데이터를 충분한 시간 기간 내에 요청하기 위해서, 가능한 멀티플렉싱 간격들 중 하나를 선택할 수도 있다. 즉, 목적지 디바이스 (40) 는 버퍼가 오버플로우될 정도로 앞서지는 아니지만, (네트워크 조건들에서 어떤 즉각적인 변화도 없다고 가정하면) 차단되는 플레이백이 없을 정도로 아주 충분히 앞서는, 그 구성요소들에 대한 데이터를 요청할 수도 있다. 네트워크 조건들에서 변화가 있으면, 목적지 디바이스 (40) 는 더 많은 후속 데이터의 송신을 대기하면서 디코딩 및 렌더링을 위해 충분한 양의 데이터가 취출되는 것을 보장하기 위해, 구성요소들을 전부 전환하기보다는, 상이한 멀티플렉싱 간격을 선택할 수도 있다. 캡슐화 유닛 (30) 은 멀티플렉싱 간격들을 명시적으로 시그널링된 간격들 또는 간격들의 범위에 기초하여 시그널링할 수도 있으며, 그 구성요소 맵 박스 내에서 이들 멀티플렉싱 간격들을 시그널링할 수도 있다.
일부 예들에서, 소스 디바이스 (20) 는 다수의 바이트 범위들을 규정하는 요청들을 수신할 수도 있다. 즉, 목적지 디바이스 (40) 는 파일 내 여러 구성요소들의 멀티플렉싱을 달성하기 위해 다수의 바이트-범위들을 하나의 요청에 규정할 수도 있다. 목적지 디바이스 (40) 는 구성요소들이 다수의 파일들에 있을 때 다수의 요청들을 전송할 수도 있으며, 그 요청들 중 임의의 요청 또는 모두는 하나 이상의 바이트 범위들을 규정할 수도 있다. 일 예로서, 목적지 디바이스 (40) 는 다수의 HTTP 취득 또는 부분 취득 요청들을 다수의 URLs 또는 URNs 에 서브밋할 수도 있으며, 이때, 그 부분 취득 요청들의 임의의 요청 또는 모두는 그 요청들의 URLs 또는 URNs 내에 다수의 바이트 범위들을 규정할 수도 있다. 소스 디바이스 (20) 는 그 요청된 데이터를 목적지 디바이스 (40) 에 제공함으로써 응답할 수도 있다. 일부 예들에서, 소스 디바이스 (20) 는 예컨대, 멀티플렉스 표현의 구성요소들을 함께 멀티플렉싱하여, 소스 디바이스 (20) 가 그 후 목적지 디바이스 (40) 에 제공할 수도 있는 파일을 동적으로 형성하기 위해, 공통 게이트웨이 인터페이스 (CGI) 를 구현함으로써, 동적 멀티플렉싱을 지원할 수도 있다.
캡슐화 유닛 (30) 은 또한 구성요소 맵 박스가 대응하는 콘텐츠의 시간 지속기간을 규정할 수도 있다. 디폴트로, 목적지 디바이스 (40) 는 어떤 시간 지속기간도 시그널링되지 않을 때 구성요소 맵 박스가 전체 콘텐츠에 적용하는 것을 결정하도록 구성될 수도 있다. 그러나, 시그널링될 경우, 목적지 디바이스 (40) 는 콘텐츠의 상이한 시간 지속기간에 각각 대응하는, 그 콘텐츠에 대한 다수의 구성요소 맵 박스들을 요청하도록 구성될 수도 있다. 캡슐화 유닛 (30) 은 구성요소 맵 박스들을 함께 인접하게, 또는 별개의 위치들에 저장할 수도 있다.
일부의 경우, 구성요소의 여러 부분들 (예컨대, 세그먼트들) 은 별개의 파일들 (예컨대, URL 또는 URN 취출가능 데이터 구조들) 에 저장될 수도 있다. 이런 경우, 동일한 구성요소 식별자는 각각의 파일에서, 예컨대 파일의 구성요소 배열 박스 내에서 구성요소를 식별하기 위해 사용될 수도 있다. 파일들은 순차적인 타이밍 정보, 즉, 그 파일들 중 하나가 다른 하나의 파일을 바로 뒤따른다는 것을 나타내는 타이밍 정보를 가질 수도 있다. 목적지 디바이스 (40) 는 멀티플렉스된 단편들에 대한 요청들을 어떤 타이밍 간격 및 순간 비트레이트에 기초하여 발생할 수도 있다. 목적지 디바이스 (40) 는 순간 비트레이트를 구성요소의 단편들에서의 바이트들의 개수에 기초하여 계산할 수도 있다.
대부분의 비디오 코딩 표준들과 같이, H.264/AVC 는 구문, 의미들 (semantics), 및 에러-없는 비트스트림들을 위한 디코딩 프로세스를 정의하며, 이 비트스트림들 중 임의의 스트림이 어떤 프로파일 또는 레벨에 따른다. H.264/AVC 는 인코더를 규정하지 않지만, 인코더는 그 발생된 비트스트림들이 디코더에 대한 표준-규격임을 보증하는 것을 맡고 있다. 비디오 코딩 표준의 상황에서, "프로파일" 은 그들에게 적용하는 알고리즘들, 피쳐들, 또는 툴들 및 제약들의 서브 세트에 대응한다. H.264 표준에 의해 정의되는 바와 같이, 예를 들어, "프로파일" 은 H.264 표준에 의해 규정된 전체 비트스트림 구문의 서브세트이다. "레벨" 은 화상들의 해상도, 비트 레이트, 및 매크로블록 (MB) 프로세싱 레이트에 관련되는, 예를 들어, 디코더 메모리 및 계산과 같은, 디코더 리소스 소비의 제한들에 대응한다. 프로파일은 profile_idc (프로파일 표시자) 값으로 시그널링될 수도 있지만, 레벨은 level_idc (레벨 표시자) 값으로 시그널링될 수도 있다.
H.264 표준은, 예를 들어, 주어진 프로파일의 구문에 의해 부과되는 한계들 내에서, 그 디코딩된 화상들의 지정된 사이즈와 같은 비트스트림에서의 구문 엘리먼트들에 의해 취한 값들에 따라서 인코더들 및 디코더들의 성능에서의 큰 변동을 요구하는 것이 여전히 가능하다는 것을 인정한다. H.264 표준은 추가로, 많은 애플리케이션들에서, 특정의 프로파일 내에서 그 구문의 모든 가정적 사용들을 처리할 수 있는 디코더를 구현하는 것이 실용적이지도 경제적이지도 않다는 것을 인정한다. 따라서, H.264 표준은 "레벨" 을 그 비트스트림에서의 구문 엘리먼트들의 값들에 의해 부과되는 제약들의 지정된 세트로서 정의한다. 이들 제약들은 값들에 대한 단순한 제한들일 수도 있다. 이의 대안으로, 이들 제약들은 값들의 산술적 조합들에 관한 제약들의 유형 (예컨대, 화상 폭 곱하기 화상 높이 곱하기 초 당 디코딩되는 화상들의 개수) 을 취할 수도 있다. H.264 표준은 개개의 구현예들이 각각의 지원되는 프로파일에 대해 상이한 레벨을 지원할 수도 있다는 것을 추가로 제공한다.
프로파일에 따르는 디코더는 그 프로파일에 정의된 모든 피쳐들을 통상 지원한다. 예를 들어, 코딩 피쳐로서, B-화상 코딩은 H.264/AVC 의 베이스라인 프로파일에서 지원되지 않지만 H.264/AVC 의 다른 프로파일들에서 지원된다. 레벨에 따르는 디코더는 리소스들을 그 레벨에 정의된 제한들을 넘어서 요구하지 않는 임의의 비트스트림을 디코딩하는 것이 가능해야 한다. 프로파일들 및 레벨들의 정의들은 해석능력에 도움이 될 수도 있다. 예를 들어, 비디오 송신 동안, 프로파일 및 레벨 정의들의 쌍은 전체 송신 세션 동안 협상되고 동의 받을 수도 있다. 보다 구체적으로는, H.264/AVC 에서, 레벨은 예를 들어, 프로세싱될 필요가 있는 매크로블록들의 개수, 디코딩된 화상 버퍼 (DPB) 사이즈, 코딩된 화상 버퍼 (CPB) 사이즈, 수직 모션 벡터 범위, 2개의 연속되는 MBs 당 모션 벡터들의 최대 개수, 및 B-블록이 8 x 8 픽셀들 미만의 서브-매크로블록 파티션들을 갖는지 여부에 대한 제한들을 정의할 수도 있다. 이러한 방법으로, 디코더는 그 디코더가 그 비트스트림을 적절히 디코딩할 수 있는지 여부를 결정할 수도 있다.
미디어 표현은 미디어 표현 설명 (MPD) 을 포함할 수도 있으며, 미디어 표현 설명은 상이한 대안적인 표현들의 설명들 (예컨대, 상이한 품질들을 가진 비디오 서비스들) 을 포함할 수도 있으며 이 설명은 예컨대, 코덱 정보, 프로파일 값, 및 레벨 값을 포함할 수도 있다. 목적지 디바이스 (40) 는 여러 표현들의 영화 단편들에 어떻게 액세스할지를 결정하기 위해 미디어 표현의 MPD 를 취출할 수도 있다. 영화 단편들은 비디오 파일들의 영화 단편 박스들 (moof 박스들) 에 위치될 수도 있다.
ITU-T H.261, H.262, H.263, MPEG-1, MPEG-2 및 H.264/MPEG-4 파트 10 과 같은 비디오 압축 표준들은 시간 리던던시를 감소시키기 위해 모션 보상 시간 예측을 이용한다. 인코더는 현재의 코딩된 화상들을 모션 벡터들에 따라서 예측하기 위해, 일부 이전에 인코딩된 화상들 (또한, 본원에서 프레임들로 지칭됨) 로부터의 모션 보상 예측을 이용한다. 대표적인 비디오 코딩에서는 3개의 주요 화상 유형들이 있다. 이들은 인트라 코딩된 화상 ("I-화상들" 또는 "I-프레임들"), 예측된 화상들 ("P-화상들" 또는 "P-프레임들") 및 양방향 예측된 화상들 ("B-화상들" 또는 "B-프레임들") 이다. P-화상들은 시간 순서에서 오직 현재의 화상 이전의 참조 화상만 이용한다. B-화상에서, B-화상의 블록 각각은 하나 또는 2개의 참조 화상들로부터 예측될 수도 있다. 이들 참조 화상들은 시간 순서로 현재의 화상 이전 또는 이후에 위치될 수 있다.
H.264 코딩 표준에 따르면, 일 예로서, B-화상들은 이전에-코딩된 참조 화상들 중 2개의 리스트들, 즉, 리스트 0 및 리스트 1 을 이용한다. 이들 2개의 리스트들은 각각 시간 순서로 과거 및/또는 미래 코딩된 화상들을 포함할 수 있다. B-화상에서 블록들은 여러 방법들: 리스트 0 참조 화상으로부터의 모션-보상되는 예측, 리스트 1 참조 화상으로부터의 모션-보상되는 예측, 또는 리스트 0 참조 화상과 리스트 1 참조 화상 양자의 조합으로부터의 모션-보상되는 예측 중 하나로 예측될 수도 있다. 리스트 0 참조 화상과 리스트 1 참조 화상 양자의 조합을 취득하기 위해, 2개의 모션 보상되는 참조 영역들이 리스트 0 참조 화상 및 리스트 1 참조 화상으로부터 각각 획득된다. 그들의 조합은 현재의 블록을 예측하는데 사용될 수도 있다.
ITU-T H.264 표준은 여러 블록 사이즈들, 예컨대 루마 (luma) 성분들의 경우 16 × 16, 8 × 8, 또는 4 × 4 에서, 및 크로마 (chroma) 성분들의 경우 8 x 8 에서 인트라 예측을 지원할 뿐만 아니라, 여러 블록 사이즈들, 예컨대 루마 성분들의 경우 16 x 16, 16 x 8, 8 x 16, 8 x 8, 8 x 4, 4 x 8 및 4 x 4 에서, 그리고 크로마 성분들의 경우 대응하는 스케일링된 사이즈들에서 인터 예측을 지원한다. 본 개시물에서, "N x N" 및 "N × N" 은 수직 및 수평 치수들의 관점에서의 블록의 픽셀 치수들, 예컨대, 16 x 16 픽셀들 또는 16 × 16 픽셀들을 지칭하기 위해 상호교환가능하게 사용될 수도 있다. 일반적으로, 16 x 16 블록은 수직 방향으로 16 개의 픽셀들 (y = 16) 및 수평 방향으로 16 개의 픽셀들 (x = 16) 을 가질 것이다. 이와 유사하게, N x N 블록은 일반적으로 수직 방향으로 N개의 픽셀들 및 수평 방향으로 N개의 픽셀들을 가지며, 여기서 N 은 음이 아닌 정수 값을 나타낸다. 블록에서 픽셀들은 로우들 및 칼럼들로 배열될 수도 있다. 블록들은 수평 및 수직 치수들에서 상이한 픽셀들의 개수를 가질 수도 있다. 즉, 블록들은 N x M 픽셀들을 포함할 수도 있으며, 여기서 N 은 반드시 M 과 같을 필요는 없다.
16 × 16 미만인 블록 사이즈들은 16 × 16 매크로블록의 파티션들로서 지칭될 수도 있다. 비디오 블록들은 픽셀 도메인에서의 픽셀 데이터의 블록들, 또는 이산 코사인 변환 (DCT), 정수 변환, 웨이블릿 변환, 또는 코딩된 비디오 블록들과 예측 비디오 블록들 사이의 픽셀 차이들을 나타내는 잔여 비디오 블록 데이터로의 개념적으로 유사한 변환과 같은 변환의 적용이 뒤따르는 변환 도메인에서의 변환 계수들의 블록들을 포함할 수도 있다. 일부의 경우, 비디오 블록은 그 변환 도메인에서 양자화된 변환 계수들의 블록들을 포함할 수도 있다.
더 작은 비디오 블록들이 더 나은 해상도를 제공할 수 있으며, 높은 세부 레벨들을 포함하는 비디오 프레임의 위치들에 대해 사용될 수도 있다. 일반적으로, 매크로블록들 및 여러 파티션들은 서브-블록들로서 종종 지칭되며, 비디오 블록들로 간주될 수도 있다. 게다가, 슬라이스는 복수의 비디오 블록들, 예컨대 매크로블록들 및/또는 서브-블록들로 간주될 수도 있다. 각각의 슬라이스는 비디오 프레임의 독립적으로 디코딩가능한 유닛일 수도 있다. 이의 대안으로, 프레임들 자신은 디코딩가능한 유닛들일 수도 있거나, 또는 프레임의 다른 부분들은 디코딩가능한 유닛들으로서 정의될 수도 있다. 용어 "코딩된 유닛" 또는 "코딩 유닛" 은 전체 프레임, 프레임의 슬라이스, 시퀀스로도 또한 지칭되는 화상들 (GOP) 의 그룹과 같은, 비디오 프레임의 임의의 독립적으로 디코딩가능한 유닛, 또는 적용가능한 코딩 기법들에 따라 정의된 또 다른 독립적으로 디코딩가능한 유닛을 지칭할 수도 있다.
용어 매크로블록은 화상 및/또는 비디오 데이터를 16 x 16 픽셀들을 포함하는 2차원 픽셀 어레이에 따라서 인코딩하기 위한 데이터 구조를 지칭한다. 각각의 픽셀은 크로미넌스 성분 및 휘도 성분을 포함한다. 따라서, 매크로블록은 8 x 8 픽셀들의 2차원 어레이를 각각 포함하는 4개의 휘도 블록들, 16 x 16 픽셀들의 2차원 어레이를 각각 포함하는 2개의 크로미넌스 블록들, 및 코딩된 블록 패턴 (CBP), 인코딩 모드 (예컨대, 인트라- (I), 또는 인터- (P 또는 B) 인코딩 모드들), 인트라-인코딩된 블록의 파티션들에 대한 파티션 사이즈 (예컨대, 16 x 16, 16 x 8, 8 x 16, 8 x 8, 8 x 4, 4 x 8, 또는 4 x 4), 또는 인터-인코딩된 매크로블록에 대한 하나 이상의 모션 벡터들과 같은 구문 정보를 포함하는 헤더를 정의할 수도 있다.
비디오 인코더 (28), 비디오 디코더 (48), 오디오 인코더 (26), 오디오 디코더 (46), 캡슐화 유닛 (30), 및 캡슐화 해제 유닛 (38) 각각은, 하나 이상의 마이크로프로세서들, 디지털 신호 프로세서들 (DSPs), 주문형 집적회로들 (ASICs), 필드 프로그래밍가능 게이트 어레이들 (FPGAs), 이산 로직 회로, 소프트웨어, 하드웨어, 펌웨어 또는 임의의 이들의 조합들과 같은 다양한 적합한 프로세싱 회로 중 임의의 회로로서, 적용가능한 경우, 구현될 수도 있다. 비디오 인코더 (28) 및 비디오 디코더 (48) 각각은 하나 이상의 인코더들 또는 디코더들에 포함될 수도 있으며, 이들 중 어느 쪽이든 결합된 비디오 인코더/디코더 (코덱) 의 부분으로서 통합될 수도 있다. 이와 유사하게, 오디오 인코더 (26) 및 오디오 디코더 (46) 각각은 하나 이상의 인코더들 또는 디코더들에 포함될 수도 있으며, 이들 중 어느 쪽이든 결합된 코덱의 부분으로서 통합될 수도 있다. 비디오 인코더 (28), 비디오 디코더 (48), 오디오 인코더 오디오 인코더 (26), 오디오 디코더 (46), 캡슐화 유닛 (30), 및/또는 캡슐화 해제 유닛 (38) 을 포함하는 장치는 하나 이상의 집적 회로들, 마이크로프로세서들, 및/또는 무선 통신 디바이스, 예컨대 셀룰러 전화기의 임의의 조합을 포함할 수도 있다.
캡슐화 유닛 (30) 이 비디오 파일을 그 수신된 데이터에 기초하여 어셈블리한 후, 캡슐화 유닛 (30) 은 출력을 위해 비디오 파일을 출력 인터페이스 (32) 로 전달한다. 일부 예들에서, 캡슐화 유닛 (30) 은 비디오 파일을 로컬로 저장하거나 또는 비디오 파일을 직접 목적지 디바이스 (40) 에 전송하기보다는, 출력 인터페이스 (32) 를 통해서, 비디오 파일을 원격 서버에 전송할 수도 있다. 출력 인터페이스 (32) 는 예를 들어, 송신기, 송수신기, 예를 들어, 광학 드라이브, 자기 매체 드라이브 (예컨대, 플로피 드라이브) 과 같은 컴퓨터 판독가능 매체에 데이터를 기록하기 위한 디바이스, 범용 시리얼 버스 (USB) 포트, 네트워크 인터페이스, 또는 다른 출력 인터페이스를 포함할 수도 있다. 출력 인터페이스 (32) 는 비디오 파일을 예를 들어, 송신 신호, 자기 매체, 광학적 매체, 메모리, 플래시 드라이브와 같은, 컴퓨터 판독가능 매체 (34), 또는 다른 컴퓨터 판독가능 매체로 출력한다. 출력 인터페이스 (32) 는 HTTP 취득 및 부분 취득 요청들에 응답하기 위해 HTTP 1.1 을 구현할 수도 있다. 이러한 방법으로, 소스 디바이스 (20) 는 HTTP 스트리밍 서버로서 동작할 수도 있다.
궁극적으로, 입력 인터페이스 (36) 는 컴퓨터 판독가능 매체 (34) 로부터 데이터를 취출한다. 입력 인터페이스 (36) 는 예를 들어, 광학 드라이브, 자기 매체 드라이브, USB 포트, 수신기, 송수신기, 또는 다른 컴퓨터 판독가능 매체 인터페이스를 포함할 수도 있다. 입력 인터페이스 (36) 는 데이터를 캡슐화 해제 유닛 (38) 에 제공할 수도 있다. 캡슐화 해제 유닛 (38) 은 비디오 파일의 엘리먼트들을 캡슐화 해제하여 인코딩된 데이터를 취출하고, 그 인코딩된 데이터가 오디오 또는 비디오 구성요소의 부분인지 여부에 따라서, 인코딩된 데이터를 오디오 디코더 (46) 또는 비디오 디코더 (48) 에 전송할 수도 있다. 오디오 디코더 (46) 는 인코딩된 오디오 데이터를 디코딩하여, 그 디코딩된 오디오 데이터를 오디오 출력부 (42) 에 전송하며, 한편, 비디오 디코더 (48) 는 그 인코딩된 비디오 유닛을 디코딩하여, 복수의 뷰들을 포함하는 그 디코딩된 비디오 유닛을 비디오 출력부 (44) 에 전송한다.
도 2 은 예시적인 캡슐화 유닛 (30) 의 구성요소들을 도시하는 블록도이다. 도 2 의 예에서, 캡슐화 유닛 (30) 은 비디오 입력 인터페이스 (80), 오디오 입력 인터페이스 (82), 파일 생성 유닛 (60), 및 비디오 파일 출력 인터페이스 (84) 를 포함한다. 파일 생성 유닛 (60) 은, 이 예에서, 구성요소 어셈블리 유닛 (62), 구성요소 맵 박스 구성기 (64), 및 구성요소 배열 (arr't) 박스 구성기 (66) 를 포함한다.
비디오 입력 인터페이스 (80) 및 오디오 입력 인터페이스 (82) 는 인코딩된 비디오 및 오디오 데이터를 각각 수신한다. 비디오 입력 인터페이스 (80) 및 오디오 입력 인터페이스 (82) 는 데이터가 인코딩됨에 따라서 인코딩된 비디오 및 오디오 데이터를 수신할 수도 있거나, 또는 컴퓨터 판독가능 매체로부터 인코딩된 비디오 및 오디오 데이터를 취출할 수도 있다. 인코딩된 비디오 및 오디오 데이터를 수신하자 마자, 비디오 입력 인터페이스 (80) 및 오디오 입력 인터페이스 (82) 는 비디오 파일에의 어셈블리를 위해 그 인코딩된 비디오 및 오디오 데이터를 파일 생성 유닛 (60) 으로 전달한다.
파일 생성 유닛 (60) 은 제어 유닛에 기인하는 기능들 및 프로시저들을 수행하도록 구성된 하드웨어, 소프트웨어, 및/또는 펌웨어를 포함하는 제어 유닛에 대응할 수도 있다. 일반적으로 제어 유닛은 캡슐화 유닛 (30) 에 기인하는 기능들을 추가로 수행할 수도 있다. 파일 생성 유닛 (60) 이 소프트웨어 및/또는 펌웨어에 내장되는 예들에 있어, 캡슐화 유닛 (30) 은 (구성요소 어셈블리 유닛 (62), 구성요소 맵 박스 구성기 (64), 및 구성요소 배열 박스 구성기 (66) 뿐만 아니라) 파일 생성 유닛 (60) 과 연관되는 하나 이상의 프로세서들에 대한 명령들을 포함하는 컴퓨터 판독가능 매체 및 그 명령들을 실행하는 프로세싱 유닛을 포함할 수도 있다. 파일 생성 유닛 (60) 의 서브-유닛들 (이 예에서는, 구성요소 어셈블리 유닛 (62), 구성요소 맵 박스 구성기 (64), 및 구성요소 배열 박스 구성기 (66)) 각각은 개개의 하드웨어 유닛들 및/또는 소프트웨어 모듈들로서 구현될 수도 있으며, 추가적인 서브-유닛들에 기능적으로 통합되거나 또는 추가로 분리될 수도 있다.
파일 생성 유닛 (60) 은 예를 들어, 하나 이상의 마이크로프로세서들, 주문형 집적 회로들 (ASICs), 필드 프로그래밍가능 게이트 어레이들 (FPGAs), 디지털 신호 프로세서들 (DSPs), 또는 이들의 임의의 조합과 같은 임의의 적합한 프로세싱 유닛 또는 프로세싱 회로에 대응할 수도 있다. 파일 생성 유닛 (60) 은 명령들을 실행하는 프로세서 뿐만 아니라, 구성요소 어셈블리 유닛 (62), 구성요소 맵 박스 구성기 (64), 및 구성요소 배열 박스 구성기 (66) 중 임의 또는 모두에 대한 명령들을 저장하는 비일시성 컴퓨터 판독가능 매체를 추가로 포함할 수도 있다.
일반적으로, 파일 생성 유닛 (60) 은 그 수신된 오디오 및 비디오 데이터를 포함하는 하나 이상의 비디오 파일들을 생성할 수도 있다. 구성요소 어셈블리 유닛 (62) 은 콘텐츠의 구성요소를 그 수신된 인코딩된 비디오 및 오디오 샘플들로부터 발생할 수도 있다. 구성요소는 세그먼트들의 개수에 대응할 수도 있으며, 그 세그먼트들 각각은 하나 이상의 비디오 단편들을 포함할 수도 있다. 세그먼트들 각각은 클라이언트 디바이스, 예컨대 목적지 디바이스 (40) 에 의해 독립적으로 취출할 수도 있다. 예를 들어, 파일 생성 유닛 (60) 은 고유한 URL 또는 URN 을 세그먼트를 포함하는 파일에 할당할 수도 있다. 일반적으로, 구성요소 어셈블리 유닛 (62) 은 동일한 구성요소에 속하는 인코딩된 샘플들이 그 구성요소로 어셈블리되는 것을 보장할 수도 있다. 구성요소 어셈블리 유닛 (62) 은 또한 고유한 구성요소 식별자들을 콘텐츠의 구성요소 각각에 할당할 수도 있다. 파일 생성 유닛 (60) 은 한 파일에 하나 보다 많은 구성요소에 대한 데이터를 포함할 수도 있으며, 한 구성요소는 다수의 파일들을 포괄할 수도 있다. 파일 생성 유닛 (60) 은 구성요소에 대한 데이터를 비디오 파일 내 트랙으로서 저장할 수도 있다.
구성요소 맵 박스 구성기 (64) 는 본 개시물의 기법들에 따라서 멀티미디어 콘텐츠에 대한 구성요소 맵 박스를 발생할 수도 있다. 예를 들어, 구성요소 맵 박스는 콘텐츠의 구성요소들의 특성들을 시그널링할 수도 있다. 이들 특성들은 구성요소의 평균 비트레이트, 구성요소의 최대 비트레이트, 구성요소의 해상도 및 프레임 레이트 (구성요소가 비디오 구성요소라고 가정함), 다른 구성요소들에 대한 의존성들, 또는 다른 특성들을 포함할 수도 있다. 의존성들이 시그널링될 때, 구성요소 맵 박스 구성기 (64) 는 또한 의존적인 관계를 갖는 구성요소들 사이의 시간 계층 차이를 규정할 수도 있다. 구성요소 맵 박스는 또한 그 구성요소에 이용가능한 멀티플렉싱 간격들의 잠재적인 멀티플렉싱 간격들 또는 범위의 세트를 시그널링할 수도 있다. 일부 예들에서, 파일 생성 유닛 (60) 은 구성요소 맵 박스를 그 콘텐츠에 대한 코딩된 샘플들을 포함하는 모든 다른 파일들과는 분리된 파일에 저장할 수도 있다. 다른 예들에서, 파일 생성 유닛 (60) 은 구성요소 맵 박스를 비디오 파일들의 하나의 헤더에 포함할 수도 있다.
디폴트로, 구성요소 맵 박스는 전체 콘텐츠에 적용된다. 그러나, 구성요소 맵 박스가 오직 콘텐츠의 부분에만 적용될 때, 구성요소 맵 박스 구성기 (64) 는 그 구성요소 맵 박스가 적용되는 콘텐츠의 시간 지속기간을 시그널링할 수도 있다. 구성요소 맵 박스 구성기 (64) 는 그 후 정적 모드 또는 동적 모드에서 그 콘텐츠에 대한 다수의 구성요소 맵 박스들을 발생할 수도 있다. 정적 모드에서, 구성요소 맵 박스 구성기 (64) 는 모든 구성요소 맵 박스들을 함께 그 구성요소 맵 박스들이 대응하는 콘텐츠의 시간 지속기간들에 대응하는 순서로 그룹화한다. 동적 모드에서, 구성요소 맵 박스 구성기 (64) 는 각각의 구성요소 맵 박스를 상이한 위치에, 예컨대, 상이한 파일들에 배치할 수도 있다.
구성요소 맵 박스는 또한 미디어 단편이 구성요소의 새로운 세그먼트에 속하는지 여부를 시그널링할 수도 있다. 구성요소의 세그먼트 각각이 구성요소 식별자를 포함하고 있기 때문에, 심지어 세그먼트들이 별개의 파일들에 저장되더라도, 동일한 구성요소에 속하는 세그먼트들이 식별될 수 있다. 구성요소 맵 박스는 구성요소에 대한 인코딩된 샘플들을 갖는 파일들 내 구성요소의 부분들에 대한 타이밍 정보를 추가로 시그널링할 수도 있다. 따라서, 시간 스플리싱이 자연스럽게 지원된다. 예를 들어, 클라이언트 디바이스, 예컨대 목적지 디바이스 (40) 는 2개의 별개의 파일들이 동일한 구성요소에 대한 데이터, 및 2개의 파일들의 시간 순서를 포함한다고 결정할 수도 있다.
구성요소 배열 박스 구성기 (66) 는 파일 생성 유닛 (60) 에 의해 발생된 각각의 파일에 대한 구성요소 배열 박스들을 발생할 수도 있다. 일반적으로, 구성요소 배열 박스 구성기 (66) 는 어느 구성요소들이 그 파일 내에 포함되는지 뿐만 아니라, 구성요소 식별자들과 파일에 대한 트랙 식별자들 사이의 대응을 식별할 수도 있다. 이러한 방법으로, 구성요소 배열 박스는 콘텐츠에 대한 구성요소 식별자들과 파일에 대한 트랙 식별자들 사이에 맵핑을 제공할 수도 있다. 트랙 식별자들은 그 맵핑에서 규정된 구성요소에 대한 인코딩된 샘플들을 갖는 파일의 트랙에 대응할 수도 있다.
구성요소 배열 박스는 또한 각각의 구성요소의 단편들이 파일에 저장되는 방법을 나타낼 수도 있다. 예를 들어, 구성요소 배열 박스 구성기 (66) 는 파일에서의 구성요소의 단편들에 대한 바이트 범위들, 특정의 단편에 대한 바이트 오프셋들, 그 미디어 단편에서의 제 1 샘플의 디코딩 시간, 랜덤 액세스 포인트가 그 단편에 존재하는지 여부, 및 존재하면, 그의 디코딩 및 프리젠테이션 시간들 및 랜덤 액세스 포인트가 IDR 또는 ODR 화상인지 여부를 규정할 수도 있다.
파일 생성 유닛 (60) 이 파일을 발생한 후, 파일 출력 인터페이스 (84) 는 그 파일을 출력할 수도 있다. 일부 예들에서, 파일 출력 인터페이스 (84) 는 그 파일을 컴퓨터 판독가능 저장 매체, 예컨대 하드 디스크에 저장할 수도 있다. 일부 예들에서, 파일 출력 인터페이스 (84) 는 그 파일을 HTTP 1.1 를 구현하는 HTTP 스트리밍 서버와 같은, 서버로서 동작하도록 구성된 또 다른 디바이스로, 출력 인터페이스 (32) (도 1) 를 통해서 전송할 수도 있다. 일부 예들에서, 파일 출력 인터페이스 (84) 는 출력 인터페이스 (32) 가 예컨대, HTTP 스트리밍 요청들에 응답하여 파일을 클라이언트 디바이스들, 예컨대 목적지 디바이스 (40) 에 제공할 수 있도록, 그 파일을 로컬 저장 매체에 저장할 수도 있다.
도 3 은 예시적인 구성요소 맵 박스 (100) 및 구성요소 배열 박스 (152A) 를 도시하는 개념도이다. 이 예에서, 구성요소 맵 박스 (100) 는 비디오 구성요소들 (110) 및 오디오 구성요소들 (140) 을 포함한다. 구성요소 맵 박스 (110) 자체가 비디오 구성요소들 (110) 및 오디오 구성요소들 (140) 에 대한 시그널링된 특성들을 포함한다는 점에 유의해야 한다. 도 2 에 대해 언급한 바와 같이, 구성요소 맵 박스 (100) 및 구성요소 배열 박스들 (152) 은 파일 생성 유닛 (60) 에 의해, 예컨대, 구성요소 맵 박스 구성기 (64) 및 구성요소 배열 박스 구성기 (66) 에 의해 각각 생성될 수도 있다. 이러한 방법으로, 캡슐화 유닛 (30) 은 멀티미디어 콘텐츠 및 그 멀티미디어 콘텐츠에 대한 데이터를 포함하는 파일들의 특성들을 시그널링할 수도 있다. 예를 들어, 비디오 구성요소들 (110) 은 구성요소들 (112) 에 대한 시그널링된 특성들을 포함하며, 오디오 구성요소들 (140) 은 구성요소들 (142) 에 대한 시그널링된 특성들을 포함한다. 이 예에서 나타낸 바와 같이, 구성요소 (112A) 는 구성요소 특성들 (114A) 을 포함한다.
구성요소 특성들 (114A) 은, 이 예에서, 비트레이트 정보 (116), 해상도 정보 (118), 프레임 레이트 정보 (120), 코덱 정보 (122), 프로파일 및 레벨 정보 (124), 의존성들 정보 (126), 세그먼트 정보 (128), 멀티플렉싱 간격 정보 (130), 및 3D 비디오 정보 (132) 를 포함한다.
비트레이트 정보 (116) 는 구성요소 (112A) 에 대한 평균 비트레이트 및 최대 비트레이트의 어느 한쪽 또는 양자를 포함할 수도 있다. 비트레이트 정보 (116) 는 또한 평균 및/또는 최대 비트레이트 정보가 시그널링되는지 여부를 나타내는 플래그들을 포함할 수도 있다. 예를 들어, 비트레이트 정보 (116) 는 평균 비트레이트 플래그 및 최대 비트레이트 플래그를 포함할 수도 있으며, 여기서 평균 비트레이트 플래그는 평균 비트레이트가 구성요소 (112A) 에 대해 시그널링되는지 여부를 나타내며, 최대 비트레이트 플래그는 최대 비트레이트가 구성요소 (112A) 에 대해 시그널링되는지 여부를 나타낸다. 비트레이트 정보 (116) 는 또한 구성요소 (112A) 에 대한 평균 비트레이트를 나타내는 평균 비트레이트 값을 포함할 수도 있다. 이와 유사하게, 비트레이트 정보 (116) 는 어떤 시간 기간 동안, 예컨대, 1 초의 간격 동안 최대 비트레이트 값을 나타내는 최대 비트레이트 값을 포함할 수도 있다.
해상도 정보 (118) 는 구성요소 (112A) 의 해상도를, 예컨대, 화상의 픽셀 폭 및 픽셀 높이의 관점에서, 기술할 수도 있다. 일부의 경우, 해상도 정보 (118) 는 구성요소 (112A) 에 대해 명시적으로 시그널링되지 않을 수도 있다. 예를 들어, 구성요소 특성들 (114A) 은 인덱스 i 를 갖는 구성요소가 인덱스 i-1 를 갖는 동일한 콘텐츠의 구성요소의 동일한 특성들을 갖는지 여부를 나타내는 디폴트 특성들 플래그를 포함할 수도 있다. 특성들이 동일하다는 것을 플래그가 나타내면, 그 특성들이 시그널링될 필요가 없다. 디폴트 특성들은 예를 들어, 해상도, 프레임 레이트, 코덱 정보, 프로파일 정보, 및 레벨 정보, 또는 구성요소 맵 박스 (100) 과 같은 구성요소 맵 박스에 의해 시그널링될 수 있는 특성들의 다른 조합들과 같은 가용 특성들의 서브세트에 대응할 수도 있다. 일부 예들에서, 개개의 플래그들이 그 구성요소에 대한 대응하는 특성이 이전 구성요소와 동일한지 여부를 나타내는 각각의 잠재적인 구성요소에 대해서 포함된다.
일부 예들에서, 프레임 레이트 정보 (120) 는 위에서 설명한 바와 같이 디폴트 특성으로서 지정될 수도 있다. 이의 대안으로, 프레임 레이트 정보 (120) 는 구성요소 (112A) 에 대한 프레임 레이트를 규정할 수도 있다. 프레임 레이트는 비디오 구성요소의 256 초 당 프레임들로 규정될 수도 있다. 코덱 정보 (122) 는 또한 위에서 설명한 바와 같이, 디폴트 특성으로서 지정될 수도 있다. 이의 대안으로, 코덱 정보 (122) 는 구성요소 (112A) 를 인코딩하는데 사용되는 인코더를 규정할 수도 있다. 이와 유사하게, 프로파일 및 레벨 정보 (124) 는 디폴트 특성들로서 지정되거나 또는 예컨대, 프로파일 표시자 (profile_idc) 및 레벨 표시자 (level_idc) 값들로서 명시적으로 규정될 수도 있다.
의존성들 정보 (126) 는 구성요소 (112A) 가 구성요소들 (110) 의 그 밖의 구성요소들에 의존하는지 여부를 나타낼 수도 있다. 의존한다면, 의존성 정보 (126) 는 구성요소 (112A) 에 대한 시간 식별자 및 그 구성요소 (112A) 에 대한 시간 식별자와 구성요소 (112A) 가 의존하는 구성요소에 대한 시간 식별자 사이의 차이를 나타내는 정보를 포함할 수도 있다.
세그먼트 정보 (128) 는 구성요소 (112A) 의 세그먼트들을 기술한다. 세그먼트들은 파일들, 예컨대 파일들 (150) 에 저장될 수도 있다. 도 3 의 예에서, 구성요소 (112A) 의 세그먼트들에 대한 데이터는 아래에서 더욱더 자세하게 설명하는 바와 같이, 파일 (150A) 에, 구체적으로 말하면, 비디오 트랙 (158) 에, 저장될 수도 있다. 일부의 경우, 구성요소 (112A) 에 대한 세그먼트들은 다수의 파일들에 저장될 수도 있다. 각각의 세그먼트는 하나 이상의 단편들에 대응할 수도 있다. 각각의 단편에 대해, 세그먼트 정보 (128) 는 단편이 랜덤 액세스 포인트를 포함하는지 여부, 랜덤 액세스 포인트에 대한 유형 (예컨대, IDR 또는 ODR), 단편이 새로운 파일 (예컨대, 새로운 세그먼트) 에 대응하는지 여부, 단편의 시작에 대한 바이트 오프셋, 단편의 제 1 샘플에 대한 타이밍 정보 (예컨대, 디코딩 및/또는 디스플레이 시간), 다음 단편에 대한 바이트 오프셋, 존재한다면, 랜덤 액세스 포인트에 대한 바이트 오프셋, 및 ODR RAP 에서 스트림을 시작할 때 디코딩하는 것을 건너 뛸 샘플들의 개수를 시그널링할 수도 있다.
멀티플렉싱 간격 정보 (130) 는 구성요소 (112A) 에 대한 멀티플렉싱 간격들의 세트 또는 범위를 규정할 수도 있다. 3D 비디오 정보 (132) 는 구성요소 (112A) 가 3차원의 효과를, 예컨대, 2개 이상의 약간 상이한 장면의 뷰들을 동시에 또는 거의 동시에 디스플레이함으로써, 발생하기 위해 사용될 때에 포함될 수도 있다. 3D 비디오 정보 (132) 는 디스플레이될 뷰들의 개수, 뷰들에 대응하는 구성요소들에 대한 식별자들, 특정의 기본 비디오 구성요소에 대한 3D 표현의 시작 시간, 3D 표현의 시간 지속기간, 목표 해상도들 (예컨대, 궁극적으로 디스플레이될 때 3D 표현의 목표 폭 및 목표 높이), 측위 정보 (예컨대, 디스플레이 윈도우에서 수평 오프셋 및 수직 오프셋), 프리젠테이션을 위한 그 디코딩된 비디오 구성요소의 계층을 나타내는 윈도우 계층, 및 투명성 인자 (transparent factor) 를 포함할 수도 있다. 일반적으로, 낮은 윈도우 계층 값은 연관되는 비디오 구성요소가 조기에 렌더링되는 것을 나타낼 수도 있으며, 더 높은 계층 값을 가진 비디오 구성요소에 의해 커버될 수도 있다. 투명성 레벨 정보는 윈도우 레벨 정보와 결합될 수도 있다. 구성요소가 낮은 윈도우 계층 값을 갖는 또 다른 구성요소와 결합될 때, 그 밖의 구성요소에서 각각의 픽셀은 [투명성 레벨] / 255 의 값으로 가중될 수도 있으며, 현재의 구성요소에 함께 배치된 (collocated) 픽셀은 (255 - [투명성 레벨]) / 255 의 값으로 가중될 수도 있다.
도 3 은 구성요소들 (112, 142) 과 구성요소들 (112, 142) 에 대한 데이터를 포함하는 여러 파일들 (150) 사이의 대응을 도시한다. 이 예에서, 파일 (150A) 은 비디오 구성요소 (112A) 에 대한 인코딩된 샘플들을 비디오 트랙 (158) 의 유형으로, 및 오디오 구성요소 (142A) 에 대한 인코딩된 샘플들을 오디오 트랙 (160) 의 유형으로 포함한다. 파일 (150A) 은 또한 구성요소 배열 박스 (152A) 를 포함한다. 또한 이 예에서 도시된 바와 같이, 구성요소 배열 박스 (152A) 는 구성요소 대 비디오 트랙 맵 (component to video track map; 154) 및 구성요소 대 오디오 트랙 맵 (component to audio track map; 156) 을 포함한다. 구성요소 대 비디오 트랙 맵 (154) 은 구성요소 (112A) 에 대한 구성요소 식별자가 파일 (150A) 의 비디오 트랙 (158) 에 맵핑되는 것을 나타낸다. 이와 유사하게, 구성요소 대 오디오 트랙 맵 (156) 은 구성요소 (142A) 에 대한 구성요소 식별자가 파일 (150A) 의 오디오 트랙 (160) 에 맵핑되는 것을 나타낸다.
이 예에서, 구성요소 (112B) 는 파일 (150B) 의 비디오 트랙 (162) 에 대응하며, 구성요소 (142B) 는 파일 (150C) 의 오디오 트랙 (164) 에 대응한다. 따라서, 구성요소 배열 박스 (152B) 는 구성요소 (112B) 와 비디오 트랙 (162) 사이의 맵핑을 포함할 수도 있으며, 한편 구성요소 배열 박스 (152C) 는 구성요소 (142B) 와 오디오 트랙 (164) 사이의 맵핑을 포함할 수도 있다. 이러한 방법으로, 클라이언트 디바이스는 구성요소 맵 박스 (100) 및 구성요소 배열 박스들 (152) 을 취출하여, 요청할 구성요소들, 및 그 파일들 (150) 로부터 구성요소들에 대한 인코딩된 데이터에 어떻게 액세스할 것인지를 결정할 수도 있다.
아래의 의사 코드는 구성요소 맵 박스에 대한 데이터 구조의 하나의 예시적인 구현예이다.
aligned(8) class ComponentMapBox extends FullBox('cmmp', version, 0) {
unsigned int (32) box_length;
unsigned int (64) content_ID;
unsigned int (32) timescale;
unsigned int (8) video_component_count;
unsigned int (8) audio_component_count;
unsigned int (8) other_component_count;
bit (1) first_cmmp_flag; //디폴트 1
bit (1) more_cmmp_flag; //디폴트 0
bit (2) cmmp_byte_range_idc;
bit (1) multi_video_present_flag;
bit (2) multiplex_interval_idc;
bit (1) duration_signalled_flag;
bit (1) dynamic_component_map_mode_flag;
bit (7) reserved_bit;
if (duration_signalled_flag) {
unsigned int (64) starting_time;
unsigned int (64) duration;
}
for (i=1; i<= video_component_count; i++){
unsigned int (8) component_ID;
bit (1) average_bitrate_flag;
bit (1) maximum_bitrate_flag;
bit (1) default_characteristics_flag;
bit (2) resolution_idc;
bit (2) frame_rate_idc;
bit (2) codec_info_idc;
bit (2) profile_level_idc;
bit (1) dependency_flag;
bit (1) 3DVideo_flag;
bit (2) reserved_flag;
// 비트레이트
if (average_bitrate_flag)
unsigned int (32) avgbitrate;
if (maximum_bitrate_flage)
unsigned int (32) maxbitrate;
// 해상도
if (!default_characteristics_flag) {
if (resolution_idc == 1) {
unsigned int (16) 폭;
unsigned int (16) 높이;
}
else if (resolution_idc == 2)
unsigned int (8) same_cha_component_id;
// resolution_idc 가 0 일 때, 해상도는 규정되지 않으며,
// 그 값이 3 일 때, i-1 의 인덱스를 가진 구성요소와
// 동일한 해상도를 갖는다.
// 프레임 레이트
if (frame_rate_idc ==1)
unsigned int (32) frame_rate;
else if (frame_rate_idc == 2)
usngined int (8) same_cha_component_id;
// frame_rate_idc 가 0 일 때, 프레임 레이트는 규정되지 않으며,
// 그 값이 3 일 때, i-1 의 인덱스를 가진 구성요소와 동일한
// 프레임 레이트를 갖는다.
if (codec_info_idc == 1)
string [32] compressorname;
else if (codec_info_idc == 2)
unsingedn int (8) same_cha_component_id;
//profile_level
if (profile_level_idc == 1)
profile_level;
else if (profile_level_idc == 2)
unsigned int (8) same_cha_component_id;
}
if (dependency_flag) {
unsigned int (8) dependent_comp_count;
bit (1) temporal_scalability;
unsigned int (3) temporal_id;
bit (4) reserved;
for (j=1; j<= dependent_comp_count; j++) {
unsigned int (6) dependent_comp_id;
if (temporal_scalability)
unsigned int (2) delta_time_id;
}
}
if (3DV_flag) {
unsigned int (8) number_target_views;
}
// 세그먼트들
if (cmmp_byte_range_idc > 0) {
unsigned int (16) entry_count_byte_range;
for(j=1; i <= entry_count; j++) {
int (2) contains_RAP;
int (1) RAP_type;
bit (1) new_file_start_flag;
int (4) reserved;
unsigned int (32) reference_offset;
unsigned int (32) reference_delta_time;
if (cmmp_byt_rage_idc>0)
unsigned int (32) next_fragment_offset;
if (contain_RAP > 1) {
unsigned int (32) RAP_delta_time;
unsigned int (32) delta_offset;
}
if (contain_RAP > 0 && RAP_type !=0) {
unsigned int (32) delta_DT_PT;
unsigned int (8) number_skip_samples;
}
}
}
if (multiplex_interval_idc == 1) {
unsigned int (8) entry_count;
for (j=1; j<=entry_count;j++)
unsigned int (32) multiplex_time_interval;
}
else if (multiplex_interval_idc == 2) {
unsigned int (32) min_muliplex_time_interval;
unsigned int (32) max_muliplex_time_interval;
}
}
if (multi_video_present_flag) {
unsigned int (8) multi_video_group_count;
for (i=1; i<= multi_video_group_count; i++) {
unsigned int (8) basic_video_component_id;
unsigned int (8) extra_video_component_count;
int (64) media_time;
int (64) duration;
for (j=1; j<= extra_video_component_count; j++)
unsigned int (8) component_id;
for (j=0; j<= extra_video_component_count; j++) {
unsigned int (16) target_width;
unsigned int (16) target_height;
unsigned int (16) horizontal_offset;
unsigned int (16) vertical_offset;
unsigned int (4) window_layer;
unsigned int (8) transparent_level;
}
}
}
for (i=1; i<= audio_component_count; i++) {
unsigned int (8) component_ID;
bit (1) average_bitrate_flag;
bit (1) maximum_bitrate_flag;
bit (2) codec_info_idc;
bit (2) profile_level_idc;
...
// 비디오 구성요소들에 대한 구문 표와 유사
}
}
이 예에서 의사 코드 엘리먼트들의 의미들은 다음과 같다. 다른 예들에서, 다른 변수 이름들 및 의미들이 구성요소 맵 박스의 엘리먼트들에 할당될 수도 있는 것으로 이해되어야 한다. 이 예에서, box_length 는 구성요소 맵 박스의 길이를 바이트들의 단위로 나타낸다. content_ID 는 스트리밍 서버가 제공하는 콘텐츠의 고유 식별자를 규정한다.
timescale 은 전체 서비스에 대한 시간-척도를 규정하는 정수이다. 이것은 1초 내에 통과하는 시간 단위들의 개수이다. 예를 들어, 시간을 1/60 초로 측정하는 시간 좌표계는 60 의 시간 척도를 갖는다.
video_component_count 는 구성요소 맵 박스에 대응하는 서비스가 제공할 수 있는 대안적인 비디오 구성요소들의 개수를 규정한다. 이 박스에서 정의된 임의의 2개의 비디오 구성요소들은 서로 전환될 수 있다. 다수의 표현들로 이루어지는 비디오 프리젠테이션들이 있으면, 이런 프리젠테이션은 대안적인 비디오 구성요소 그룹에 속하는 하나의 구성요소를 포함할 수도 있다.
audio_component_count 는 구성요소 맵 박스에 대응하는 서비스가 제공할 수 있는 대안적인 오디오 구성요소들의 개수를 규정한다. 이 박스에 정의된 임의의 2개의 오디오 구성요소들은 서로 전환될 수 있다. other_component_count 는 구성요소 맵 박스에 대응하는 서비스의 다른 구성요소들의 개수를 규정한다.
first_cmmp_flag 는 이 구성요소 맵 박스가 그 연관되는 서비스에 대한 동일한 유형의 제 1 박스인지 여부를 나타낸다. more_cmmp_flag 는 이 구성요소 맵 박스가 그 연관되는 서비스에 대한 동일한 유형의 최종 박스인지 여부를 나타낸다.
0 인 값을 갖는 cmmp_byte_range_idc 는 바이트 범위 및 타이밍 정보가 구성요소 맵 박스에서 시그널링되지 않는다는 것을 나타낸다. 0 보다 큰 값을 갖는 cmmp_byte_range_idc 는 바이트 범위 및 타이밍 정보가 구성요소 맵 박스에서 시그널링된다는 것을 나타낸다. 1 인 값을 갖는 cmmp_byte_range_idc 는 오직 구성요소의 세그먼트의 시작 바이트 오프셋만이 시그널링된다는 것을 나타낸다. 2 인 값을 갖는 cmmp_byte_range_idc 는 시작 바이트 오프셋 및 구성요소의 세그먼트의 종료 바이트 오프셋 양자가 시그널링된다는 것을 나타낸다.
temporal_scalability 는 현재의 구성요소가 다음 시그널링된 콘텐츠 구성요소들에 의존하는지 여부를 나타내며, 이때, 다음 시그널링된 콘텐츠 구성요소들 중 적어도 하나는 낮은 temporal_id 를 갖는다. temporal_id 는 현재의 구성요소의 시간 식별자를 나타낸다. temporal_id 값은 temporal_scalability 값이 0 인 경우 무시될 수도 있다. delta_temporal_id 는 현재의 구성요소의 샘플들의 모두의 최고 시간 식별자 값과 그 의존적인 구성요소의 최고 시간 식별자 값의 차이를 나타낸다.
1 인 값을 갖는 multi_video_present_flag 는 하나 보다 많은 디코딩된 비디오 구성요소로부터 렌더링되는 비디오 프리젠테이션들이 존재한다는 것을 나타낸다. 예를 들어, 화면 속 화면의 경우, multi_video_present_flag 는 0 인 값을 가질 수도 있으며, 그 0 의 값은 어떤 비디오 프리젠테이션도 하나 보다 많은 디코딩된 비디오 구성요소에 의해 렌더링되지 않는다는 것을 나타낼 수도 있다.
0 인 값을 갖는 multiplex_interval_idc 는 멀티플렉싱 간격이 시그널링되지 않는다는 것을 나타낸다. 1 인 값을 갖는 multiplex_interval_idc 는 멀티플렉싱 간격들의 리스트가 시그널링된다는 것을 나타낸다. 2 인 값을 갖는 multiplex_interval_idc 는 멀티플렉싱 간격들의 범위가 시그널링된다는 것을 나타낸다.
duration_signalled_flag 는 구성요소 맵 박스가 대응하는 서비스의 지속기간이 시그널링되는지 여부를 나타낸다. 그 지속기간이 시그널링되지 않으면 (예컨대, duration_signalled_flag 가 0 인 값을 가질 때), 현재의 구성요소 맵 박스는 전체 서비스에 적용되는 것으로 가정된다.
dynamic_component_map_mode_flag 는 동적 모드가 현재의 구성요소 맵 박스에 대해 지원되는지 여부를 나타낸다. 1 인 값을 갖는 dynamic_component_map_mode_flag 는 정적 모드를 나타내며 동일한 서비스의 다음 구성요소 맵 박스가, 있다면, 동일한 파일에서 현재의 구성요소 맵 박스에 바로 뒤따른다. 0 인 값을 갖는 dynamic_component_map_mode_flag 는 동적 모드를 나타내며, 따라서, 동일한 서비스의 다음 구성요소 맵 박스가 상이한 수단에 의해 추후에 클라이언트로 송신될 것이다. 예를 들어, 다음 구성요소 맵 박스가 다음 파일의 영화 박스에 포함될 수도 있다.
starting_time 은 현재의 구성요소 맵 박스가 적용하는 서비스의 시작 시간을 나타낸다. 지속기간은 현재의 구성요소 맵 박스가 적용하는 콘텐츠의 지속기간을 나타낸다.
component_ID 는 구성요소의 고유 식별자이다. average_bitrate_flag 는 평균 비트 레이트가 그 연관되는 구성요소에 대해 시그널링되는지 여부를 나타낸다. maximum_bitrate_flag 는 최대 비트 레이트가 그 연관되는 구성요소에 대해 시그널링되는지 여부를 나타낸다. 도 3 의 비트레이트 값 (116) 은 그 의사 코드에서 average_bitrate_flag 및 maximum_bitrate_flag 중 어느 하나 또는 양자에 대응할 수도 있다. default_characteristics_flag 는 다음 특성들: 해상도, 프레임 레이트, 코덱 정보, 프로파일 및 레벨에 대해서, i 의 인덱스를 가진 현재의 구성요소가 i-1 의 인덱스를 가진 구성요소와 동일한 값들을 갖는지 여부를 나타낸다.
0 으로 설정되는 resolution_idc/ frame_rate_idc/codec_info_idc/profile_level_idc 값들은 그 연관되는 비디오 구성요소의 해상도, 프레임 레이트, 코덱 정보, 프로파일, 및/또는 레벨 (각각) 이 시그널링되지 않는다는 것을 나타낸다. resolution_idc 는 도 3 의 해상도 값 (118) 에 대응할 수도 있다. frame_rate_idc 는 도 3 의 프레임 레이트 값 (120) 에 대응할 수도 있다. codec_info_idc 는 도 3 의 코덱 정보 (info) 값 (122) 에 대응할 수도 있다. profile_level_idc 는 도 3 의 프로파일/레벨 값 (124) 에 대응할 수도 있다. 1 로 설정되는 이 값들은 그 연관되는 비디오 구성요소의 해상도, 프레임 레이트, 코덱 정보, 프로파일, 또는 레벨 (각각) 이 i-1 의 인덱스를 가진 비디오 구성요소와 동일하다는 것을 나타낸다. 2 로 설정되는 이 값들 중 임의의 값은 각각의 값이 값 "same_cha_component_id" 을 이용하여 시그널링된 하나의 특정 비디오 구성요소와 같다는 것을 나타낸다.
dependency_flag 는 현재의 비디오 구성요소의 의존성이 시그널링되는지 여부를 나타낸다. 그 구성요소가 다른 비디오 구성요소들에 의존한다고 dependency_flag 가 나타낼 때, 현재의 구성요소가 의존하는 구성요소들이 또한 시그널링될 수도 있다. 즉, 의존성이 시그널링되면, 대응하는 비디오 구성요소는 그 시그널링된 비디오 구성요소들에 의존한다. dependency_flag 값은, 현재의 구성요소가 의존하는 시그널링된 비디오 구성요소들과 함께, 도 3 의 의존성들 값 (126) 에 대응할 수도 있다.
3DVideo_flag 는 현재의 비디오 구성요소가 MVC 또는 3D 표현을 제공하는 다른 비디오 콘텐츠에 관련되는지 여부를 나타낸다. number_target_views 는 예컨대, MVC (멀티뷰 비디오 코딩) 로 코딩된 3D 비디오 구성요소를 디코딩할 때, 목표 뷰들의 개수를 규정한다. entry_count_byte_range 는 그 연관되는 구성요소에 대해 시그널링된 단편들의 개수를 규정한다. 3DVideo_flag, number_target_views, 및 entry_count_byte_range 는 일반적으로 도 3 의 3D 비디오 정보 값 (132) 에 대응할 수도 있다.
avgbitrate 는 그 연관되는 구성요소의 평균 비트레이트를 나타낸다. maxbitrate 는 임의의 초 간격으로 계산된 그 연관되는 구성요소의 최대 비트레이트를 나타낸다. 폭 및 높이는 루마 픽셀들의 유닛들에서, 그 디코딩된 비디오 구성요소의 해상도를 나타낸다.
same_resl_component_id 는 연관되는 비디오 구성요소의 동일한 특정의 특성들 (해상도 또는 프레임 레이트 또는 코덱 정보, 또는 프로파일 및 레벨) 을 갖는 비디오 구성요소의 구성요소 식별자를 나타낸다.
frame_rate 는 비디오 구성요소의 프레임 레이트를 256 초 당 프레임들로 나타낸다. compressorname 은 코덱의 브랜드, 예를 들어, "avc1" 를 나타내는 4 바이트 값이다. 이것은 파일 유형 박스의 major_brand 와 동일한 의미들을 갖는다. profile_level 은 현재의 비디오 구성요소를 디코딩하는데 요구되는 프로파일 및 레벨을 나타낸다. dependent_comp_count 는 그 연관되는 비디오 구성요소들에 대한 의존적인 비디오 구성요소의 개수를 나타낸다.
dependent_comp_id 는 연관되는 비디오 구성요소가 의존하는 비디오 구성요소들의 하나의 구성요소 식별자를 규정한다. 동일한 시간 인스턴스에서, 상이한 콘텐츠 구성요소들에서 샘플들은 콘텐츠 구성요소들의 인덱스의 오름차순으로 순서정렬될 수도 있다. 즉, j 의 인덱스를 가진 샘플은 j+1 의 인덱스를 가진 샘플보다 더 조기에 배치될 수도 있으며, 현재의 콘텐츠 구성요소의 샘플은 그 시간 인스턴스에서 최종 샘플일 수도 있다.
contains_RAP 은 구성요소의 단편들이 랜덤 액세스 포인트를 포함하는지 여부를 나타낸다. contains_RAP 은 그 단편이 임의의 랜덤 액세스 포인트를 포함하지 않으면 0 으로 설정된다. contains_RAP 은 그 단편이 랜덤 액세스 포인트를 그 단편 내에 제 1 샘플로서 포함하면 1 로 설정된다. contains_RAP 은 랜덤 액세스 포인트가 그 단편의 제 1 샘플이 아니면 2 로 설정된다. RAP_type 은 영화 단편의 참조된 트랙에 포함된 랜덤 액세스 포인트들 (RAPs) 의 유형을 규정한다. RAP_type 는 랜덤 액세스 포인트가 순간 디코더 리프레시 (IDR) 화상이면 0 으로 설정된다. RAP_type 는 랜덤 액세스 포인트가 개방 GOP 랜덤 액세스 포인트, 예컨대, 개방 디코더 리프레시 (ODR) 화상이면 1 로 설정된다.
new_file_start_flag 플래그는 단편이 파일 내 대응하는 구성요소의 제 1 단편인지 여부를 나타낸다. 이것은 현재의 나타낸 단편이 새로운 파일에 있다는 것을 암시한다. 이 시그널링은 상대적으로 작은 사이즈 파일들이 서버에서 사용되거나 또는 시간 스플리싱이 사용될 때 유리할 수도 있다.
reference_offset 은 그 단편을 포함하는 파일에서 단편의 시작 바이트에 대한 오프셋을 나타낸다. reference_delta_time 은 그 연관되는 단편의 디코딩 시간을 나타낸다. next_fragment_offset 은 그 단편을 포함하는 파일에서 그 연관되는 비디오 구성요소의 다음 단편의 시작 바이트 오프셋을 나타낸다. RAP_delta_time 은 제 1 IDR 랜덤 액세스 포인트와 그 단편의 제 1 샘플 사이의 디코딩 시간 차이를 나타낸다. delta_offset 은 단편의 제 1 샘플의 바이트 오프셋과 랜덤 액세스 포인트의 바이트 오프셋 사이의 바이트 오프셋 차이를 나타낸다.
delta_DT_PT 는 디코딩 시간과 ODR (개방 GOP 랜덤 액세스 포인트) 인 RAP 에 대한 프리젠테이션 시간의 차이를 나타낸다. number_skip_samples 는 ODR 에 앞선 프리젠테이션 시간 및 ODR 이후의 분해 시간을 갖는 샘플들의 개수를 나타내며, 이 ODR 은 영화 단편의 참조된 트랙의 제 1 RAP 일 수도 있다. 디코더가 ODR 에서 시작하는 스트림을 수신하면 디코더가 이들 샘플들의 디코딩을 건너 뛸 수도 있다는 점에 유의한다. contains_RAP, RAP_type, new_file_start_flag, reference_offset, refrence_delta_time, next_fragment_offset, RAP_delta_time, delta_offset, delta_DT_PT, 및 number_skip_samples 은 일반적으로 세그먼트 정보 (128) 에 대응할 수도 있다.
multiplex_time_interval 은 멀티플렉싱 간격을 그 연관되는 비디오 구성요소에 대해 시간척도 (timescale) 의 단위로 나타낸다. 비디오 구성요소들은 일반적으로 멀티플렉싱 간격 정보와 연관되지만, 멀티플렉싱 간격 정보는 또한 오디오 구성요소들에 대해 시그널링될 수도 있다. multiplex_time_interval 은 도 3 의 멀티플렉스 간격 값 (130) 에 대응할 수도 있다. min_muliplex_time_interval 및 max_muliplex_time_interval 은 멀티플렉싱 간격의 범위를 그 연관되는 비디오 구성요소에 대해 시간스케일의 단위로 나타낸다. multi_video_group_count 는 다수의 디코딩된 비디오 구성요소들의 조합으로서 디스플레이될 비디오 프리젠테이션들의 개수를 규정한다.
basic_video_component_id 는 기본 비디오 구성요소의 구성요소 식별자를 규정한다. 시그널링된 다른 여분의 비디오 구성요소들이 기본 비디오 구성요소와 함께 하나의 대안적인 비디오 프리젠테이션으로서 고려된다. 예를 들어, "비디오 구성요소들의 video_component_count 에 대해" 의 이전 루프가 CIDs 0, 1, 2, 3, 4, 5, 6 을 가진, 7개의 비디오 구성요소들을 포함한다고 가정한다. 3 의 숫자를 가진 basic_video_component_id 및 2개의 여분의 비디오 구성요소들 5 및 6 이 있다고 추가로 가정한다. 그러면, 오직 프리젠테이션들의 다음 그룹만이 서로 {0}, {1}, {2}, {3, 5, 6} 및 {4} 에 대안적이다.
media_time 은 basic_video_component_id 의 식별자를 갖는 기본 비디오 구성요소를 가진 멀티-비디오 표현의 시작 시간을 나타낸다. 지속기간 (duration) 은 basic_video_component_id 의 식별자를 가진 기본 비디오 구성요소를 갖는 멀티-비디오 프리젠테이션의 지속기간을 규정한다. target_width 및 target_height 는 이 멀티-비디오 프리젠테이션에서 비디오 구성요소의 목표 해상도를 규정한다. 이것이 비디오의 원래 해상도와 같지 않으면, 목적지 디바이스가 스케일링을 수행할 수도 있음에 유의한다.
horizontal_offset 및 vertical_offset 은 디스플레이 윈도우에서 수평 및 수직 오프셋들에서의 오프셋을 규정한다. window_layer 는 프리젠테이션을 위한 디코딩된 비디오 구성요소의 계층을 나타낸다. 낮은 계층 값은 그 연관되는 비디오 구성요소가 조기에 렌더링된다는 것을 나타낼 수도 있으며, 더 높은 계층 값을 가진 비디오 구성요소에 의해 커버될 수도 있다. 디코딩된 비디오 구성요소들은 window_layer 값들의 오름차순으로 렌더링될 수도 있다.
transparent_level 는 이 디코딩된 비디오가 현재의 비디오 구성요소보다 낮은 window_layer 과 결합될 때 사용되는 투명성 인자를 나타낸다. 각각의 픽셀에 대해, 기존 픽셀은 transparent_level/255 의 값으로 가중될 수도 있으며, 현재의 디코딩된 비디오 구성요소에서 함께 배열된 픽셀은 (255 - transparent_level)/255 의 값으로 가중될 수도 있다.
아래의 의사 코드는 구성요소 배열 박스에 대한 데이터 구조의 하나의 예시적인 구현예이다.
aligned(8) class ComponentArrangeBox extends FullBox('cmar', version, 0) {
unsigned int (64) content_ID;
unsigned int (8) component_count;
bit (1) track_map_flag;
bit (1) sub_fragment_flag;
bit (1) agg_fragment_flag;
for (i=1; i<= component_count; i++) {
unsigned int (8) component_ID;
if (track_map_flag)
unsigned int (32) track_id;
}
if (sub_fragment_flag) {
unsigned int (8) major_component_count;
for (i=1; i<= major_component_count; i++) {
unsigned int (8) full_component_ID;
unsigned int (8) sub_set_component_count;
for (j=1; j< sub_set_component_count; j++)
unsigned int (8) sub_set_component_ID;
}
}
if (agg_fragment_flag) {
unsigned int (8) aggregated_component_count;
for (i=1; i<= aggregated_component_count; i++) {
unsigned int (8) aggr_component_id;
for (j=1; j<= dependent_component_count; j++)
unsigned int (8) depenedent_component_ID;
}
}
}
이 예에서 의사 코드 엘리먼트들의 의미들 (semantics) 은 다음과 같다. 다른 예들에서, 다른 변수 이름들 및 의미들은 구성요소 배열 박스의 엘리먼트들에 할당될 수도 있는 것으로 이해되어야 한다.
component_count 는 현재의 파일에서 구성요소들의 개수를 규정한다. track_map_flag 는 content_ID 의 서비스 식별자를 가진 서비스의 구성요소들에의 이 파일에서의 트랙들의 맵핑이 시그널링되는지 여부를 나타낸다.
sub_fragment_flag 는 구성요소들에의 이 파일에서의 하위 트랙들의 맵핑이 시그널링되는지 여부를 나타낸다. agg_fragment_flag 는 구성요소들에의 이 파일에서의 트랙 집합들의 맵핑이 시그널링되는지 여부를 나타낸다. major_component_count 는 그 파일에 모든 샘플들을 포함하는 주요 구성요소들의 개수를 나타낸다.
component_ID 값들은 파일에 저장된 주요 구성요소들, 대략, 각각의 영화 단편에서 각각의 구성요소의 제 1 샘플의 식별자들을 나타낸다. track_id 는 component_ID 의 구성요소 식별자를 가진 구성요소에 대응하는 트랙의 식별자를 나타낸다.
sub_set_component_count 는 full_component_ID 의 component_id 를 가진 구성요소의 전체 세트를 형성하는 하위 구성요소들의 개수를 나타낸다. sub_set_component_ID 는 full_component_ID 의 component_id 을 가진 구성요소의 전체 세트를 형성하는 하위 구성요소들의 component_id 값들을 규정한다. 동일한 구성요소의 임의의 2개의 서브 구성요소들은 중첩된 샘플들을 갖지 않는다.
일부 예들에서, aggregated_component_count 는 그 파일 내 다른 구성요소들로부터 집합된 콘텐츠 구성요소들의 개수를 나타낸다. 일부 예들에서, aggregated_component_count 는 aggr_component_id 의 구성요소 식별자를 가진 그 집합된 콘텐츠 구성요소를 집합하는데 요구되는 의존적인 구성요소들의 개수를 나타낸다. aggr_component_id 는 집합된 구성요소의 구성요소 식별자를 규정한다. depenedent_component_ID 는 aggr_component_id 의 id 를 가진 구성요소를 집합하는데 사용되는 구성요소들의 구성요소 id 를 규정한다.
아래의 표 1 은 본 개시물의 기법들에 부합하는 구문 오브젝트들의 또 다른 예시적인 세트를 도시한다. "엘리먼트 또는 속성 이름" 칼럼은 구문 오브젝트의 이름을 기술한다. "유형 (type)" 칼럼은 구문 오브젝트가 엘리먼트 또는 속성인지 여부를 기술한다. "원소 개수" 칼럼은 구문 오브젝트의 원소 개수 (cardinality), 즉, 표 1 에 대응하는 데이터 구조의 인스턴스에서 구문 오브젝트의 인스턴스들의 개수를 기술한다. "선택성 (optionality)" 칼럼은 구문 오브젝트가 옵션적인지 여부를 기술하며, 이 예에서, "M" 은 강제적임을 나타내고, "O" 는 옵션적임을 나타내고, "OD" 는 디폴트 값으로 옵션적임을 나타내고, "CM" 은 조건부 강제적임을 나타낸다. "설명" 칼럼은 대응하는 구문 오브젝트의 의미들을 기술한다.
Figure 112013013508207-pct00001
Figure 112013013508207-pct00002
Figure 112013013508207-pct00003
Figure 112013013508207-pct00004
도 3 의 예에 있어, 클라이언트 디바이스는 구성요소 맵 박스 (100) 를 요청할 수도 있으며, 이 구성요소 맵 박스는 비디오 구성요소들 (110) 및 오디오 구성요소들 (140) 의 특성들에 대한 정보를 포함한다. 예를 들어, 구성요소 (112A) 는 구성요소 특성들 (114A) 에 의해 기술된다. 이와 유사하게, 그 밖의 구성요소들 각각은 구성요소 특성들 (114A) 에 유사한 구성요소 특성들 정보에 의해 기술된다. 클라이언트 디바이스는 또한 구성요소 배열 박스들 (152) 을 취출할 수도 있으며, 이 구성요소 배열 박스들은 오디오 및 비디오 데이터의 구성요소 식별자들과 트랙들, 예컨대 비디오 트랙들 (158, 162) 및 오디오 트랙들 (160, 164) 사이의 맵핑들을 기술한다. 이러한 방법으로, 구성요소 맵 박스 (100) 는 파일들 (150) 로부터 개별적으로 저장되며, 그 파일들은 오디오 및 비디오 데이터의 코딩된 샘플들을 포함한다. 클라이언트 디바이스는 구성요소 맵 박스 (100) 및 구성요소 배열 박스들 (152) 의 데이터를 이용하여, 콘텐츠의 표현을 선택하고 그 선택된 구성요소들의 세그먼트들을, 예컨대, 네트워크 스트리밍 프로토콜, 예컨대 HTTP 스트리밍에 따라서 요청할 수도 있다.
도 4 은 비디오 구성요소 (180) 및 오디오 구성요소 (184) 를 멀티플렉싱하는 예시적인 타이밍 간격 (190) 을 도시하는 개념도이다. 이 예에서, 표현은 비디오 구성요소 (180) 및 오디오 구성요소 (184) 를 포함한다. 비디오 구성요소 (180) 는 비디오 단편들 (182A-182D) (비디오 단편들 (182)) 을 포함하는 반면, 오디오 구성요소 (184) 는 오디오 단편들 (186A-186C) (오디오 단편들 (186)) 을 포함한다. 비디오 단편들 (182) 은 인코딩된 비디오 샘플들을 포함할 수도 있는 반면, 오디오 단편들 (186) 은 인코딩된 오디오 샘플들을 포함할 수도 있다.
비디오 단편들 (182) 및 오디오 단편들 (186) 은 비디오 구성요소 (180) 및 오디오 구성요소 (184) 내에 각각 디코딩 시간 순서로 정렬될 수도 있다. 도 4 의 축 (188) 은 비디오 구성요소 (180) 및 오디오 구성요소 (184) 에 대한 디코딩 시간 정보를 나타낸다. 이 예에서, 디코딩 시간은 축 (188) 로 나타낸 바와 같이, 좌측으로부터 우측으로 증가한다. 따라서, 클라이언트 디바이스는 예를 들어, 비디오 단편 (182B) 이전에, 비디오 단편 (182A) 를 디코딩할 수도 있다.
또한, 도 4 는 1 초의 예시적인 타이밍 간격 (190) 을 도시한다. 본 개시물의 기법들에 따르면, 비디오 구성요소 (180) 및 오디오 구성요소 (184) 에 대한 구성요소 맵 박스는, 타이밍 간격 (190) 이 타이밍 간격들의 잠재적인 세트의 하나임을 나타내거나, 또는 타이밍 간격 (190) 을 포함하는 타이밍 간격들의 범위를 나타낼 수도 있다. 클라이언트 디바이스는 이 정보를 이용하여, 버퍼 오버플로우 (overflow) 를 피할 뿐만 아니라, 다음 정보의 세트가 네트워크를 통해서 스트리밍되기 전에 디코딩될 수 있는 충분한 양의 데이터가 버퍼링되는 것을 보장하는 방법으로, 비디오 구성요소 (180) 및 오디오 구성요소 (184) 로부터 단편들을 요청할 수도 있다.
위에서 언급한 바와 같이, 본 개시물은 네트워크 스트리밍 상황들에 관한 것이며, 여기서, 클라이언트는 데이터를 서버로부터 연속적으로 요청하고 데이터가 취출됨에 따라 데이터를 디코딩하고 렌더링한다. 예를 들어, 비디오 단편 (182A) 및 오디오 단편 (186A) 의 데이터를 디코딩하고 렌더링하는 동안, 클라이언트 디바이스는 비디오 단편 (182B) 및 오디오 단편 (186B) 을 요청할 수도 있다. 도 4 의 예에 나타낸 바와 같이, 비디오 단편들 (182) 및 오디오 단편들 (186) 은 반드시 시간적으로 정렬되지는 않는다. 따라서, 클라이언트 디바이스는 타이밍 간격 정보를 이용하여, 비디오 구성요소 (180) 및 오디오 구성요소 (184) 의 후속 단편들의 데이터를 요청할 시점을 결정할 수도 있다.
일반적으로, 클라이언트 디바이스는 다음 타이밍 간격 내에 시작 디코딩 시간을 가진 단편들을 취출하도록 구성될 수도 있다. 구성요소가 다음 타이밍 간격 내에 시작 디코딩 시간을 갖는 단편을 포함하면, 클라이언트는 그 단편을 요청할 수도 있다. 그렇지 않고, 클라이언트는 후속 타이밍 간격까지 그 구성요소로부터의 데이터에 대한 요청을 건너뛸 수도 있다.
도 4 의 예에서, 타이밍 간격 (190) 은 1 초와 같다. 비디오 구성요소 (180) 의 비디오 단편들 (182) 의 디코딩 시간 값들은 이 예에서, 비디오 단편 (182A) 에 대해 N-1 초, 비디오 단편 (182B) 에 대해 N+1.2 초, 비디오 단편 (182C) 에 대해 N+2.1 초, 그리고 비디오 단편 (182D) 에 대해 N+3.3 초일 수도 있다. 오디오 구성요소 (184) 의 오디오 단편들 (186) 의 디코딩 시간 값들은 이 예에서, 오디오 단편 (186A) 에 대해 N-.2 초, 오디오 단편 (186B) 에 대해 N+1.3 초, 그리고 오디오 단편 (186C) 에 대해 N+3.2 초일 수도 있다.
일 예로서, 목적지 디바이스 (40) 에서 다음 다가오는 로컬 디코딩 시간이 N+2 초라고 가정한다. 따라서, 목적지 디바이스 (40) 는 어느 구성요소 단편들이 N+2 와 N+3 초 사이의 디코딩 시간, 즉, 로컬 디코딩 시간 플러스 타이밍 간격 (190) 을 갖는지를 결정할 수도 있다. N+2 와 N+3 초 사이의 시작 디코딩 시간들을 갖는 구성요소들의 단편들은 요청되는 다음 단편들에 대응할 수도 있다. 이 예에서, 비디오 단편 (182C) 은 N+2 와 N+3 초 사이의 디코딩 시간을 갖는다. 따라서, 목적지 디바이스 (40) 는 비디오 단편 (182C) 을 취출하라는 요청, 예컨대, 비디오 단편 (182C) 의 바이트 범위를 규정하는 HTTP 부분 취득 요청을 서브밋할 수도 있다. 오디오 단편들 (186) 중 어느 것도 N+2 와 N+3 사이의 디코딩 시간을 갖지 않기 때문에, 목적지 디바이스 (40) 는 오디오 단편들 (186) 의 임의의 단편에 대한 요청을 아직도 서브밋하지 않을 것이다.
또 다른 예로서, 다가오는 로컬 디코딩 시간이 N+3 초일 때, 목적지 디바이스 (40) 는 비디오 단편 (182D) 및 오디오 단편 (186C) 에 대한 요청들을 서브밋할 수도 있다. 즉, 비디오 단편 (182D) 및 오디오 단편 (186C) 는 N+3 초와 N+4 초 사이의 디코딩 시간들을 갖는다. 따라서, 목적지 디바이스 (40) 는 비디오 단편 (182D) 및 오디오 단편 (186C) 에 대한 요청들을 서브밋할 수도 있다.
또한 또 다른 예로서, 타이밍 간격 (190) 이 2 초였다고 대신 가정한다. 로컬 디코딩 시간이 N+1 초였으면, 목적지 디바이스 (40) 는 먼저 비디오 단편들 (182B 및 182C) 및 오디오 단편 (186B) 가 N+1 초와 N+3 초 사이의 디코딩 시간들을 갖는다고 결정할 수도 있다. 따라서, 목적지 디바이스 (40) 는 비디오 단편들 (182B 및 182C) 및 오디오 단편 (186B) 에 대한 요청들을 서브밋할 수도 있다.
도 5 은 구성요소 맵 박스 및 구성요소 배열 박스들을 서버로부터 클라이언트에 제공하는 예시적인 방법을 도시하는 플로우차트이다. 도 5 는 또한 프리젠테이션을 형성하는 구성요소들을 선택하고 그 선택된 구성요소들의 인코딩된 샘플들을 요청하기 위해 구성요소 맵 박스 및 구성요소 배열 박스들을 이용하는 예시적인 방법을 도시한다. 일반적으로 도 1 의 소스 디바이스 (20) 및 목적지 디바이스 (40) 에 대해 설명하지만, 다른 디바이스들이 도 5 의 기법들을 구현할 수도 있는 것으로 이해되어야 한다. 예를 들어, 스트리밍 프로토콜을 통해서 통신하도록 구성된 임의의 서버 및 클라이언트가 이들 기법들을 구현할 수도 있다.
먼저, 소스 디바이스 (20) 는 인코딩된 비디오 샘플들을 수신할 수도 있다 (200). 소스 디바이스 (20) 는 또한 인코딩된 오디오 샘플들을 수신할 수도 있다. 수신된 샘플들은 공통 콘텐츠에 대응한다. 수신된 샘플들은 콘텐츠의 여러 구성요소들에 대응할 수도 있다. 소스 디바이스 (20) 는 어느 구성요소들에 샘플들이 대응하는지를 결정할 수도 있다. 소스 디바이스 (20) 는 또한 샘플들을 하나 이상의 파일들에 콘텐츠의 구성요소들로서 저장할 수도 있다 (202). 소스 디바이스 (20) 는 구성요소가 하나 이상의 단편들을 포함할 수 있고 그리고 동일한 구성요소의 단편들이 별개의 파일들에 저장될 수도 있도록, 샘플들을 단편들의 유형으로 배열할 수도 있다.
콘텐츠의 구성요소들을 하나 이상의 파일들에 저장한 후, 소스 디바이스 (20) 는 그 파일들 각각에 대해 구성요소 배열 박스들을 발생할 수도 있다 (204). 위에서 설명한 바와 같이, 구성요소 배열 박스들은 파일의 구성요소 식별자들과 트랙 식별자들 사이에 맵핑을 제공할 수도 있다. 소스 디바이스 (20) 는 또한 콘텐츠의 구성요소들의 모두를 기술하는 구성요소 맵 박스를 발생할 수도 있다 (206). 위에서 설명한 바와 같이, 구성요소 맵 박스는 예를 들어, 비트 레이트들, 프레임 레이트들, 해상도, 코덱 정보, 프로파일 및 레벨 정보, 구성요소들 사이의 의존성들, 세그먼트 정보, 멀티플렉싱 간격들, 그 콘텐츠의 구성요소들 내의 단편들의 바이트 범위들을 기술하는 세그먼트 정보, 및/또는 3D 비디오 정보와 같은, 콘텐츠의 구성요소들의 특성들을 기술할 수도 있다.
일부 예들에서, 소스 디바이스 (20) 는 인코딩된 비디오 샘플들을 포함하는 파일들 및 구성요소 맵 박스 뿐만 아니라, 구성요소 배열 박스들을 소스 디바이스 (20) 내에 로컬로 저장할 수도 있다. 다른 예들에서, 소스 디바이스 (20) 는 그 파일들 및 구성요소 맵 박스를 클라이언트들에 제공되는 별개의 서버 디바이스로 스트리밍 네트워크 프로토콜을 통해서 전송할 수도 있다. 도 5 의 예에서, 소스 디바이스 (20) 가 그 파일들을 저장하고 스트리밍 네트워크 프로토콜, 예컨대 HTTP 스트리밍을 구현한다고 가정한다.
따라서, 목적지 디바이스 (40) 는 소스 디바이스 (20) 에게 구성요소 맵 박스 및 구성요소 배열 박스들을 요청할 수도 있다 (208). 예를 들어, 목적지 디바이스 (40) 는 구성요소 맵 박스 및 구성요소 배열 박스들에 대한 요청을 소스 디바이스 (20) 로 HTTP 스트리밍, 예컨대, 그 콘텐츠와 연관되는 URL 에서 송신된 헤드 요청에 따라서 전송할 수도 있다. 그 요청을 수신하는 것에 응답하여 (210), 소스 디바이스 (20) 는 구성요소 맵 박스 및 구성요소 배열 박스들을 목적지 디바이스 (40) 에 제공할 수도 있다 (212).
구성요소 맵 박스 및 구성요소 배열 박스들을 수신한 후에 (214), 목적지 디바이스 (40) 는 요청할 구성요소들을 구성요소 맵 박스 내에 포함된 데이터에 기초하여 결정할 수도 있다. 예를 들어, 목적지 디바이스 (40) 는 목적지 디바이스 (40) 가 특정의 구성요소들을 해상도, 프레임 레이트, 코덱 정보, 프로파일 및 레벨 정보, 및 3D 비디오 정보에 기초하여 디코딩하고 렌더링할 수 있는지 여부를 결정할 수도 있다. 목적지 디바이스 (40) 는 또한 가용 대역폭과 같은 현재의 네트워크 조건들을 결정하고 그 현재의 네트워크 조건들에 기초하여 구성요소들을 선택할 수도 있다. 예를 들어, 목적지 디바이스 (40) 는 더 적은 대역폭이 이용가능할 때는 상대적으로 낮은 비트레이트, 또는 더 많은 대역폭이 이용가능할 때는 상대적으로 더 높은 비트레이트를 갖는 구성요소들을 선택할 수도 있다. 또 다른 예로서, 목적지 디바이스 (40) 는 멀티플렉싱 간격을 현재의 네트워크 조건들에 기초하여 선택하고, 박스로 나타낸 바와 같은 가능한 멀티플렉싱 간격들에 기초하여 멀티플렉싱 간격을 변경함으로써, 변하는 네트워크 조건들에 적응시킬 수도 있다. 그 선택된 구성요소가 또 다른 구성요소에 의존하면, 목적지 디바이스 (40) 는 선택된 구성요소 및 그 선택된 구성요소가 의존하는 구성요소 양자를 요청할 수도 있다.
요청할 구성요소들을 선택한 후, 목적지 디바이스 (40) 는 그 수신된 구성요소 배열 박스들에 기초하여 그 선택된 구성요소들에 대한 데이터를 저장하고 있는 파일들을 결정할 수도 있다 (218). 예를 들어, 목적지 디바이스 (40) 는 그 구성요소 배열 박스들을 분석하여, 파일이 선택된 구성요소의 구성요소 식별자와 파일의 트랙 사이의 맵핑을 갖는지 여부를 결정할 수도 있다. 그렇다면, 목적지 디바이스 (40) 는 그 파일로부터 데이터를 예컨대, 스트리밍 네트워크 프로토콜에 따라서 요청할 수도 있다 (220). 그 요청들은 어쩌면, 그 파일들의 바이트 범위를 규정하는, 그 파일들의 URLs 또는 URNs 에 대한 HTTP 취득 또는 부분 취득 요청들을 포함하며, 이때 바이트 범위들은 그 파일들에 의해 저장된 구성요소들의 단편들에 대응할 수도 있다.
목적지 디바이스 (40) 는 구성요소들의 순차적인 부분들을 취출하라는 다수의 요청들을 그 선택된 멀티플렉싱 간격에 기초하여 서브밋할 수도 있다. 즉, 초기에, 목적지 디바이스 (40) 는 그 선택된 구성요소들 각각으로부터 단편들을 먼저 요청할 수도 있다. 그 후, 목적지 디바이스 (40) 는 다음 멀티플렉싱 간격에 대해, 각각의 구성요소에 대한 다음 멀티플렉싱 간격 내에서 시작하는 단편이 있는지 여부를 결정하고, 만약 있다면, 그 단편(들) 을 요청할 수도 있다. 이러한 방법으로, 목적지 디바이스 (40) 는 단편들을 구성요소들로부터 멀티플렉싱 간격에 기초하여 요청할 수도 있다. 목적지 디바이스 (40) 는 또한 예컨대, 멀티플렉싱 간격을 변경하거나 또는 상이한 구성요소들로부터 데이터를 요청함으로써, 네트워크 조건들을 주기적으로 재평가하여, 변하는 네트워크 조건들에의 적응을 수행할 수도 있다. 어쨌든, 그 요청들에 응답하여, 소스 디바이스 (20) 는 그 요청된 데이터를 목적지 디바이스 (40) 로 출력할 수도 있다 (222).
하나 이상의 예들에서, 설명되는 기법들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현되는 경우, 그 기능들은 컴퓨터 판독가능 매체 상에 하나 이상의 명령들 또는 코드들로서 저장되거나 또는 송신되고, 하드웨어-기반의 프로세싱 유닛에 의해 실행될 수도 있다. 컴퓨터 판독가능 매체는 컴퓨터 판독가능 저장 매체를 포함할 수도 있으며, 이 저장 매체는 데이터 저장 매체와 같은 유형의 매체, 또는 예컨대, 통신 프로토콜에 따라서 한 장소로부터 다른 장소로의 컴퓨터 프로그램의 전송을 용이하게 하는 임의의 매체를 포함하는 통신 매체에 대응한다. 이러한 방법으로, 컴퓨터 판독가능 매체는 일반적으로 (1) 비일시성인 유형의 컴퓨터 판독가능 저장 매체 또는 (2) 신호 또는 캐리어 파와 같은 통신 매체에 대응할 수도 있다. 데이터 저장 매체는 본 개시물에서 설명하는 기법들의 구현을 위한 명령들, 코드 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 가용 매체일 수도 있다. 컴퓨터 프로그램 제품은 컴퓨터 판독가능 매체를 포함할 수도 있다.
일 예로서, 이에 한정하지 않고, 이런 컴퓨터 판독가능 저장 매체는 RAM, ROM, EEPROM, CD-ROM 또는 다른 광디스크 저장, 자기디스크 저장, 또는 다른 자기 저장 디바이스들, 플래시 메모리, 또는 원하는 프로그램 코드를 명령들 또는 데이터 구조들의 형태로 저장하는데 사용될 수 있고 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 또한, 임의의 접속이 컴퓨터 판독가능 매체로 적절히 지칭된다. 예를 들어, 동축 케이블, 광섬유 케이블, 이중 권선, 디지털 가입자 회선 (DSL), 또는 무선 기술들 예컨대 적외선, 무선, 및 마이크로파를 이용하여 명령들이 웹사이트, 서버, 또는 다른 원격 소오스로부터 송신되는 경우, 동축 케이블, 광섬유 케이블, 이중 권선, DSL, 또는 무선 기술들 예컨대 적외선, 무선, 및 마이크로파가 그 매체의 정의에 포함된다. 그러나, 컴퓨터 판독가능 저장 매체 및 데이터 저장 매체는 접속부들, 캐리어 파들, 신호들, 또는 다른 일시적 매체를 포함하지 않으며, 그 대신, 비-일시성의, 유형의 저장 매체에 송신되는 것으로 이해되어야 한다. 디스크 (disk) 및 디스크 (disc) 는, 본원에서 사용할 때, 컴팩트 디스크 (CD), 레이저 디스크, 광 디스크, 디지털 다기능 디스크 (DVD), 플로피 디스크 및 블루-레이 디스크를 포함하며, 본원에서, 디스크들 (disks) 은 데이터를 자기적으로 보통 재생하지만, 디스크들 (discs) 은 레이저로 데이터를 광학적으로 재생한다. 앞에서 언급한 것들의 조합들이 또한 컴퓨터 판독가능 매체들의 범위 내에 포함되어야 한다.
명령들은 하나 이상의 프로세서들, 예컨대 하나 이상의 디지털 신호 프로세서들 (DSPs), 범용 마이크로프로세서들, 주문형 집적회로들 (ASICs), 필드 프로그래밍가능 로직 어레이들 (FPGAs), 또는 다른 등가의 통합 또는 이산 로직 회로에 의해 실행될 수도 있다. 따라서, 용어 "프로세서" 는, 본원에서 사용될 때, 전술한 구조 또는 본원에서 설명하는 기법들의 구현에 적합한 임의의 다른 구조 중 임의의 구조를 지칭할 수도 있다. 게다가, 일부 양태들에서, 본원에서 설명하는 기능은 전용 하드웨어 및/또는 인코딩 및 디코딩을 위해 구성되는 소프트웨어 모듈들 내에 제공되거나, 또는 결합된 코덱에 포함될 수도 있다. 또한, 이 기법들은 하나 이상의 회로들 또는 로직 엘리먼트들로 완전히 구현될 수 있다.
본 개시물의 기법들은 무선 핸드셋, 집적 회로 (IC) 또는 ICs 의 세트 (예컨대, 칩 세트) 를 포함한, 매우 다양한 디바이스들 또는 장치들로 구현될 수도 있다. 여러 구성요소들, 모듈들, 또는 유닛들이 개시한 기법들을 수행하도록 구성되는 디바이스들의 기능적 양태들을 본 개시물에서 설명되지만, 상이한 하드웨어 유닛들에 의한 실현을 반드시 필요로 하지는 않는다. 더 정확히 말하면, 위에서 설명한 바와 같이, 여러 유닛들은 코덱 하드웨어 유닛에 결합되거나 또는 적합한 소프트웨어 및/또는 펌웨어와 함께, 위에서 설명한 바와 같은 하나 이상의 프로세서들을 포함한, 상호작용하는 하드웨어 유닛들의 컬렉션에 의해 제공될 수도 있다.
여러 예들이 설명되었다. 이들 및 다른 예들은 다음 청구항들의 범위 이내이다.

Claims (54)

  1. 캡슐화된 비디오 데이터를 전송하는 방법으로서,
    클라이언트 디바이스에 비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 전송하는 단계로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 또는 상기 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 상기 특성들을 전송하는 단계;
    상기 특성들을 전송한 후, 상기 클라이언트 디바이스로부터 상기 구성요소들 중 적어도 하나의 구성요소들에 대한 요청을 수신하는 단계; 및
    상기 요청에 응답하여 상기 요청된 구성요소들을 상기 클라이언트 디바이스에 전송하는 단계를 포함하는, 캡슐화된 비디오 데이터를 전송하는 방법.
  2. 제 1 항에 있어서,
    상기 구성요소들 중 적어도 2개의 구성요소들은 별개의 파일들에 저장되고,
    상기 특성들을 전송하는 단계는, 상기 구성요소들 중 상기 적어도 2개의 구성요소들 각각에 대한 특성들을 포함하는 데이터 구조를 전송하는 단계를 포함하는, 캡슐화된 비디오 데이터를 전송하는 방법.
  3. 제 1 항에 있어서,
    상기 구성요소들에 대한 특성들을, 상기 구성요소들에 대한 인코딩된 샘플들을 저장하는 하나 이상의 파일들과는 별개인 파일에 저장하는 단계를 더 포함하고,
    상기 특성들을 전송하는 단계는,
    상기 특성들이 저장되는 상기 파일에 대한 제 1 요청을 수신하는 단계; 및
    상기 제 1 요청에 응답하여, 상기 인코딩된 샘플들을 저장하는 상기 하나 이상의 파일들과는 독립적으로 상기 파일을 전송하는 단계를 포함하고,
    상기 비디오 구성요소들 중 적어도 하나의 비디오 구성요소들에 대한 요청은 제 2 의 상이한 요청을 포함하는, 캡슐화된 비디오 데이터를 전송하는 방법.
  4. 제 1 항에 있어서,
    상기 구성요소들 각각에 대한 특성들을 단일 데이터 구조로 저장하는 단계로서, 상기 데이터 구조는 상기 구성요소들과는 별개인, 상기 특성들을 저장하는 단계;
    상기 데이터 구조를 상기 복수의 표현들을 포함하는 멀티미디어 콘텐츠와 연관시키는 식별자를 상기 데이터 구조에 할당하는 단계; 및
    고유 식별자들을 상기 멀티미디어 콘텐츠의 상기 표현들에 할당하는 단계를 더 포함하고,
    상기 특성들을 전송하는 단계는 상기 데이터 구조를 전송하는 단계를 포함하는, 캡슐화된 비디오 데이터를 전송하는 방법.
  5. 제 1 항에 있어서,
    상기 특성들을 전송하는 단계는 상기 구성요소들에 대한 구성요소 식별자 값들을 전송하는 단계를 더 포함하고,
    상기 구성요소 식별자 값들 중 적어도 하나의 구성요소 식별자 값은, 상기 구성요소 식별자 값들 중 상기 적어도 하나의 구성요소 식별자 값에 대응하는 구성요소에 대한 트랙 식별자 값과는 상이한, 캡슐화된 비디오 데이터를 전송하는 방법.
  6. 제 5 항에 있어서,
    상기 구성요소들에 대한 인코딩된 샘플들을 저장하는 하나 이상의 파일들에서 상기 구성요소들에 대한 구성요소 식별자 값들과 상기 구성요소들에 대한 트랙 식별자 값들 사이의 대응을 나타내는 정보를 전송하는 단계를 더 포함하는, 캡슐화된 비디오 데이터를 전송하는 방법.
  7. 제 6 항에 있어서,
    상기 하나 이상의 파일들의 구성요소들 각각에 대해, 상기 구성요소 내의 단편들에 대한 바이트 오프셋들, 상기 단편들에서의 제 1 샘플들의 디코딩 시간들, 상기 단편들에서의 랜덤 액세스 포인트들, 및 상기 단편들이 상기 구성요소의 새로운 세그먼트에 속하는지 여부의 표시들을 나타내는 정보를 전송하는 단계를 더 포함하는, 캡슐화된 비디오 데이터를 전송하는 방법.
  8. 제 1 항에 있어서,
    상기 특성들을 전송하는 단계는, 상기 구성요소들의 세트가 서로 전환가능하다는 것을 나타내는 정보를 전송하는 단계를 포함하고,
    상기 요청은 상기 구성요소들의 세트 중 적어도 하나를 규정하는, 캡슐화된 비디오 데이터를 전송하는 방법.
  9. 제 1 항에 있어서,
    상기 특성들을 전송하는 단계는, 상기 구성요소들 사이의 의존성들, 및 액세스 유닛에서의 상기 구성요소들의 디코딩 순서에 대한 상기 구성요소들 사이의 상기 의존성들의 순서 (ordering) 를 나타내는 정보를 전송하는 단계를 더 포함하는, 캡슐화된 비디오 데이터를 전송하는 방법.
  10. 제 1 항에 있어서,
    상기 특성들을 전송하는 단계는, 상기 구성요소들 사이의 의존성들, 및 제 1 구성요소와 상기 제 1 구성요소에 의존하는 제 2 구성요소 사이의 시간 계층 차이를 나타내는 정보를 전송하는 단계를 포함하는, 캡슐화된 비디오 데이터를 전송하는 방법.
  11. 제 1 항에 있어서,
    상기 특성들을 전송하는 단계는, 상기 복수의 표현들 중 하나 이상의 표현들에 대한 출력을 위한 목표 뷰들의 개수를 나타내는 정보를 전송하는 단계를 포함하는, 캡슐화된 비디오 데이터를 전송하는 방법.
  12. 제 1 항에 있어서,
    상기 특성들을 전송하는 단계는, 상기 구성요소들 중 2개 이상의 구성요소들의 조합에 대한 가능한 멀티플렉싱 간격들을 나타내는 정보를 전송하는 단계를 포함하고,
    상기 요청은, 상기 멀티플렉싱 간격들의 공통 간격 내에 디코딩 시간들을 갖는 상기 구성요소들 중 2개 이상의 구성요소들 중 임의의 구성요소의 단편들을 규정하는, 캡슐화된 비디오 데이터를 전송하는 방법.
  13. 제 1 항에 있어서,
    상기 특성들은 특성들의 제 1 세트를 포함하고,
    상기 특성들을 전송하는 단계는, 상기 특성들의 제 1 세트가 대응하는 상기 구성요소들의 제 1 시간 지속기간을 나타내는 정보를 전송하는 단계를 포함하며,
    상기 방법은,
    상기 구성요소들에 대한 특성들의 제 2 세트, 및 상기 특성들의 제 2 세트가 대응하는 상기 구성요소들의 제 2 시간 지속기간을 전송하는 단계를 더 포함하는, 캡슐화된 비디오 데이터를 전송하는 방법.
  14. 캡슐화된 비디오 데이터를 전송하는 장치로서,
    비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 결정하도록 구성된 프로세서로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 또는 상기 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 상기 프로세서; 및
    상기 특성들을 클라이언트 디바이스에 전송하고, 상기 특성들을 전송한 후 상기 클라이언트 디바이스로부터 상기 구성요소들 중 적어도 하나의 구성요소들에 대한 요청을 수신하며, 상기 요청에 응답하여 상기 요청된 구성요소들을 상기 클라이언트 디바이스에 전송하도록 구성된 하나 이상의 인터페이스들을 포함하는, 캡슐화된 비디오 데이터를 전송하는 장치.
  15. 제 14 항에 있어서,
    상기 특성들은 상기 구성요소들에 대한 구성요소 식별자 값들을 더 포함하고,
    상기 구성요소 식별자 값들 중 적어도 하나의 구성요소 식별자 값은, 상기 구성요소 식별자 값들 중 상기 적어도 하나의 구성요소 식별자 값에 대응하는 구성요소에 대한 트랙 식별자 값과는 상이하며,
    상기 특성들은, 상기 구성요소들에 대한 인코딩된 샘플들을 저장하는 하나 이상의 파일들에서 상기 구성요소들에 대한 구성요소 식별자 값들과 상기 구성요소들에 대한 트랙 식별자 값들 사이의 대응을 나타내는 정보를 포함하는, 캡슐화된 비디오 데이터를 전송하는 장치.
  16. 제 15 항에 있어서,
    상기 특성들은, 상기 하나 이상의 파일들의 상기 구성요소들 각각에 대해, 상기 구성요소 내의 단편들에 대한 바이트 오프셋들, 상기 단편들에서의 제 1 샘플들의 디코딩 시간들, 상기 단편들에서의 랜덤 액세스 포인트들, 및 상기 단편이 상기 구성요소의 새로운 세그먼트에 속하는지 여부의 표시들을 나타내는 정보를 더 포함하는, 캡슐화된 비디오 데이터를 전송하는 장치.
  17. 제 14 항에 있어서,
    상기 특성들은, 상기 구성요소들 사이의 의존성들, 및 액세스 유닛에서의 상기 구성요소들의 디코딩 순서에 대한 상기 구성요소들 사이의 의존성들의 순서를 나타내는 정보를 포함하는, 캡슐화된 비디오 데이터를 전송하는 장치.
  18. 제 14 항에 있어서,
    상기 특성들은, 상기 구성요소들 사이의 의존성들, 및 제 1 구성요소와 상기 제 1 구성요소에 의존하는 제 2 구성요소 사이의 시간 계층 차이를 나타내는 정보를 포함하는, 캡슐화된 비디오 데이터를 전송하는 장치.
  19. 제 14 항에 있어서,
    상기 특성들은, 상기 복수의 표현들 중 하나 이상의 표현들에 대한 출력을 위한 목표 뷰들의 개수를 나타내는 정보를 포함하는, 캡슐화된 비디오 데이터를 전송하는 장치.
  20. 제 14 항에 있어서,
    상기 특성들은, 상기 구성요소들 중 2개 이상의 구성요소들의 조합에 대한 가능한 멀티플렉싱 간격들을 나타내는 정보를 포함하고,
    상기 요청은, 상기 멀티플렉싱 간격들의 공통 간격 내에 디코딩 시간들을 갖는 상기 구성요소들 중 2개 이상의 구성요소들 중 임의의 구성요소의 단편들을 규정하는, 캡슐화된 비디오 데이터를 전송하는 장치.
  21. 제 14 항에 있어서,
    상기 특성들은 특성들의 제 1 세트를 포함하고,
    상기 하나 이상의 인터페이스들은, 상기 특성들의 제 1 세트가 대응하는 상기 구성요소들의 제 1 시간 지속기간을 나타내는 정보를 전송하도록 구성되고,
    상기 프로세서는 또한, 상기 구성요소들에 대한 특성들의 제 2 세트 및 상기 특성들의 제 2 세트가 대응하는 상기 구성요소들의 제 2 시간 지속기간을 발생시키도록 구성되며,
    상기 하나 이상의 인터페이스들은 상기 특성들의 제 2 세트를 전송하도록 구성되는, 캡슐화된 비디오 데이터를 전송하는 장치.
  22. 제 14 항에 있어서,
    상기 장치는,
    집적 회로;
    마이크로프로세서; 및
    상기 프로세서를 포함하는 무선 통신 디바이스
    중 적어도 하나를 포함하는, 캡슐화된 비디오 데이터를 전송하는 장치.
  23. 캡슐화된 비디오 데이터를 전송하는 장치로서,
    클라이언트 디바이스에 비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 전송하는 수단으로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 또는 상기 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 상기 특성들을 전송하는 수단;
    상기 특성들을 전송한 후, 상기 클라이언트 디바이스로부터 상기 구성요소들 중 적어도 하나의 구성요소들에 대한 요청을 수신하는 수단; 및
    상기 요청에 응답하여 상기 요청된 구성요소들을 상기 클라이언트 디바이스에 전송하는 수단을 포함하는, 캡슐화된 비디오 데이터를 전송하는 장치.
  24. 제 23 항에 있어서,
    상기 특성들을 전송하는 수단은,
    상기 구성요소들에 대한 구성요소 식별자 값들을 전송하는 수단으로서, 상기 구성요소 식별자 값들 중 적어도 하나의 구성요소 식별자 값은, 상기 구성요소 식별자 값들 중 상기 적어도 하나의 구성요소 식별자 값에 대응하는 구성요소에 대한 트랙 식별자 값과는 상이한, 상기 구성요소 식별자 값들을 전송하는 수단;
    상기 구성요소들에 대한 인코딩된 샘플들을 저장하는 하나 이상의 파일들에서 상기 구성요소들에 대한 구성요소 식별자 값들과 상기 구성요소들에 대한 트랙 식별자 값들 사이의 대응을 나타내는 정보를 전송하는 수단; 및
    상기 하나 이상의 파일들의 상기 구성요소들 각각에 대해, 상기 구성요소 내의 단편들에 대한 바이트 오프셋들, 상기 단편들에서의 제 1 샘플들의 디코딩 시간들, 상기 단편들에서의 랜덤 액세스 포인트들, 및 상기 단편이 상기 구성요소의 새로운 세그먼트에 속하는지 여부의 표시들을 나타내는 정보를 전송하는 수단을 더 포함하는, 캡슐화된 비디오 데이터를 전송하는 장치.
  25. 제 23 항에 있어서,
    상기 특성들을 전송하는 수단은, 상기 구성요소들 사이의 의존성들, 및 액세스 유닛에서의 상기 구성요소들의 디코딩 순서에 대한 상기 구성요소들 사이의 의존성들의 순서를 나타내는 정보를 전송하는 수단을 포함하는, 캡슐화된 비디오 데이터를 전송하는 장치.
  26. 제 23 항에 있어서,
    상기 특성들을 전송하는 수단은, 상기 구성요소들 사이의 의존성들, 및 제 1 구성요소와 상기 제 1 구성요소에 의존하는 제 2 구성요소 사이의 시간 계층 차이를 나타내는 정보를 전송하는 수단을 포함하는, 캡슐화된 비디오 데이터를 전송하는 장치.
  27. 제 23 항에 있어서,
    상기 특성들을 전송하는 수단은, 상기 구성요소들 중 2개 이상의 구성요소들의 조합에 대한 가능한 멀티플렉싱 간격들을 나타내는 정보를 전송하는 수단을 포함하고,
    상기 요청은, 상기 멀티플렉싱 간격들의 공통 간격 내에 디코딩 시간들을 갖는 상기 구성요소들 중 2개 이상의 구성요소들 중 임의의 구성요소의 단편들을 규정하는, 캡슐화된 비디오 데이터를 전송하는 장치.
  28. 제 23 항에 있어서,
    상기 특성들은 특성들의 제 1 세트를 포함하고,
    상기 특성들을 전송하는 수단은, 상기 특성들의 제 1 세트가 대응하는 상기 구성요소들의 제 1 시간 지속기간을 나타내는 정보를 전송하는 수단을 포함하고,
    상기 장치는,
    상기 구성요소들에 대한 특성들의 제 2 세트 및 상기 특성들의 제 2 세트가 대응하는 상기 구성요소들의 제 2 시간 지속기간을 전송하는 수단을 더 포함하는, 캡슐화된 비디오 데이터를 전송하는 장치.
  29. 실행될 때, 인코딩된 비디오 데이터를 전송하는 소스 디바이스의 프로세서로 하여금,
    비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 클라이언트 디바이스에 전송하게 하는 것으로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 또는 상기 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 상기 특성들을 클라이언트 디바이스에 전송하게 하고;
    상기 특성들을 전송한 후 상기 클라이언트 디바이스로부터 상기 구성요소들 중 적어도 하나의 구성요소들에 대한 요청을 수신하게 하며;
    상기 요청에 응답하여 상기 요청된 구성요소들을 상기 클라이언트 디바이스에 전송하게 하는 명령들을 저장하고 있는, 컴퓨터 판독가능 저장 매체를 포함하는 컴퓨터 프로그램 제품.
  30. 제 29 항에 있어서,
    상기 프로세서로 하여금 상기 특성들을 전송하게 하는 상기 명령들은,
    상기 프로세서로 하여금,
    상기 구성요소들에 대한 구성요소 식별자 값들을 전송하게 하는 것으로서, 상기 구성요소 식별자 값들 중 적어도 하나의 구성요소 식별자 값은, 상기 구성요소 식별자 값들 중 상기 적어도 하나의 구성요소 식별자 값에 대응하는 구성요소에 대한 트랙 식별자 값과는 상이한, 상기 구성요소들에 대한 구성요소 식별자 값들을 전송하게 하고;
    상기 구성요소들에 대한 인코딩된 샘플들을 저장하는 하나 이상의 파일들에서 상기 구성요소들에 대한 구성요소 식별자 값들과 상기 구성요소들에 대한 트랙 식별자 값들 사이의 대응을 나타내는 정보를 전송하게 하며;
    상기 하나 이상의 파일들의 상기 구성요소들 각각에 대해, 상기 구성요소 내의 단편들에 대한 바이트 오프셋들, 상기 단편들에서의 제 1 샘플들의 디코딩 시간들, 상기 단편들에서의 랜덤 액세스 포인트들, 및 상기 단편이 상기 구성요소의 새로운 세그먼트에 속하는지 여부의 표시들을 나타내는 정보를 전송하게 하는 명령들을 더 포함하는, 컴퓨터 판독가능 저장 매체를 포함하는 컴퓨터 프로그램 제품.
  31. 제 29 항에 있어서,
    상기 프로세서로 하여금 상기 특성들을 전송하게 하는 상기 명령들은,
    상기 프로세서로 하여금, 상기 구성요소들 사이의 의존성들, 액세스 유닛에서의 상기 구성요소들의 디코딩 순서에 대한 상기 구성요소들 사이의 의존성들의 순서, 및 제 1 구성요소와 상기 제 1 구성요소에 의존하는 제 2 구성요소 사이의 시간 계층 차이를 나타내는 정보를 전송하게 하는 명령들을 포함하는, 컴퓨터 판독가능 저장 매체를 포함하는 컴퓨터 프로그램 제품.
  32. 제 29 항에 있어서,
    상기 프로세서로 하여금 상기 특성들을 전송하게 하는 상기 명령들은,
    상기 프로세서로 하여금, 상기 복수의 표현들 중 하나 이상의 표현들에 대한 출력을 위한 목표 뷰들의 개수를 나타내는 정보를 전송하게 하는 명령들을 포함하는, 컴퓨터 판독가능 저장 매체를 포함하는 컴퓨터 프로그램 제품.
  33. 제 29 항에 있어서,
    상기 프로세서로 하여금 상기 특성들을 전송하게 하는 상기 명령들은, 상기 프로세서로 하여금, 상기 구성요소들 중 2개 이상의 구성요소들의 조합에 대한 가능한 멀티플렉싱 간격들을 나타내는 정보를 전송하게 하는 명령들을 포함하고,
    상기 요청은, 상기 멀티플렉싱 간격들의 공통 간격 내에 디코딩 시간들을 갖는 상기 구성요소들 중 2개 이상의 구성요소들 중 임의의 구성요소의 단편들을 규정하는, 컴퓨터 판독가능 저장 매체를 포함하는 컴퓨터 프로그램 제품.
  34. 제 29 항에 있어서,
    상기 특성들은 특성들의 제 1 세트를 포함하고,
    상기 프로세서로 하여금 상기 특성들을 전송하게 하는 상기 명령들은, 상기 프로세서로 하여금, 상기 특성들의 제 1 세트가 대응하는 상기 구성요소들의 제 1 시간 지속기간을 나타내는 정보를 전송하게 하는 명령들을 포함하고,
    상기 컴퓨터 프로그램 제품은,
    상기 프로세서로 하여금, 상기 구성요소들에 대한 특성들의 제 2 세트 및 상기 특성들의 제 2 세트가 대응하는 상기 구성요소들의 제 2 시간 지속기간을 전송하게 하는 명령들을 더 포함하는, 컴퓨터 판독가능 저장 매체를 포함하는 컴퓨터 프로그램 제품.
  35. 캡슐화된 비디오 데이터를 수신하는 방법으로서,
    비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 소스 디바이스에게 요청하는 단계로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 또는 상기 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 상기 특성들을 소스 디바이스에게 요청하는 단계;
    상기 특성들에 기초하여 상기 구성요소들 중 하나 이상의 구성요소들을 선택하는 단계;
    상기 선택된 구성요소들의 샘플들을 요청하는 단계; 및
    상기 샘플들이 수신된 후 상기 샘플들을 디코딩하고 제시하는 단계를 포함하는, 캡슐화된 비디오 데이터를 수신하는 방법.
  36. 제 35 항에 있어서,
    상기 구성요소들에 대한 인코딩된 샘플들을 저장하는 하나 이상의 파일들에서 상기 선택된 구성요소들에 대한 구성요소 식별자 값들과 상기 구성요소들에 대한 트랙 식별자 값들 사이의 대응을 나타내는 정보를 수신하는 단계; 및
    상기 선택된 구성요소들 각각 내의 단편들에 대한 바이트 오프셋들, 상기 단편들에서의 제 1 샘플들의 디코딩 시간들, 상기 단편들에서의 랜덤 액세스 포인트들, 및 상기 단편들이 각각의 구성요소들의 새로운 세그먼트들에 속하는지 여부의 표시들을 나타내는 정보를 수신하는 단계를 더 포함하고;
    상기 샘플들을 요청하는 단계는, 상기 바이트 오프셋들, 상기 디코딩 시간들, 상기 랜덤 액세스 포인트들, 및 상기 단편들이 새로운 세그먼트들에 속하는지 여부의 표시들에 기초하여, 상기 선택된 구성요소들에 대한 상기 구성요소 식별자 값들에 대응하는 상기 트랙 식별자 값들에 대응하는 상기 하나 이상의 파일들의 트랙들로부터 샘플들을 요청하는 단계를 포함하는, 캡슐화된 비디오 데이터를 수신하는 방법.
  37. 제 35 항에 있어서,
    상기 선택된 구성요소들 중 적어도 하나의 구성요소들이 또 다른 구성요소에 의존한다는 것을 나타내는 정보를 수신하는 단계; 및
    상기 선택된 구성요소들 중 하나의 구성요소가 의존하는 상기 구성요소의 샘플들을 요청하는 단계를 더 포함하는, 캡슐화된 비디오 데이터를 수신하는 방법.
  38. 제 35 항에 있어서,
    상기 선택된 구성요소들의 샘플들을 요청하는 단계는,
    다음 멀티플렉싱 간격을 결정하는 단계;
    상기 선택된 구성요소들 중, 상기 다음 멀티플렉싱 간격에서 시작하는 단편들을 갖는 구성요소들을 결정하는 단계; 및
    상기 선택된 구성요소들 중 상기 결정된 구성요소들로부터 상기 다음 멀티플렉싱 간격에서 시작하는 단편들을 요청하는 단계를 포함하는, 캡슐화된 비디오 데이터를 수신하는 방법.
  39. 제 35 항에 있어서,
    상기 특성들은 특성들의 제 1 세트를 포함하고,
    상기 방법은,
    상기 특성들의 제 1 세트가 대응하는 상기 구성요소들의 제 1 시간 지속기간을 나타내는 정보를 수신하는 단계;
    상기 특성들의 제 2 세트가 대응하는 상기 구성요소들의 제 2 시간 지속기간에 대응하는 상기 구성요소들에 대한 특성들의 제 2 세트를 요청하는 단계; 및
    상기 특성들의 제 2 세트에 기초하여 상기 제 2 시간 지속기간에 대응하는 상기 구성요소들로부터 샘플들을 요청하는 단계를 더 포함하는, 캡슐화된 비디오 데이터를 수신하는 방법.
  40. 캡슐화된 비디오 데이터를 수신하는 장치로서,
    비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 소스 디바이스에게 요청하도록 구성된 하나 이상의 인터페이스들로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 또는 상기 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 상기 하나 이상의 인터페이스들; 및
    상기 특성들에 기초하여 상기 구성요소들 중 하나 이상의 구성요소들을 선택하고, 상기 하나 이상의 인터페이스들로 하여금, 상기 선택된 구성요소들의 샘플들에 대한 요청들을 상기 소스 디바이스에 서브밋 (submit) 하도록 구성된 프로세서를 포함하는, 캡슐화된 비디오 데이터를 수신하는 장치.
  41. 제 40 항에 있어서,
    상기 프로세서는,
    상기 구성요소들에 대한 인코딩된 샘플들을 저장하는 하나 이상의 파일들에서 상기 선택된 구성요소들에 대한 구성요소 식별자 값들과 상기 구성요소들에 대한 트랙 식별자 값들 사이의 대응을 나타내는 정보를 수신하고,
    상기 선택된 구성요소들 각각 내의 단편들에 대한 바이트 오프셋들, 상기 단편들에서의 제 1 샘플들의 디코딩 시간들, 상기 단편들에서의 랜덤 액세스 포인트들, 및 상기 단편들이 각각의 구성요소들의 새로운 세그먼트들에 속하는지 여부의 표시를 나타내는 정보를 수신하고,
    상기 바이트 오프셋들, 상기 디코딩 시간들, 상기 랜덤 액세스 포인트들, 및 상기 단편들이 새로운 세그먼트들에 속하는지 여부의 표시들에 기초하여, 상기 선택된 구성요소들에 대한 상기 구성요소 식별자 값들에 대응하는 상기 트랙 식별자 값들에 대응하는 상기 하나 이상의 파일들의 트랙들로부터 상기 샘플들에 대한 상기 요청들을 구성하도록 구성되는, 캡슐화된 비디오 데이터를 수신하는 장치.
  42. 제 40 항에 있어서,
    상기 프로세서는,
    상기 선택된 구성요소들 중 적어도 하나의 구성요소들이 또 다른 구성요소에 의존한다는 것을 나타내는 정보를 수신하고,
    상기 선택된 구성요소들 중 하나의 구성요소가 의존하는 상기 구성요소의 샘플들을 요청하도록 구성되는, 캡슐화된 비디오 데이터를 수신하는 장치.
  43. 제 40 항에 있어서,
    상기 선택된 구성요소들의 상기 샘플들에 대한 상기 요청들을 발생시키기 위해서, 상기 프로세서는,
    다음 멀티플렉싱 간격을 결정하고,
    상기 선택된 구성요소들 중, 상기 다음 멀티플렉싱 간격에서 시작하는 단편들을 갖는 구성요소들을 결정하며,
    상기 선택된 구성요소들 중 상기 결정된 구성요소들로부터 상기 다음 멀티플렉싱 간격에서 시작하는 단편들을 요청하도록 구성되는, 캡슐화된 비디오 데이터를 수신하는 장치.
  44. 제 40 항에 있어서,
    상기 특성들은 특성들의 제 1 세트를 포함하고,
    상기 프로세서는,
    상기 특성들의 제 1 세트가 대응하는 상기 구성요소들의 제 1 시간 지속기간을 나타내는 정보를 수신하고,
    상기 특성들의 제 2 세트가 대응하는 상기 구성요소들의 제 2 시간 지속기간에 대응하는 상기 구성요소들에 대한 특성들의 제 2 세트를 요청하며,
    상기 특성들의 제 2 세트에 기초하여 상기 제 2 시간 지속기간에 대응하는 상기 구성요소들로부터 샘플들을 요청하도록 구성되는, 캡슐화된 비디오 데이터를 수신하는 장치.
  45. 캡슐화된 비디오 데이터를 수신하는 장치로서,
    비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 소스 디바이스에게 요청하는 수단으로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 또는 상기 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 상기 특성들을 소스 디바이스에게 요청하는 수단;
    상기 특성들에 기초하여 상기 구성요소들 중 하나 이상의 구성요소들을 선택하는 수단;
    상기 선택된 구성요소들의 샘플들을 요청하는 수단; 및
    상기 샘플들이 수신된 후 상기 샘플들을 디코딩하고 제시하는 수단을 포함하는, 캡슐화된 비디오 데이터를 수신하는 장치.
  46. 제 45 항에 있어서,
    상기 구성요소들에 대한 인코딩된 샘플들을 저장하는 하나 이상의 파일들에서 상기 선택된 구성요소들에 대한 구성요소 식별자 값들과 상기 구성요소들에 대한 트랙 식별자 값들 사이의 대응을 나타내는 정보를 수신하는 수단; 및
    상기 선택된 구성요소들 각각 내의 단편들에 대한 바이트 오프셋들, 상기 단편들에서의 제 1 샘플들의 디코딩 시간들, 상기 단편들에서의 랜덤 액세스 포인트들, 및 상기 단편들이 각각의 구성요소들의 새로운 세그먼트들에 속하는지 여부의 표시들을 나타내는 정보를 수신하는 수단을 더 포함하고;
    상기 샘플들을 요청하는 수단은, 상기 바이트 오프셋들, 상기 디코딩 시간들, 상기 랜덤 액세스 포인트들, 및 상기 단편들이 새로운 세그먼트들에 속하는지 여부의 표시들에 기초하여, 상기 선택된 구성요소들에 대한 상기 구성요소 식별자 값들에 대응하는 상기 트랙 식별자 값들에 대응하는 상기 하나 이상의 파일들의 트랙들로부터 샘플들을 요청하는 수단을 포함하는, 캡슐화된 비디오 데이터를 수신하는 장치.
  47. 제 45 항에 있어서,
    상기 선택된 구성요소들 중 적어도 하나의 구성요소들이 또 다른 구성요소에 의존한다는 것을 나타내는 정보를 수신하는 수단; 및
    상기 선택된 구성요소들 중 하나의 구성요소가 의존하는 상기 구성요소의 샘플들을 요청하는 수단을 더 포함하는, 캡슐화된 비디오 데이터를 수신하는 장치.
  48. 제 45 항에 있어서,
    상기 선택된 구성요소들의 샘플들을 요청하는 수단은,
    다음 멀티플렉싱 간격을 결정하는 수단;
    상기 선택된 구성요소들 중, 상기 다음 멀티플렉싱 간격에서 시작하는 단편들을 갖는 구성요소들을 결정하는 수단; 및
    상기 선택된 구성요소들 중 상기 결정된 구성요소들로부터 상기 다음 멀티플렉싱 간격에서 시작하는 단편들을 요청하는 수단을 포함하는, 캡슐화된 비디오 데이터를 수신하는 장치.
  49. 제 45 항에 있어서,
    상기 특성들은 특성들의 제 1 세트를 포함하고,
    상기 장치는,
    상기 특성들의 제 1 세트가 대응하는 상기 구성요소들의 제 1 시간 지속기간을 나타내는 정보를 수신하는 수단;
    상기 특성들의 제 2 세트가 대응하는 상기 구성요소들의 제 2 시간 지속기간에 대응하는 상기 구성요소들에 대한 특성들의 제 2 세트를 요청하는 수단; 및
    상기 특성들의 제 2 세트에 기초하여 상기 제 2 시간 지속기간에 대응하는 상기 구성요소들로부터 샘플들을 요청하는 수단을 더 포함하는, 캡슐화된 비디오 데이터를 수신하는 장치.
  50. 실행될 때, 캡슐화된 비디오 데이터를 수신하는 디바이스의 프로세서로 하여금,
    비디오 콘텐츠의 복수의 표현들의 구성요소들에 대한 특성들을 소스 디바이스에게 요청하게 하는 것으로서, 상기 특성들은 프레임 레이트, 프로파일 표시자, 레벨 표시자, 또는 상기 구성요소들 사이의 의존성들 중 적어도 하나를 포함하는, 상기 특성들을 소스 디바이스에게 요청하게 하고;
    상기 특성들에 기초하여 상기 구성요소들 중 하나 이상의 구성요소들을 선택하게 하고;
    상기 선택된 구성요소들의 샘플들을 요청하게 하며;
    상기 샘플들이 수신된 후 상기 샘플들을 디코딩하고 제시하게 하는 명령들을 저장하고 있는, 컴퓨터 판독가능 저장 매체를 포함하는 컴퓨터 프로그램 제품.
  51. 제 50 항에 있어서,
    상기 프로세서로 하여금,
    상기 구성요소들에 대한 인코딩된 샘플들을 저장하는 하나 이상의 파일들에서 상기 선택된 구성요소들에 대한 구성요소 식별자 값들과 상기 구성요소들에 대한 트랙 식별자 값들 사이의 대응을 나타내는 정보를 수신하게 하고;
    상기 선택된 구성요소들 각각 내의 단편들에 대한 바이트 오프셋들, 상기 단편들에서의 제 1 샘플들의 디코딩 시간들, 상기 단편들에서의 랜덤 액세스 포인트들, 및 상기 단편들이 각각의 구성요소들의 새로운 세그먼트들에 속하는지 여부의 표시를 나타내는 정보를 수신하게 하는 명령들을 더 포함하고;
    상기 프로세서로 하여금, 상기 샘플들을 요청하게 하는 명령들은, 상기 프로세서로 하여금, 상기 바이트 오프셋들, 상기 디코딩 시간들, 상기 랜덤 액세스 포인트들, 및 상기 단편들이 새로운 세그먼트들에 속하는지 여부의 표시들에 기초하여, 상기 선택된 구성요소들에 대한 상기 구성요소 식별자 값들에 대응하는 상기 트랙 식별자 값들에 대응하는 상기 하나 이상의 파일들의 트랙들로부터 샘플들을 요청하게 하는 명령들을 포함하는, 컴퓨터 판독가능 저장 매체를 포함하는 컴퓨터 프로그램 제품.
  52. 제 50 항에 있어서,
    상기 프로세서로 하여금,
    상기 선택된 구성요소들 중 적어도 하나의 구성요소들이 또 다른 구성요소에 의존한다는 것을 나타내는 정보를 수신하게 하고;
    상기 선택된 구성요소들 중 하나의 구성요소가 의존하는 상기 구성요소의 샘플들을 요청하게 하는 명령들을 더 포함하는, 컴퓨터 판독가능 저장 매체를 포함하는 컴퓨터 프로그램 제품.
  53. 제 50 항에 있어서,
    상기 프로세서로 하여금 상기 선택된 구성요소들의 샘플들을 요청하게 하는 명령은,
    상기 프로세서로 하여금,
    다음 멀티플렉싱 간격을 결정하게 하고;
    상기 선택된 구성요소들 중, 상기 다음 멀티플렉싱 간격에서 시작하는 단편들을 갖는 구성요소들을 결정하게 하며;
    상기 선택된 구성요소들 중 상기 결정된 구성요소들로부터 상기 다음 멀티플렉싱 간격에서 시작하는 단편들을 요청하게 하는 명령들을 포함하는, 컴퓨터 판독가능 저장 매체를 포함하는 컴퓨터 프로그램 제품.
  54. 제 50 항에 있어서,
    상기 특성들은 특성들의 제 1 세트를 포함하고,
    상기 프로세서로 하여금,
    상기 특성들의 제 1 세트가 대응하는 상기 구성요소들의 제 1 시간 지속기간을 나타내는 정보를 수신하게 하고;
    상기 특성들의 제 2 세트가 대응하는 상기 구성요소들의 제 2 시간 지속기간에 대응하는 상기 구성요소들에 대한 특성들의 제 2 세트를 요청하게 하며;
    상기 특성들의 제 2 세트에 기초하여, 상기 제 2 시간 지속기간에 대응하는 상기 구성요소들로부터 샘플들을 요청하게 하는 명령들을 더 포함하는, 컴퓨터 판독가능 저장 매체를 포함하는 컴퓨터 프로그램 제품.
KR1020137003808A 2010-07-15 2011-07-15 비디오 구성요소들을 멀티플렉싱하기 위한 데이터의 시그널링 KR101436267B1 (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US36474710P 2010-07-15 2010-07-15
US61/364,747 2010-07-15
US36643610P 2010-07-21 2010-07-21
US61/366,436 2010-07-21
US12/986,028 US9185439B2 (en) 2010-07-15 2011-01-06 Signaling data for multiplexing video components
US12/986,028 2011-01-06
PCT/US2011/044284 WO2012009700A1 (en) 2010-07-15 2011-07-15 Signaling data for multiplexing video components

Publications (2)

Publication Number Publication Date
KR20130053444A KR20130053444A (ko) 2013-05-23
KR101436267B1 true KR101436267B1 (ko) 2014-08-29

Family

ID=48662645

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137003808A KR101436267B1 (ko) 2010-07-15 2011-07-15 비디오 구성요소들을 멀티플렉싱하기 위한 데이터의 시그널링

Country Status (1)

Country Link
KR (1) KR101436267B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6921815B2 (ja) * 2015-11-09 2021-08-18 インターデジタル ヴイシー ホールディングス, インコーポレイテッド エレメンタリーストリームから復号されたビデオコンテンツをディスプレイの特性に適応させる方法およびデバイス

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090319563A1 (en) * 2008-06-21 2009-12-24 Microsoft Corporation File format for media distribution and presentation

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090319563A1 (en) * 2008-06-21 2009-12-24 Microsoft Corporation File format for media distribution and presentation

Also Published As

Publication number Publication date
KR20130053444A (ko) 2013-05-23

Similar Documents

Publication Publication Date Title
US11375291B2 (en) Virtual reality video signaling in dynamic adaptive streaming over HTTP
JP6392115B2 (ja) ビデオ構成要素を多重化するためのデータを信号伝達すること
EP3459247B1 (en) Most-interested region in an image
JP6345827B2 (ja) ビデオデータをストリーミングするためのシーケンスデータセットを提供すること
KR101549760B1 (ko) 비디오 데이터를 스트리밍하기 위한 랜덤 액세스 포인트의 시그널링
US9226045B2 (en) Signaling attributes for network-streamed video data
JP5559430B2 (ja) ビデオデータをストリーミングするためのビデオ切替え
KR101421390B1 (ko) 트릭 모드 비디오 표현물에 대한 비디오 샘플의 시그널링
KR101436267B1 (ko) 비디오 구성요소들을 멀티플렉싱하기 위한 데이터의 시그널링

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20170629

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180628

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190624

Year of fee payment: 6