이하, 본 발명에 따른 바람직한 실시 예를 첨부한 도면을 참조하여 상세히 설명한다. 하기의 설명에서는 본 발명에 따른 동작을 이해하는데 필요한 부분만이 설명되며 그 이외 부분의 설명은 본 발명의 요지를 흩트리지 않도록 생략될 것이라는 것을 유의하여야 한다.
본 발명의 주요한 요지는 멀티미디어 시스템에서 프로그램의 추가 및 삭제를 동적으로 수행하고, 전송이나 저장 계층에서 코덱에 대한 이해없이 적응적 미디어 구조를 송신하며, 전송과 저장에 공통으로 사용될 수 있는 저장 구조(container format)를 포함하는 적응적 미디어 구조를 제공하기 위하여, Media Fragment Unit 및 MPUMedia Processing Unit의 설계와 이를 이용하는 전송 및 저장계층의 동작을 제공하는 것이다. 이를 위해 본 발명의 실시 예에 따른 멀티미디어 시스템에서 적응적 미디어 구조를 송수신하는 방법 및 장치에 대하여 상세히 설명하기로 한다.
본 발명의 이해를 돕기 위해, 이하, 명세서 전반에 걸쳐 사용되는 다수의 전송 단위에 대한 개념을 기술한다.
용어 "Slice"는 한 프레임을 띠 모양으로 분할 단위로 언급될 수 있다.
용어 "Access Unit(AU)"은 한 프레임에 대응하는 미디어 데이터를 부호화 한 경우, 상기 부호화된 미디어 데이터의 길이를 정의하는 전송 단위로 언급될 수 있다.
용어 "Media Fragment Unit(MFU)"는 AU보다 작거나 같으며, 임의의 미디어 복호화기에 의해(a media decoder) 독립적으로(independently) 복화화될(또는 소비될(consumable)) 수 있는 전송 단위로 언급될 수 있다.
용어 "Media Processing Unit(MPU)"은 적어도 하나의 MFU를 포함하는 전송 단위로서, 시간 정보, 중요도, 임의 접근 위치(Random Access Position: RAP) 정보와 같은 다양한 기능 정보 중 적어도 하나의 정보를 포함하는 복합 미디어 컨텐츠의 전송 단위로 언급될 수 있다.
용어 "Asset"은 적어도 하나의 MPU를 포함하는 전송 단위로서, 비디오, 오디오, 텍스트, 파일, 위젯 등 다양한 종류의 멀티미디어 소스들, 즉 멀티미디어 데이터들의 속성에 맞는 단위 구조를 입력 받아 복합 미디어 컨텐츠를 구성하는 전송 단위로 언급될 수 있다.
현재까지 논의된 인캡슐레이션(Encapsulation) 계층과 전송 계층의 동작은 다음과 같다.
먼저, 코덱 계층(Codec layer)에서 작성된 부호화 미디어 데이터(coded media data)는 네트워크 추상 계층 단위(Network Abstraction Layer Unit, NALU)로 부호화되어 MMT(MPEG Media Transport) 계층(또는 하위 계층)으로 전달된다.
MMT(MPEG Media Transport) 계층에서는, 상기 부호화된 미디어 데이터를 MFU의 전송단위로 구성하고, 다시 MPU의 전송 단위로 구성하여 하나의 Asset을 구성하게 된다.
상기 Asset은 다시 여러 개의 Asset들로 구성되고, 그들의 관계를 표현하는 MMT-CI(Composition Information)에 의해 시/공간적으로 표현 및 소비되도록 구성되어 수신측으로 전송된다. MMT-CI는 시그널링 메시지(Signaling message)를 통해 수신측에 주기적으로 전송되고, 수신측은 상기 MMT-CI를 통해 어떤 컨텐트가 방송되고 있는지 또는 재생 가능한 지에 대하여 알 수 있게 된다.
수신측은 전송 계층을 통해 주기적으로 전송되는 상기 MMT-CI를 참조하여 여러 개의 Asset들 중 필요한 Asset만을 추출하여 사용한다.
[표 1]
MFU_Header(){
MFU_Information(){
mfu_length;
header_length;
start_end_indicator;
}
MFU_Indicator(){
priority;
If(priority != 0)
dependency_counter;
}
}
MFU_Payload()
위의 <표 1>은 현재의 MFU의 구조를 나타내기 위한 MFU의 구조 정보를 보여준다.. MFU의 구조 정보는 MFU의 헤더 정보(MFU_Header)에서 나타낼 수 있다.
MFU의 헤더 정보(MFU_Header)는 MFU의 기본 정보(MFU_Information)와 MFU의 지시자 정보(MFU_Indicator)를 포함한다.
MFU의 기본정보(MFU_Information)는 MFU의 길이 정보(mfu_length)와 헤더의 길이 정보(header_length) 및 MFU가 온전한 AU 내에서 어디에 위치하는 지를 나타내는 위치 정보(start_end_indicator)을 포함한다.
MFU의 지시자 정보(MFU_Indicator)는 MFU가 온전한 AU 내에서 어떤 우선순위 또는 중요도를 갖는지를 나타내는 우선 순위 정보(priority) 및 MFU 자신이 몇 개의 다른 MFU를 참조하는지를 나타내는 종속적인 카운트 정보(dependency_counter)를 포함한다.
종속적인 카운트(dependency_count) 값은 독립적으로 부호화/복호화가 가능한 단위 내에서 종속적인 MFU 카운트의 값이다. 예를 들어 이 종속적인 카운트 값이 "4"이면, 해당 MFU 데이터는 자신과 인접한 4 개의 다른 MFU들이 해당 MFU에 종속 관계(또는 참조 관계)에 있음을 나타내는 정보임을 의미한다. 예를 들어, 4개의 연관된 MFU들이 있을 때 첫 번째 MFU는 3의 카운트 값을 가지며, 두 번째 MFU는 2의 값을, 첫 번째 MFU는 1의 값을, 마지막 MFU는 0의 값을 가지게 된다. 상기 종속적인 카운트를 이용하면, 해당 MFU 데이터의 오류가 있을 경우 그 오류가 전파되는 정도를 나타낼 수 있다.
[표 2]
MPU_Header(){
MPU_Information(){
mpu_length;
header_length;
}
MPU_Identifier(){
rap_flag;
mpu_sequence_number;
}
MPU_Internal(){
number_of_au;
for(int i=0; i<number_of_au; i++){
au_length;
}
}
private_header_flag;
if(private_header_flag == 1){
MPU_Private(){
private_header_length
private_header
}
}
}
MPU_Payload()
위의 <표 2>는 현재의 MPU의 구조를 나타내기 위한 MPU의 구조 정보를 보여준다.
현재의 MPU의 구조 정보는 MPU의 기본 정보(MPU_Information), MPU의 식별 정보(MPU_Identifier), MPU의 내부 정보(MPU_Internal) 및 MPU의 확장 정보(private_header_flag)를 포함한다.
MPU의 기본 정보(MPU_Information)는 MPU의 길이를 나타내는 MPU의 길이 정보(mpu_length)와 헤더의 길이를 나타내는 헤더의 길이 정보(header_length)를 포함한다.
MPU의 식별 정보(MPU_Identifier)는 MPU에 임의의 접근 위치 정보(Random Access Point: RAP)가 존재하는지 여부를 나타내는 플래그 정보(rap_flag)와 해당 MPU(MPU 자신)가 Asset 내에서 몇 번째 MPU인지를 나타내는 시퀀스 번호 정보(mpu_sequence_number)를 포함한다. 여기서, RAP는 해당 MPU에 대한 임의 접근 위치 정보로서, 상기 임의 접근 위치 정보를 이용하는 비디오 데이터는, 임의의 재생 기능을 제공할 수 있다.
MPU의 내부 정보(MPU_Internal)는 MPU를 구성하는 AU들의 개수 정보(number_of_au)와 MPU를 구성하는 AU들 각각의 길이 정보(au_length)를 포함한다.
MPU의 확장 정보(private_header_flag)는 향후의 확장을 위한 프라이빗 헤더의 길이 정보(private_header_length)와 프라이빗 헤더 정보(private_header)를 포함한다.
[표 3]
MMT_Asset() {
asset_identification
asset_type
asset_codepoint
mpu_index_flag
if(mpu_index_flag == '1')
no_of_mpu
for(i=0;i< no_of_mpu; i++){
mpu_position
}
}
T.B.D
asset_length
For(i=0;i<no_of_mpu;i++){
MPU()
}
}
위의 <표 3>은 현재의 Asset의 구조를 나타내기 위한 Asset의 구조 정보를 보여준다.
현재의 Asset의 구조 정보는 해당 Asset을 식별하는 식별자 정보(asset_identification), 미디어 타입을 나타내는 타입 정보(asset_type), 호환성 식별을 위한 호환성 식별 정보(Code point), Asset을 구성하는 MPU들의 개수 정보(no_of_mpu), Asset을 구성하는 MPU들 각각의 위치 정보(mpu_position), 해당 Asset의 전체 길이 정보(asset_length)를 포함한다.
제1 실시 예
본 발명의 제1 실시 예에서는, 적응적 미디어 구조를 제공하기 위한 효율적인 MFU의 구조가 제안된다.
본 발명의 제1 실시 예에 다른 MFU의 구조 정보는 아래의 표 4에 나타나는 바와 같이 해당 MFU의 타입이 AU 타입인지 슬라이스(Slice) 타입인지를 구분하는 타입 정보(mfu_type)를 포함한다.
상기 타입 정보(mfu_type)에 따라 MFU가 AU 타입임을 확인할 수 있다면, MFU의 구조에 AU의 속성들을 나타내는 정보(AU의 속성 정보)을 제공(서술 또는 표현)하는 것은 비효율적이다. AU 타입의 확인 방법은, MFU가 속한 AU가 RAP에 해당하는 지 여부, Instantaneous decoding refresh(IDR) Picture인지 여부 및 Clean random access(CRA) picture 인지 여부 중 적어도 하나인지를 서치하여 확인될 수 있다. IDR Picture와 CRA Picture에 대한 설명은 아래에서 기술한다.
상기 AU의 속성 정보는 우선 순위 정보(Priority) 및 종속 카운터 정보(Dependency counter) 중 적어도 하나의 정보를 포함한다. 따라서 아래 <표 4>에 나타나는 바와 같이, 본 발명의 제1 실시 예에 따른 MFU 구조 정보에는 타입 정보(mfu_type)가 제공되며, MFU의 type이 AU인 경우, 표 1의 MFU 구조 정보와는 달리, MFU의 구조 정보에 우선 순위 정보(Priority)와 종속 카운터 정보(dependency counter) 중 적어도 하나의 정보가 제공(서술 또는 표현)되지 않으며, MFU type이 AU가 아닌 경우 또는 슬라이스 타입인 경우, MFU의 구조 정보에 우선 순위 정보(Priority)와 종속 카운터 정보(dependency counter)가 제공(서술 또는 표현)된다.
만약, MFU가 AU 타입이 아니고, AU의 일부분만을 구성한다면, mfu_type은 아래의 <표 5>와 같이 MFU가 온전한 AU 내에서 어디에 위치하는 지를 나타내는 위치 정보(start_end_indicator)의 형태로 제공(서술 또는 표현)될 수 있다. 이 경우 위치 정보(start_end_indicator)의 값이 온전한 AU를 지시하면 mfu_type의 값이 AU인 것과 같이 동작하도록 하는 것이 바람직하다.
[표 4]
MFU_header(){
…
mfu_type;
…
if(mfu_type == AU){
…
}
else(mfu_type != AU){
priority;
dependency_counter;
}
…
}
[표 5]
MFU_header(){
…
mfu_type;
…
if(start_end_indicator == AU){
…
}
else(start_end_indicator != AU){
priority;
dependency_counter;
}
…
}
제2 실시 예
도 1은 전송 오류가 발생한 경우에서의 전송 패킷의 구조와 수신 패킷이 구조를 설명하기 위한 도면이다.
도 1에서와 같은 전송오류가 발생한 경우, 전송오류에 강건한 MPU 및 MFU의 구조 설계가 필요하다.
MPU는 도 1과 같이 전송 계층에서의 저장 과정 또는 저장 계층에서의 저장 과정에서, 일부 MFU가 전송되지 않는 전송 오류와 저장 에러가 발생한 경우, 효율적인 전송 또는 저장을 위해, 상기 일부 MFU가 전송되지 않은 상황을 차라리 허용하는 것이 바람직하다.
MMT 패킷은 Automatic Repeat request(ARQ) 및 Forward Error Correction (FEC)등을 이용하여 다양한 전송 경로상의 에러를 대비한다. 이러한 전송 경로상의 에러를 대비함에도 불구하고 전송 실패가 발생한다면, 이 경우의 전송 실패는 MMT Packet 단위의 전송 실패를 의미한다.
도 1 및 2에 도시된 바와 같이, MPU가 전송될 때, 전송 계층에서는 MPU를 조각내고(fragmentation), 조각난 MPU를 다수의 MMT 패킷에 각각 실어 전송한다. 따라서, 하나의 MPU는 다수의 MMT 패킷으로 구성되고, 또한 하나의 MPU는 다수의 MFU로 구성된다.
이것은 현재의 전송 계층에서는 하나의 MPU가 다수의 MMT 패킷으로 구성되는 구조를 제공(서술 또는 표현)하고, 하나의 MPU가 다수의 MFU로 구성되는 구조를 제공(서술 또는 표현)하고 있지만, MMT Packet과 MFU 간의 구조적인 대응 관계는 전송효율을 고려하여 정의하고 있지 않다. 따라서, 기존의 전송 및 저장 계층에서는 다수의 MMT Packet이 손실되는 경우에, 어떤 MFU에서 전송 손실이 발생했는지 또한 MFU의 어느 부분부터 어느 부분까지 전송 손실이 발생했는지를 나타내는 전송 손실 부분에 대한 정보를 제공하지 않는다.
다시 말하면, 기존의 MPU 구조 정보에서는 <표 2>와 같이 AU의 정보를 옵셋(offset) 즉, MPU의 헤더 정보 길이로 제공(서술 또는 표현)하고 있다. 따라서, 전송 또는 저장계층에서의 전송 오류 또는 저장 에러에 의해 페이로드(Payload)의 일부가 누락/손상된 경우, offset에 기반한 정보는 모두 신뢰할 수 없는 정보가 되며 완전한 상태(integrity)를 확인할 방법도 현재 제공하고 있지 않다.
따라서 본 발명의 제2 실시 예에서는 MPU가 MFU를 지시하는 개선된 방법을 제안하고, MPU 및 MFU의 완전한 상태(integrity)를 확인하는 방법을 제안한다.
전술한 바와 같이 MPU는 AU를 구성하는 MFU들을 묶기 위해 offset을 사용하고 있으나 일부 MMT Packet의 누락이 발생하면 누락된 MMT Packet이 싣고 있던 MFU에 포함된 AU와 관련된 정보는 모두 무효화되어야 한다. 따라서 offset보다는 AU를 구성하는 MFU의 개수를제공하는 것이 필요하다.
아래 <표 6>은 MPU에서 AU를 구성하는 MFU의 개수 정보가 포함된 MPU의 구조 정보의 일례를보여준다.
[표 6]
mpu_header(){
…
number_of_au;
for(…){
number_of_mfu; //3개, 4개, 3개, …
}
…
}
이 경우 전체 MFU의 개수가 표현된 것과 다르면 누락된 MFU가 있다는 것을 알 수 있다. 하지만 이 경우 만약 3번째 MFU가 누락되면 payload내의 MFU에 대한 분석만으로는 어떤 MFU가 누락되었는지는 여전히 알 수 없다는 단점이 있다.
따라서 <표 7>과 같이 MFU는 자신을 식별하는 식별정보(mfu_id)를 포함하고, <표 8>와 같이 MPU에서는 AU마다 어떤 MFU들을 포함하는 지 서술하는 것이 필요하다. 아래 <표 7>은 Mfu_id가 적용된 MFU의 구조 정보를 나타낸 것이고, 아래의 <표 8>은 Mfu_id를 지시하는 MPU의 AU 정보를 나타낸 것이다.
[표 7]
Mfu_header(){
…
mfu_id;
…
}
[표 8]
mpu_header(){
…
number_of_au;
for(i=0;i<number_of_au;i++){
number_of_mfu;
for(j=0;j<number_of_mfu;j++){
mfu_id;
}
}
…
}
상기 <표 8>과 같이 작성하면 중간에 임의의 MFU가 누락되어도 AU의 정보가 유효할 수 있다는 장점이 있다.
제3 실시 예
전송 오류에 의해 MFU의 누락이 있는 경우, 그 누락이 MFU 단위로 발생할 때와 MFU의 경계를 유지하지 않고 발생할 때를 구분해야 한다. 누락이 MFU 단위로 발생할 때에는 MFU의 식별정보를 사용해 어떤 AU에 속하는 MFU가 누락되었는 지를 감지할 수 있다. 그러나, 도 1과 같이 MFU의 일부분 예컨대,헤더 정보가 누락되었을 때에는 MFU의 Parsing에 있어 문제가 발생한다.
이와 같이 MFU의 일부분이 누락되었을 때 이를 감지하고, 다음의 유효(valid)한 MFU를 찾아내기 위해서는 시작 코드(start code)와 EDC(error detection code)의 사용이 요구된다.
아래 <표 9>는 start code를 사용해 MFU의 경계를 감지하고 EDC를 사용해 validity를 검증하는 예를 나타낸 것이다.
[표 9]
Mfu_header(){
Start_code;
EDC;
…
}
도 2는 본 발명의 제3 실시 예에 따른 EDC와 start code를 사용한 동작을 보이고 있다.
도 2에서 전송된 패킷중 적색 음영처리한 구간(210)에 해당하는 MMT Packet에 전송오류가 발생한 경우를 가정하고 있다. 이때 MFU1번의 중간부터 MFU2번의 중간까지가 MMT Packet 손실로 누락된 부분이다. 이에 따라 수신측은 MFU1의 header및 payload 일부와 MFU2의 payload 일부로 이루어진 MFU1’을 갖는 수신 패킷을 수신하게 된다.
수신측에서의 MPU 처리 과정은 MFU1의 header 정보 중 EDC를 읽고 MFU1의 길이만큼의 데이터에 대해 에러 감지 프로세스를 수행한다. 에러 감지 프로세스에 따른 결과 값과 EDC 값을 비교하면, 다른 값이 나오므로 MFU1은 오류가 발생했다는 것을 알 수 있다. 문제가 되는 MFU1에 대한 처리를 보류하고, 다음 MFU를 찾기 위해 예상되는 MFU1의 종료지점으로부터 이전 및 이후에 대해 start_code의 탐색을 수행한다. Start_code는 약속된 패턴을 갖는 값으로, 00 00 01B 또는 'M' 'F' 'U'와 같이 반복될 확률이 낮은 패턴으로 결정하여 사용한다. 탐색을 수행하여 start_code를 발견하고, 이후 나오는 EDC를 사용해 에러 감지 프로세스를 수행하여, valid한 MFU임이 확인되면, 해당 MFU의 mfu_id를 인지해 어떤 MFU가 누락 또는 손실되고 어떤 MFU가 valid한지 알아낼 수 있다.
제4 실시 예
MPU는 이전의 MPU와 이후의 MPU에 대한 억세스의 필요 없이 독립적으로 프로세싱(또는 부호화 및 복호화)할 수 있는 단위이다.
Asset은 다수의 MPU로 구성되고, 각 Asset의 Asset header에는 MPU의 개수와 MPU의 길이 등이 포함된다.
하지만 방송을 고려했을 때 Asset은 무한히 긴 길이를 가질 수 있다는 점 및 방송의 중간에 청취를 개시했을 때 Asset의 header를 찾아 억세스한 후 다시 현재 방송 시점에 해당하는 MPU를 찾아와야 한다. 이러한 점을 고려했을 때, Asset의 구조 정보에 Asset이 어떤 MPU를 포함하는 지를 나타내는 정보를 제공(서술 또는 표현)하는 것보다, MPU의 구조 정보에 MPU가 어떤 Asset에 포함되는지를 나타내는 정보를 제공(서술 또는 표현)하는 것이 훨씬 효율적이다. 또한 MPU의 구조 정보에 MPU가 재생을 위해 필요한 초기화 정보를 제공하는 것이 효율적이다.
이에 따라 <표 3>에서, Asset header가 가지고 있는 정보 중 식별자(asset_identification)는 MPU의 구조 정보에 포함시키는 것이 바람직하다. Asset_type 및 Asset_codepoint는 Asset을 소비하기 전에 판단의 근거로 사용할 정보이므로 MMT-CI에 포함시키는 것이 바람직하다.
No_of_mpu, mpu_position 및 Asset_length은 파일로 저장되지 않는 한 의미가 없는 값으로 Asset에서 분리하여 MMT Package를 file로 저장할 때 서술할 정보 중의 하나로 포함시키는 것이 바람직하다.
이에 따라 MPU가 <표 10>과 같이 구성되면 도 3의 맨 위쪽에 도시된 바와 같이 다수의 MPU가 다양한 미디어 타입의 Asset에 각각 섞여 있을 때, 같은 Asset_식별자(Asset_id)를 가지는 MPU들을 취합하고, 취합된 MPU들의 각 시퀀스_넘버(sequence_number)를 이용하여 취합된 MPU들의 전후관계(또는 순서)를 파악할 수 있다.
[표 10]
mpu_header(){
…
asset_id;
sequence_number;
…
}
도 3은 본 발명의 제4 실시 예에 따른 MPU내의 Asset 식별자와 Sequence number를 이용한 논리적 Asset 구성을 보이고 있다.
도 3에서와 같이, Asset 식별자(asset_id)와 MPU의 Sequence number(sequence_number)에 부가로 패키지의 식별자를 사용하면 MPU는 CDN 및 Cache등 네트워크 노드에서 독립적으로 저장되고 전송되는 단위로 사용될 수 있다.
제5 실시 예
본 발명의 제5 실시 예는 MPU의 구조 정보에 시간 미디어 전송을 위한 부가 정보를 제공하는 것에 관한 것이다. 이 경우, MPU는 시간 속성 또는 비시간 속성의 미디어를 전송/저장하기 위한 단위로 이용된다.
MPU가 전송하는 미디어의 종류를 구별하기 위해 아래의 표 11과 같이, 제1 실시 예에서의 MPU의 타입 정보에 mpu_type의 시간 속성(NON_TIMED)을 나타내는 정보가 제공된다. MPU의 header정보는 mpu_type에 따라 시간 미디어의 특징 정보들, 비시간 미디어의 특징 정보들을 포함하게 될 것이므로 mpu_type의 사용은 효율적인 헤더 구조를 위해 필요한 정보이다.
[표 11]
Mpu_header(){
…
mpu_type; //AU_SET, NON_TIMED
…
}
위의 <표 11>은 시간속성의 정보가 부가된 MPU의 타입 정보를 나타낸 것이다.
만약 MPU를 구성하는 미디어 데이터가 하나 또는 여러 개의 AU로 구성된 시간 미디어라면 mpu_type은 "AU_SET"으로 표현되며, MPU를 구성하는 미디어 데이터가 비시간 미디어라면 mpu_type은 "AU_SET" 및 "NON_TIMED"으로 표현된다.
기존의 MPU의 구조 정보는 AU의 시간값과 연관된 정보를 표현하지 않으므로 mpu_type이 AU_SET인 경우 포함하고 있는 AU들의 시간값을 제공하는 것이 필요하다.
AU의 시간값과 연관된 정보는 프리젠테이션 시간(presentation time)과 관련된 정보 및 디코딩 시간(decoding time)과 관련된 정보 등을 고려할 수 있으며, 부가적으로 디코딩 오더(decoding order)와 관련된 정보 및 프리젠테이션 듀레이션(presentation duration)과 관련된 정보 등을 더 고려할 수 있다.
AU들의 배열 구조는 일정한 시간 간격으로 배열되는 구조와 임의의 시간 간격으로 배열되는 구조로 나눌 수 있다. Presentation time의 간격은 duration으로 표현될 수 있으므로 presentation 순서로 배열된 AU들의 시간 표현 및 간격은 default duration으로 표현될 수 있다.
아래 <표 12>는 일정한 시간 간격으로 배열되는 AU의 구조 정보가 포함된 MPU의 구조 정보의 일례를 보여주는 것이고, 아래의 <표 13>은 임의의 시간 간격으로 배열되는 AU의 구조 정보가 포함된 MPU의 구조 정보의 일례를 보여주는 것이다.
아래의 <표 12>와 같이, 임의의 시간 간격 배열을 표현하기 위해서는 default duration이 0이면, AU마다 duration을 제공하도록 field을 on/off 방식으로 표현할 수 있다.
아래의 <표 13>과 같이 default duration 외에 부가로 임의 AU에 대한 duration(ARBITRARY_DURATION)을 표현하는 플래그(duration_flag)가 제공되면 해당 AU는 별도의 duration으로 표현되고, 나머지 AU는 default duration으로 표현될 수 있다.
[표 12]
Mpu_header(){
…
number_of_au;
default_duration_of_au;
for(i=0; i<number_of_au;i++){
if(default_duration == 0){
duration_of_au;
}
…
}
…
}
[표 13]
Mpu_header(){
…
number_of_au;
default_duration_of_au;
for(i=0; i<number_of_au;i++){
duration_flag;//NONE, ARBITRARY_DURATION
if(duration_flag == ARBITRARY_DURATION){
duration_of_au;
}
…
}
…
}
AU의 순서 정보(order_of_au)는 presentation 순서 정보(presentation_order)와 decoding 순서 정보(decoding_order), 그리고 임의의 순서 정보(UNKNOWN)를 고려할 수 있다. 여기서, presentation 순서는 GOP(Group of picture) 내의 Intra(I) picture, Bi-predictive(B) picture, Predictive(P) picture 들의 재생 순서를 의미하며, decoding 순서는 I picture, B picture, P picture 들의 코딩 순서를 의미한다. GOP는 여러 장의 픽처를 한 그룹으로 묶은 단위를 의미한다. I picture, B picture, P picture 는 GOP 계층에서 사용되는 용어들로서, I picture는 전후의 picture와는 관계없이 독립적으로 부호화하여 획득되는 picture이고, P picture는 화면간의 순방향 예측부호화에 의해 획득되는 picture이다. B picture는 과거 미래의 양방향으로부터의 예측부호화에 의해 획득되는 picture이다.
본 발명의 제5 실시 예에 따른 MPU의 구조 정보에는 AU들의 순서가 Presentation 순서로 배열된 경우, decoding 순서 정보(decoding_order)가 별도로 제공되고,. AU들의 순서가 Decoding 순서로 배열된 경우, presentation 순서 정보(presentation_order)가 별도로 제공된다. 그리고, AU의 순서가 임의의 순서로 배열된 경우, decoding 순서 정보(decoding_order)와 presentation 순서 정보(presentation_order)가 별도로 제공된다.
어떤 AU는 다른 AU와의 의존관계에 따라 이전 AU의 decoding없이 재생이 가능한 RAP(Random Access Point)를 포함하는 경우가 있으므로 이에 대한 표현은 RAP_flag를 통해 제공된다.
[표 14]
Mpu_header(){
…
number_of_au;
if(number_of_au > 1){
order_of_au;//PRESENTATION, DECODING, UNKNOWN
}
for(i=0; i<number_of_au;i++){
if(order_of_au == PRESENTATION){
decoding_order;
}
else if(order_of_au == DECODING){
presentation_order;
}
else if(order_of_au == UNKNOWN){
decoding_order;
presentation_order;
}
rap_flag;// TRUE,FALSE
…
}
…
}
상기 <표 14>는 여러 가지 AU 배열에 따른 순서 정보 제공에 대한 것으로, AU의 개수가 1개보다 많은 경우 AU간의 순서에 대한 부가 정보를 제공하는 방법을 제안하고 있다. 만약 AU가 1개라면 다른 AU와의 관계에서 발생하는 순서값은 성립되지 않는다.
전술한 order_of_au와 presentation_order 또는 decoding_order를 조합하면 도 4 내지 도 7과 같이 MPU내에서 AU의 시간과 연관된 구조 정보를 모두 표현할 수 있다.
도 4는 본 발명의 제5 실시 예에 따른 Instantaneous decoding refresh(IDR) Picture와 B, P picture가 decoding 순서로 배열된 Closed GOP에서 presentation 정보 제공 방법을 보이고 있다. 여기서, Closed GOP는 이전의 GOP에 종속되지 않고, 독립적으로 코딩되고, 재생되는 GOP를 의미한다.
본 발명에서 제안하는 AU의 시간과 연관된 구조 정보의 표현방법은 AU의 order 종류(DECODING=Decoding순서로 배열), 각 AU들의 Presentation_order번호, RAP여부를 제공한다.
이에 따라 도 4와 같이 decoding 순서로 배열된 Closed GOP(Group Of Pictures)는 도 18의 아래와 같이 presentation order로 재배열 가능하고 RAP로부터의 재생이 가능하다.
도 5는 본 발명의 제5 실시 예에 따른 IDR picture와 B, P picture가 presentation 순서로 배열된 Closed GOP에서 decoding 순서정보 제공 방법을 보이고 있는 것이다. IDR picture는 영상 시퀸스의 선두 picture로서, picture 비트열을 복호화 하기 위해 참조 picture의 버퍼 상태, 프레임 번호, picture의 출력 순서를 표시하는 정보 등을 초기화하는 데 이용된다.
도 5의 위와 같이 presentaton 순서로 배열된 Closed GOP는 도 5의 아래와 같이 decoding order로 재배열 가능하고 RAP로부터의 재생이 가능하다.
도 6은 본 발명의 제5 실시 예에 따른 Clean random access(CRA) picture와 B, P picture가 decoding 순서로 배열된 Open GOP에서 presentation 순서정보 제공 방법을 보이고 있다. 여기서, Open GOP는 현재의 GOP가 이전의 GOP에 종속되어, 종속적으로 압축되고 재생되는 GOP를 의미한다.
도 6을 참조하면, 도 6의 위와 같이 decoding 순서로 배열된 Open GOP는 도 6의 아래와 같이 presentation order로 재배열 가능하고 RAP로부터의 재생이 가능하다.
B4와 B5는 이른바 leading picture로, CRA6에 비해 decoding순서는 늦지만 presentation순서가 앞서므로, RAP여부와 presentation order, decoding order를 고려하면, 디코더에 해당 picture들을 입력값으로 전달하기 전에, 해당 picture(B4, B5)를 디코더에 넣지 않거나 디코딩은 하되 사용하지 않는 등의 판단을 내리는 것이 가능하다.
도 7은 본 발명의 제5 실시 예에 따른 CRA picture와 B,P picture가 presentation 순서로 배열된 Open GOP에서 decoding 순서정보 제공 방법을 보이고 있다. 도 7을 참조하면, 도 7의 위와 같이 presentation순서로 배열된 Open GOP는 도 7의 아래와 같이 decoding 순서로 재배열 가능하고 RAP로부터의 재생이 가능하다.
제6 실시 예
본 발명의 제6 실시 예는 MPU의 독립적 사용을 위한 디코더 설정 정보에 대한 것이다.
MPU는 전후의 다른 MPU에 대한 접근 없이 독립적으로 사용될 수 있는 단위이다. 이에 따라 MPU가 가지고 있는 AU들에 대한 디코더 설정 정보를 포함하고 있는 것이 바람직하다. 따라서, 디코더 설정 정보는 MPU의 type이 AU인 경우에 MPU의 구조 정보에 제공되며, 시구간에 따라 복수개의 디코더 설정 정보가 제공되는 경우, 해당 디코더 설정 정보가 적용되는 AU의 부가정보로서 제공되는 것이 바람직하다.
[표 15]
Mpu_header(){
…
number_of_au;
…
for(i=0; i<number_of_au;i++){
…
decoder_config_flag; //TRUE, FALSE
if(decoder_config_flag == TRUE){
sps;
pps;
extra_decoder_configuration;
}
}
}
상기 <표 15>는 디코더 설정 정보를 제공하는 MPU의 header구조를 도시하고 있다.
디코더 설정 정보는 SPS(Sequence Parameter Set), PPS(Picture Parameter Set), DCT, Motion vector 등의 정보을 포함하며, 해당 정보들은 NAL Unit의 연속된 열 형태로 제공된다. 여기서, SPS는 sequence 전체의 부호화에 사용되는 정보를 포함하는 정보이고, PPS는 Picture 전체의 부호화 모드 예컨대, 엔트로피 부화화 모드, 픽처 단위의 양자화 파라미터 초기값 등을 나타내는 정보이다.
따라서 아래의 <표 16>과 같이 본 발명을 따르는 MPU를 RAP로부터 임의 억세스하는 경우 도 8과 같은 순서로 디코딩 프로세스를 처리하는 것이 제안된다.
[표 16]
Mpu_header(){
mpu_length;
mpu_type;
asset_id;
sequence_number;
if(mpu_type == AU_SET){
number_of_au;
default_duration_of_au;
if(number_of_au > 1){
order_of_au; //PRESENTATION,
//DECODING, UNKNOWN
}
for(i=0;i<number_of_au;i++){
if(default_duration == 0){
duration_of_au;
}
if(order_of_au == PRESENTATION){
decoding_order;
}
else if(order_of_au == DECODING){
presentation_order;
}
else if(order_of_au == UNKNOWN){
decoding_order;
presentation_order;
}
rap_flag;// TRUE,FALSE
number_of_mfu;
for(j=0;j<number_of_mfu;j++){
mfu_id;
}
}
}
else if(mpu_type == FILE){
…
}
}
도 8은 본 발명의 제6 실시 예에 따른 MPU 구조에서 재생하려는 시점을 찾아 재생하는 방법을 보이고 있다.
도 8을 참조하면, MPU에서 재생하려는 시점을 찾는 프로세스 또는 재생장치는, 811에서, 먼저 MPU의 Asset ID와 Sequence number를 검토하여 재생하려는 시간이 들어있는 MPU인지 확인한다.
그 다음, 813에서, mpu_type을 확인하고, 815에서, mpu_type이 AU_SET 타입인지 확인한다. 상기 815에서 mpu_type이 AU_SET이면 817에서 AU의 개수(number_of_au)를 확인한다.
819에서, 만약 AU의 개수가 1이면 MMT-CI에서 지시하는 MPU의 시작시간이 곧 AU의 시작시간이므로 더 이상의 검색을 진행하지 않고 종료한다. 상기 819에서, 만약 AU의 개수가 2개 이상이면, 821에서, AU가 어떤 순서로 배열되었는지 확인하고, 823에서, AU 길이를 확인한다.
825에서, AU 길이의 합은 MPU 구조에서 재생하려는 시점의 끝을 나타내며, AU의 처음 혹은 주어진 부분부터 재생이 가능한 AU를 Access 하려는 위치인지 판단한다.
AU가 presentation order이면 AU의 duration을 순서대로 더하는 것으로, 재생을 하려는 위치의 AU를 찾을 수 있고, decoding order나 unknown이라면 presentation order로 변환시켜 재생을 원하는 위치의 AU를 찾는 것이 필요하다.
이어, AU를 검색하는 과정에서, 827에서 AU가 RAP인지 여부를 판단한다. AU가 RAP라면 829에서, 향후 사용을 위해 가장 근접한 RAP 로서 AU의 번호를 저장한다. AU가 RAP 아니면, 검색한 이후의 AU로부터 해당 AU의 길이를 추가한다.
825, 827, 829 및 831 과정들을 반복하면, 835에서, 재생하려는 시간에 해당하는 AU의 번호를 알 수 있고, 812에서, 만약 이 AU가 RAP가 아니라면 837에서 가장 근접한 위치의 RAP 번호부터 재생을 개시한다.
제7 실시 예
본 발명의 제7 실시 예는 MPU의 비시간 미디어 전송을 위한 메타 정보에 대한 것이다.
MPU가 비시간 미디어를 전송하는 경우, MPU에는 하나 또는 그 이상의 비실시간 미디어가 포함될 수 있으며 해당 미디어를 파일로 처리한다.
파일은 이름과 크기 정보를 제공한다.
파일은 특성상 데이터 손실에 민감하기 때문에 EDC 정보를 제공한다. 손실을 허용하지 않으므로 AU_SET과는 달리 offset과 사이즈(size) 기반으로 MPU payload내의 파일(File)의 시작과 끝을 지시해도 무방하다. 아래 <표 17>은 파일을 전송하는 MPU header 구조를 나타낸 것이다.
[표 17]
Mpu_header(){
…
mpu_type;
…
if(mpu_type == NON_TIMED){
number_of_file;
for(i=0;i<number_of_file;i++){
file_name;
file_offset;
file_size;
file_edc;
}
}
}
제8 실시 예
본 발명의 제8 실시 예에서는 본 발명에서 제안된 MFU와 MPU를 MPEG-4에서 사용하고 있는 ISO Base Media File Format(ISOFF)을 활용해 표현하는 방법에 대해 제안한다.
ISOFF는 MFU에 해당하는 단위, 즉 subsample단위로 부호화된 미디어를 저장하거나 전송하지는 않지만 부호화된 미디어를 나타내기위해 전체 트랙 또는 Fragment의 단위로 subsample 의 정보는 표현하고 있다. 따라서 subsample의 정보를 표현하는 방법을 ISOFF에서 취해와 표현하는 방법에 대해 논의한다.
[표 18]
aligned(8) class SubSampleInformationBox
extends FullBox('subs', version, o) {
unsigned int(32) entry_count;
int i,j;
for (i=0; i < entry_count; i++) {
unsigned int(32) sample_delta;
unsigned int(16) subsample_count;
if (subsample_count > 0) {
for (j=0; j < subsample_count; j++)
if (version == 1)
{
unsigned int(32) subsample_size;
}
else
{
unsigned int(16) subsample_size;
}
unsigned int(8) subsample_priority;
unsigned int(8) discardable;
unsigned int(32) reserved = 0;
}
}
}
}
상기 <표 18>은 현ISOFF의 subs Box (SubSampleInformationBox)의 구조를 나타낸 것이다.
상기 <표 18>은 ISOFF에서 subsample의 정보를 표현하는 방법인 'subs' Box이다. 도시된 바와 같이 하나의 subs 박스는 한 트랙의 전체, 또는 한 fragment의 전체 샘플이 가진 subsample의 구조에 대한 테이블을 제공한다.
하지만 MMT의 MFU는, 각 MFU가 priority나 dependency_counter등을 근거로 한 판단에 따라 삭제되어질 수 있도록 설계되었으므로 트랙 전체나 fragment 전체에 대한 하나의 테이블은 MFU의 삭제를 불가능하게 한다.
따라서 도 9와 같이 mfu_ Box를 만들고 매 mfu_ Box마다 subs가 하나씩 포함되도록 구성하는 것이 바람직하다. 도 9는 본 발명의 제8 실시 예에 따른 MFU box의 구조를 보이고 있다.
종래 MFU의 구조에 따라 mfu_ Box는 아래 <표 19>와 같이 구성된다:
[표 19]
aligned(8) class MediaFragmentUnitBox
extends Box('mfu'){
uint(32) mfu_id;
SubSampleInformationBox;
data[];
}
상기 <표 19>는 mfu_ Box의 syntax를 나타낸 것이다. <표 19>에서 mfu_id는 mfu의 식별자로, MPU내에서 유일한 값을 갖는다. mfu_id의 값은 의미있는 값들의 조합 또는 일정한 크기로 증가하는 값 등이 가능하다.
SubSampleInformationBox는 subs Box(<표 20>)로, MFU의 목적에 맞게 사용하기 위해 다음과 같이 그 값을 제한(restrict)하여 사용한다.
[표 20]
aligned(8) class SubSampleInformationBox
extends FullBox('subs', version, 0) {//version is 0
unsigned int(32) entry_count;//always 1
int i,j;
for (i=0; i < entry_count; i++) {
unsigned int(32) sample_delta;//always zero
unsigned int(16) subsample_count;//always 1
if (subsample_count > 0) {
for (j=0; j < subsample_count; j++) {
if(version == 1) {
unsigned int(32) subsample_size; }
else {
unsigned int(16) subsample_size; }//mfu data size
unsigned int(8) subsample_priority;
unsigned int(8) discardable;
unsigned int(32) dependency_counter;
}
}
}
}
상기 <표 20>은 SubSampleInformationBox를 나타낸 것이다.
<표 20>에서 version이 1인 경우, subsample의 priority를 나타낼 수 없으므로 version은 0으로 고정해야 한다. entry_count는 subs가 나타내는 subsample의 개수로, MFU-subs는 각각 하나씩 pair구조를 가지므로 entry_count의 값은 항상 1로 고정해야 한다.
entry_delta는 이전에 표현한 sample대비 현재 표현하는 sample간 개수의 차이므로 하나의 sample에 대해 여러 개의 MFU-subs pair가 존재하는 경우 entry_delta의 값은 0이다. Subsample_count도 MFU-subs는 각각 하나씩 pair구조를 가지므로 항상 1로 고정해야 한다. Subsample_size는 MFU가 포함하는 data, 즉 부호화된 미디어의 크기를 지시 한다. (도 9에서 data Box의 크기)
한편, dependency_counter에 해당하는 값이 없으므로 reserved인 32비트는 dependency_counter로 그 값을 할당하도록 한다.
제9 실시 예
상기에서 설명한 제8 실시 예의 또 다른 방법으로, MFU의 구조는 도 10과 동일할 수 있다.
도 10은 본 발명의 제9 실시 예에 따른 mfu_ Box의 구조를 보이고 있다.
상기 설명한 제8 실시 예와의 차이는 data Box가 mfu_ Box 내에 포함되어 있는지의 여부이다.
단순히 data가 mfu_ Box의 바깥에 존재하는 것 이외에 MFU의 operation상 하나의 MFU-data pair가 온전히 삭제될 수 있도록 하기 위해서는 어떤 mfu_ Box와 어떤 data Box가 pair인지의 정보가 제공되어야 한다.
이에 따라 mfu_ Box에 존재하는 정보 중 subs Box의 subsample_size 정보와 data Box의 크기가 같은 경우 pair로 인지하여 MFU 삭제시 크기를 확인하는 단계를 거치는 것이 바람직하다.
즉, mfu_ Box와 data Box를 필요에 따라 삭제할 시에는 mfu_ Box내의 subs Box내의 subsample_size가 data Box의 크기와 일치하는지 확인하고, 만약 크기가 같을 경우에는 pair로 인지하여 mfu_ Box와 data Box를 삭제한다. 만약 크기가 다를 경우에는 MPU내에 크기가 일치하는 다른 data Box가 있는 지 확인하는 단계를 거치는 것이 바람직하다.
제10 실시 예
본 발명의 제10 실시 예에서는 본 발명의 제8 실시 예와 같은 목적으로, ISOFF를 활용해 MPU를 표현하는 방법에 대해 제안한다.
ISOFF는 MPU의 AU에 해당하는 단위, 즉 Fragment내의 Sample단위로 표현하는 방법을 가지고 있다. 하지만 MPU가 가진 모든 정보를 표현하고 있는 것은 아니므로 기존의 표현 방법 중 tfhd, trun Box를 활용하고, 이를 확장하는 방법에 대해 제시한다.
현 tfhd Box의 구조는 아래 <표 21>과 같다:
[표 21]
aligned(8) class TrackFragmentHeaderBox
extends FullBox('tfhd', 0, tf_flags){
unsigned int(32) track_ID;
// all the following are optional fields
unsigned int(64) base_data_offset;
unsigned int(32) sample_description_index;
unsigned int(32) default_sample_duration;
unsigned int(32) default_sample_size;
unsigned int(32) default_sample_flags
}
<표 21>은 현ISOFF의 tfhd Box (TrackFragmentHeaderBox)의 구조를 나타낸 것이다. 상기 <표 21>은 ISOFF의 fragment에서 trun들이 표현할 sample들의 기본값(default value)를 지정하는 tfhd Box이다. <표 21>의 내용중 base_data_offset으로부터 default_sample_flags 까지의 field들은 tf_flags값에 따라 on/off되는 optional field들로, MPU의 default_duration_of_au를 tfhd의 default_sample_duration으로 나타내도록 한다. 이에 따라 tf_flags는 MPU에서 사용될 때 0x000008을 반드시 가지도록 한다.
현 trun Box의 구조는 아래 <표 22>와 같다:
[표 22]
aligned(8) class TrackRunBox
extends FullBox('trun', version, tr_flags){
unsigned int(32) sample_count;
// the following are optional fields
signed int(32) data_ofset;
unsinged int(32) first_sample_flags;
// all fields in the following array are optional
{
unsigned int(32) sample_duration;
unsigned int(32) sample_size;
unsigned int(32) sample_flags
if (version == 0)
{ unsigned int(32) sample_composition_time_offs
else
{ signed int(32) sample_composition_time_offs
}[ sample_count]
}
상기 <표 22>는 현ISOFF의 trun(TrackRunBox) Box의 구조를 나타낸 것이다. 상기 <표 22>에서 하나의 trun Box는 fragment내의 sample들에 대한 정보를 제공한다. MPU의 정보들 중 trun을 사용해 나타낼 수 있는 정보는 number_of_au, presentation_order, duration_of_au 등이 있다. 이 중 number_of_au는 sample_count를 사용하여 나타내고 presentation_order와 duration_of_au는 결합하여 sample_composition_time_offset을 사용하여 나타내는 것이 바람직하다.
한편 decoding_order와 number_of_mfu, mfu_id는 trun에서 표현하고 있지 않으므로 decoding_order는 sample_decoding_order로 나타내고, number_of_mfu와 mfu_id는 시작 mfu의 id와 끝 mfu의 id를 지시하는 것으로 표현을 바꾸어 subsample_start_id, subsample_end_id로 표현하는 것을 제시한다.
decoding_order와 subsample_start_id, subsample_end_id를 optional field로서 제공하기 위해, 본 발명에서는 tf_flags를 아래와 같이 확장할 것을 제안한다.
0x001000 decoding-order-present: each sample in trun has its decoding order, otherwise samples are aligned in decoding order.
0x002000 subsample-start/end-id-present: each sample consists of subsample from subsample_start_id to subsample_end_id. It refers mfu_id in mfu_ box.
tf_flags의 값에 0x1000이 포함되는 경우, decoding_order가 존재하고, 포함되지 않는 경우 AU는 decoding 순서대로 정렬되어 있어야 한다.
tf_flags의 값에 0x2000이 포함되는 경우, AU를 구성하는 MFU의 ID는 subsample_start_id와 subsample_end_id를 사용해 지시한다. Subsample_start_id와 subsample_end_id가 지시하는 값은 MFU의 mfu_id값이다. MPU에서 trun Box를 사용할 때에는 tf_flags의 값 중 0x2000은 항상 사용되는 것이 권장된다.
이에 따라 trun Box는 아래 표 <23>과 같이 확장되는 것이 제안된다.
[표 23]
aligned(8) class TrackRunBox
extends FullBox('trun', version, tf_flags) {
unsigned int(32) sample_count;//number_of_au
{
unsigned int(32) sample_duration;
if (version == 0) {
uint(32) sample_composition_time_offset;
}
else {
int(32) sample_composition_time_offset;
}
uint(32) decoding_order;//flag=0x1000
uint(32) subsample_start_id;//flag=0x2000
uint(32) subsample_end_id; //flag=0x2000
}[ sample_count ]
}
상기 <표 23>은 확장된 trun Box를 나타낸 것이다. <표 23>에서 trun이나 tfhd에서 표현하고 있지 않은 MPU의 정보로는 asset_id, mpu_sequence_number, parameter_set 등이 있다.
Asset_id, mpu_sequence_number는 MMT의 구성요소로서 MPU가 동작하게 하기 위한 정보이므로 mpu_ Box를 새로 정의하여 포함시키는 것이 바람직하다.
또한 parameter set의 정보는 여러가지 Codec에 따라 그 표현 방식이 다르므로 확장성을 갖도록 하기 위해 type에 따라 그 data의 내용이나 형식이 달라질 수 있도록 Decoder Configuration Initialization Information을 정의하여 아래 <표 24>와 같이 나타내도록 한다:
[표 24]
DecoderConfigurationInitializationInformation (){
uint(32) type;
uint(32) length;
bit(8*length) InitializationInfoData;
}
상기 <표 24>는 Decoder Configuration Initialization Information을 나타낸 것이다. 이에 따라 MPU는 도 11과 같은 구조를 가진다:
도 11은 본 발명의 제10 실시 예에 따른 mpu_ Box와 mfu_ Box의 구조를 보이고 있다.
도 11의 mpu_ Box의 실제 syntax는 아래 <표 25>와 같다.
[표 25]
aligned(8) class MMTProcessingUnitBox
extends Box('mpu'){
uint(32) asset_id;
uint(32) mpu_sequence_number;
DecoderConfigurationInitializationInformation;
TrackFragmentHeaderBox;
TrackRunBox;
}
상기 <표 25>는 MMTProcessingBox를 나타낸 것이다. <표 25>에서 asset_id는 해당 MPU가 속한 Asset의 ID를 지시한다. mpu_sequence_number는 Asset내의 이전 MPU 로부터 1증가한 값이 해당 MPU의 sequence number가 된다. DecoderConfigurationInitializationInformation, TrackFragmentHeaderBox, TrackRunBox는 위에서 설명한 바와 같다.
도 12는 본 발명의 실시 예에 따라 적응적 미디어 구조를 생성하여 전송하는 송신 장치의 구성을 나타낸 블록도이다.
도 12에서 송신 장치(1200)는 입력부(1210), 저장부(1220), 전송부(1230) 및 제어부(1240)를 포함한다. 또한 송신 장치(1200)는 본 발명의 실시 예에 따라 도 2 내지 도 11에서 설명한 MPU 구조, 전송 패킷과 수신 패킷의 구조, 논리적 Asset 구조, Closed GOP에서 presentation 정보 제공 방법 및 decoding 순서정보 제공 방법, Open GOP에서 presentation 정보 제공 방법 및 decoding 순서정보 제공 방법, MFU box의 구조, mpu_ Box와 mfu_ Box 구조를 포함하는 적응적 미디어 구조를 지원한다. 이러한 송신 장치(1200)는 상기 적응적 미디어 구조에 따라 전송 단위를 결정하고, 상기 결정된 전송 단위에 따라 적어도 하나의 멀티미디어 소스를 MPU, MFU, ASSET 또는 PACKAGE의 전송 단위로 구성하여 전송한다.
도 12에서 입력부(1210)는 복합 미디어 컨텐츠를 생성하기 위한 멀티미디어 소스로서 다양한 종류의 멀티미디어 데이터를 입력 받는다. 저장부(1220)는 본 발명에서 제안된 MPU, MFU, ASSET의 구성 방법에 따라 생성된 ASSET들이 저장된다. 전송부(1230)는 정해진 통신망을 통해 상기 ASSET들을 전송한다. 제어부(1240)는 적어도 하나의 멀티미디어 데이터(소스)를 적응적 미디어 구조로 생성하기 위해, 본 발명에서 제안하는 MFU, MPU 그리고 Asset의 생성과 전송을 위한 전반적인 제어를 수행한다.
도 13은 본 발명의 실시 예에 따라 미디어 컨텐츠를 수신하는 수신 장치의 구성을 나타낸 블록도이다.
도 13에서 수신 장치(1300)는 수신부(501), 멀티미디어 소스 판독부(503), 멀티미디어 소스 저장부(505), 표시부(507) 및 제어부(509)를 포함한다.
또한 도 13에서 수신 장치는 도 2 내지 도 11에서 설명한 적응적 미디어 구조를 지원하며, 이러한 적응적 미디어 구조의 전송 단위로 수신된 미디어 컨텐츠의 복호를 수행한다.
도 13에서 수신부(1310)는 다양한 멀티미디어 데이터(소스)에 따른 MPU와 MFU를 포함하는 Asset 을 정해진 통신망을 통해 수신하고, Asset에 포함된 각종 정보(적응적 미디어 구조와 연관된 정보들)는 제어부(1340)로 전달되어 복합 미디어 컨텐츠의 수신 제어와 복호에 이용된다.
또한 상기 제어부(1340)는 상기 MFU에 대한 정보와 상기 MPU에 대한 정보를 이용하여 복합 미디어 컨텐츠의 수신 및 복호와 관련한 전반적인 제어를 수행한다.
또한 제어부(1340)는 멀티미디어 소스의 데이터 타입을 판독하고, 판독된 각 멀티미디어 소스를 멀티미디어 저장부(1320)에 구분하여 저장한다. 또한 제어부(1340)는 Asset의 수신과 멀티미디어 소스의 판독 및 복호를 위한 전반적인 제어를 수행하고, 복호된 멀티미디어 소스의 데이터는 표시부(1330)를 통해 출력된다.
한편 본 발명의 상세한 설명에서는 구체적인 실시 예에 관해 설명하였으나, 본 발명의 범위에서 벗어나지 않는 한도 내에서 여러 가지 변형이 가능함은 물론이다. 그러므로 본 발명의 범위는 설명된 실시 예에 국한되어 정해져서는 안되며 후술하는 특허 청구의 범위뿐만 아니라 이 특허 청구의 범위와 균등한 것들에 의해 정해져야 한다.