王木旺
(中國電影科學技術研究所,北京100086)
近年來,在國家政策的鼓勵下,點播影院飛速發展。2018年初國家頒布了 《點播影院、點播院線管理規定》,2019年5月國家又正式發布了 《點播影院暫行技術規范》。技術規范涵蓋了使用范圍、點播影院的系統架構、發行版和安全級別要求、計費系統數據上報要求、放映質量要求、主要設備技術要求以及對應的測量方法共7個部分。其中在技術規范第三部分 (點播影院發行版和安全級別要求)中,對點播影院的發行包制作還做了要求和說明。
規范中對于安全級別一級的點播影院系統和設備所采用的影片打包方式不做限制,由用戶自行選擇打包方式,本文不做贅述;對于安全級別為二級和三級的點播影院系統和設備則要求 “參考ISO 26429系列標準的DCP打包格式,圖像編碼可采用JPEG2000、H.264、HEVC 等”,本文則側重于研究該部分的影片打包和封裝規則;對于安全級別為四級的點播影院系和設備要求 “符合現行專業影院系統和設備的安全級別要求,并通過相關認證”,實際上就是按照目前市場上的專業影院放映規范來要求的,本文不做過多討論。
點播影院暫行技術規范中參考的ISO 26429系列標準是國際標準化組織發布的數字電影打包(Digital Cinema Packaging)相關系列標準,共有7個,分別是:
(1)ISO 26429-3:2008數字電影打包 (Digital Cinema Packaging)——第3部分:聲音和圖像軌跡文件(Sound and Picture Track File),該標準對應的國家行業標準是GY/T 293.1-2015,該標準主要是規定了采用素材交換格式 (MXF)發行數字電影內容的聲音和圖像軌跡文件格式的通用特性,定義了其數據結構。根據該條標準的要求,點播影院發行包的聲音和圖像文件必須采用MXF文件格式,并且還需要按照標準中規定的特定數據結構來存放數據。標準中明確要求MXF 文件格式應符合SMPTE 377:素材交換格式——文件格式規范(Material Exchange Format-File Format Specification);特定的操作模式應符合SMPTE 390:素材交換格式——特定操作模式 “OP-Atom”(Material Exchange Format-Specialized Operational Pattern“OP-Atom”);容器應采用SMPTE 379:素材交換格 式——MXF 通 用 容 器 (Material Exchange Format- MXF Generic Container)中定義的通用容器。
(2)ISO 26429-4:2008數字電影打包 (Digital Cinema Packaging)——第4 部 分: MXF JPEG2000 應用 (MXF JPEG 2000 Application),該標準對應的國家行業標準是GY/T 293.2-2015,該標準規定了采用JPEG2000 編碼的碼流映射到MXF通用容器的規則、提供的鍵值、通用標簽和基本數據的描述定義。標準中規定了JPEG2000碼流到MXF通用容器圖像元素的映射方法采用SMPTE 422:素材 交換格 式——映 射JPEG2000 碼 流 到MXF 通 用 容 器 (Material Exchange Format -Mapping JPEG2000 Codestreams into the MXF Generic Container)中規定的映射方法。
(3))ISO 26429-6:2008 數 字 電 影 打 包(Digital Cinema Packaging)——第6 部分:MXF軌跡文件基本數據加密 (MXF Track File Essence Encryption),該標準定義了基于幀封裝的非交織MXF數字電影軌跡文件的加密語法,并指定了匹配的參考解密模型。標準中要求采用高級加密標準(Advanced Encryption Standard,AES)加密算法進行內容加密,還可選用哈希運算消息認證碼
(Hash-based Message Authentication Code ,HMAC)——安全散列算法1 (Secure Hash Algorithm 1,SHA-1)對內容的完整性進行加密。
(4)ISO 26429-7:2008數字電影打包 (Digital Cinema Packaging)——第7部分:合成播放列表(Composition Playlist),該標準指定了合成播放列表的結構。合成播放列表是一個獨立的完整電影文件播放列表,它是由一系列有序的電影分本組成,每個分本對應一個聲音或圖像軌跡文件,合成播放列表通過分本的順序和時間來控制電影的播放。
(5)ISO 26429-8:2009數字電影打包 (Digital Cinema Packaging)——第8 部分:打包列表(Packing List),該標準指定了數字電影打包列表的數據交換格式。打包列表指定了發行包的內容,一個發行包應包含一個打包列表,以及和打包列表一起的合成播放列表資產、內容資產和其它需要的資產。
(6)ISO 26429-9:2009數字電影打包 (Digital Cinema Packaging)——第9部分:資產映射和文件分割(Asset Mapping and File Segmentation),該標準定義了數字電影發行包到存儲文件之間的通用映射方法,定義的數據結構用于將數字電影資產標識值映射到文件存儲路徑。
(7)ISO 26429-10:2009 數 字 電 影 打 包(Digital Cinema Packaging)——第9部分:立體圖像軌跡文件 (Stereoscopic Picture Track File),該標準定義了為封裝立體圖像內容的單個MXF 文件設計,還定義了一個新合成播放列表的擴展元素,用于引用立體圖像軌跡文件。
另外,《點播影院暫行技術規范》中還容許圖像編碼可采用除JPEG2000以外的H.264、HEVC 等方式,則需要參考SMPTE 381-3:素材交換格式——映射AVC 碼流到MXF 通用容器 (Material Exchange Format- Mapping MPEG Streams into the MXF Constrained Generic Container)。
根據《點播影院暫行技術規范》對安全級別二級和三級的影片打包要求,其發行包的組成和專業影片是相同,兩者都包含了一個打包列表 (Packing List,PKL),一個或多個合成播放列表 (Composition Playlist,CPL),一個資產映射列表 (Asset-Map),一個卷索引(Volume Index)以及一個或多個采用MXF格式封裝的電影音視頻數據軌跡文件(Track File)。只是專業影片對視頻數據采用的是JPEG2000的編碼方式,而點播影片可以采用JPEG2000、H.264、HEVC等多種編碼方式,由于編碼方式的不同,其軌跡文件在封裝過程也會采用多種內容映射方式和鍵值標識。
另外,對于采用內容加密的發行包,接收方在使用它時,還需要有相應的密鑰傳遞消息 (Key Delivery Message,KDM)用于解密,該KDM 并不屬于影片發行包的資產,也通常不與影片發行包一起發送。
打包列表 (PKL)是由可擴展標記語言 (Extensible Markup Language,XML)來描述的,它包含了10個元素,其中有5項為必填項,分別是:唯一標識 (Id)、發行日期 (IssueDate)、發行者(Issuer)、創 建 者 (Creator)、資 產 列 表 (Asset List);另外5 項為可選項,分別是:注釋文本(Annotation Text)、圖標標識(IconId)、分組標識(GroupId)、簽名者 (Signer)、簽名值 (Signature)。

圖1 打包列表的數據結構圖
資產列表 (Asset List)是由一系列的資產(Asset)元素組成,其又包含6個子元素,其中有4個是必填項,分別是:資產標識 (Id)、哈希值(Hash)、大小(Size)、類型(Type);2個可選項,分別是:注釋文本 (Annotation Text)、原始文件名(Original FileName)。
合成播放列表 (CPL)也是由可擴展標記語言(XML)來描述的,它包含了13個元素,其中有7項為必填項,分別是:唯一標識 (Id)、發行日期(IssueDate)、節目標題 (Content Title Text)、節目類型 (Content Kind)、節目版本 (Content Version)、節目等級 (Rating List)、分本列表 (Reel-List);另外6 項為可選項,分別是:注釋文本(Annotation Text)、圖標標識 (IconId)、發行者(Issuer)、創建者(Creator)、簽名者(Signer)、簽名值(Signature)。
分本列表 (Reel List)是由一系列的分本 (Real)元素組成,它包含三個元素,其中唯一標識(Id)和資產列表(Asset List)為必填項,注釋文本(Annotation Text)為可選項。
資產列表(Asset List)是根據包含的資產信息不同,而由不同的元素組成,它主要有四個可選項,分別是標記(Main Markers)、圖像(MainPicture)、聲音 (MainSound)、字幕 (MainSubtitle)四個元素,另外標準還預留了擴展新的資產類型。

圖2 合成播放列表的數據結構圖
資產映射表也是由可擴展標記語言 (XML)來描述的,它包含了7 個元素,其中6 個為必填項,分別是:唯一標識 (Id)、創建者 (Creator)、卷數(VolumeCount)、發行日期 (IssueDate)、發行者(Issuer)、資產列表(Asset List);另外1項為可選項:注釋文本(Annotation Text)。
資產列表 (Asset List)是由一系列的資產(Asset)元素組成,它包含4個子元素,其中2個為必填項,分別是:唯一標識 (Id)、塊列表(Chunk List);另外2項為可選項,分別是:注釋文本(Annotation Text)、打包列表標識 (Packing-List)。
塊列表 (Chunk List) 是由一系列的塊(Chunk)元素組成,它包含4個子元素,其中1個為必填項:存儲路徑 (Path);另外3項為可選項,分別是:卷索引 (VolumeIndex)、偏移量 (Offset)、長度(Length)。

圖3 資產映射表的數據結構圖
卷索引文件也是由可擴展標記語言 (XML)來描述的,它的根元素是卷索引 (VolumeIndex),該元素僅包含一個子元素Index (索引)。

圖4 卷索引文件的數據結構圖
點播影院發行包和專業影院發行包一樣,存放音視頻等數據的文件叫做軌跡文件,它采用素材交換格式 (MXF)進行封裝。無論是點播影院發行包,還是專業影院發行包,其MXF 的文件結構和包含的數據項都相同。MXF文件從數據結構上可以分為文件頭 (File Header)、文件體 (File Body)、文件尾(File Footer)三部分。簡單的MXF文件數據結構如圖5所示。

圖5 簡單的MXF文件數據結構圖
一個MXF文件除了可從數據結構上劃分文件組成,還可以從邏輯上進行分區,從邏輯上劃分,更容易解析文件和管理索引。一個MXF 文件從邏輯上又可以劃分為多個分區,分區包含了1個頭分區、0個或多個主體分區、0個或多個尾分區。
有的MXF文件頭部可能會有插入部分 (Runin)用于偽裝MXF為別的文件類型,尾部可能會有隨機索引包 (Random Index Pack)用于對各部分的索引。其各分區的數據組成如圖6所示。

圖6 MXF文件各分區的數據組成
3.6.2 KLV 編碼協議
MXF文件是由一系列KLV (Key Length Value)編碼的數據包組成,除文件的插入部分 (Runin)外,所有數據都應該采用KLV 編碼并沒有間隔。KLV 數據包由鍵值 (Key)、長度 (Length)、值(Value)三部分組成。其數據結構及描述如表1所示。

表1 KLV 數據結構及描述
其中,鍵值(Key)由16個字節長度的值來組成,其每一個字節都規定了不同的標識作用和取值范圍,它的每部分詳細描述和編碼取值如表2所示。

表2 鍵值描述及編碼
鍵值(Key)中Byte5至Byte7字節的編碼如表3所示。

表3 UL標示符中5到7字節編碼協議

0x03 Wrappers and Containers 01-簡單封裝包和容器 0x01~0x7F 02-復雜封裝包和容器 0x01~0x7F 0x04 Labels 標簽注冊 0x01~0x7F 0x05 Registered Private Information注冊私有信息 0x01~0x7F 06~7E Reserved 保留
根據鍵值(Key)的不同可以標識出KLV 數據包存儲的是文件描述數據、音視頻原始數據還是其它數據,并按照MXF 文件的格式要求,將不同的數據放置到文件的不同的部分,其中最主要的音視頻等數據需要放置到素材容器中,但由于點播影院的音視頻數據文件在KLV 編碼過程中,采用了JPEG2000、H.264、H.265 等多種音視頻壓縮方式,其對應的數據映射方式也更多樣,所以其鍵值(Key)也根據存儲的數據類型、數據的編碼方式以及數據映射方式來形成不同的值,并生成各種KLV組合。
3.6.3 通用容器(General Container,GC)

圖7 通用容器、內容包和KLV 之間關系圖
通用容器 (General Container)是一種數據流容器,它通過將不同類型的素材數據交織在一起,形成時間同步的數據流,保障音頻、視頻素材能夠連續解碼播放。每一個通用容器 (General Container)是由1 個或多個內容包 (Content Package,CP)組成,每個內容包(Content Package)又由最多5個數據項 (Item)組成,每個數據項 (Item)又由最多127 個KLV 包組成,其3者之間的關系如圖7所示。
點播影院發行包的各種素材數據在生成各種KLV 組合時,需要按照數據到通用容器 (General Container)的格式要求來組織數據,并最終存放于MXF文件的素材容器部分。
3.6.4 內容映射
素材數據映射到通用容器 (General Container)的形式有三種:基于幀的映射 (Frame Wrapping)、基于片段的映射(Clip Wrapping)和自定義的映射
(Custom Wrapping)。
在基于幀的映射 (Frame Wrapping)方法中,每個通用容器 (General Container)包含1個或多個內容包 (Content Package),每個內容包中的內容為1 幀 (Frame)或1 場 (Field)的素材數據?;趲挠成涫疽鈭D如圖8所示。

圖8 基于幀的通用容器映射示意圖
基于片段的映射 (Clip Wrapping)方法中,每個通用容器中只能包含1個內容包 (Content Package),每個內容包的內容為1或多幀 (Frame)/場(Field),其映射示意圖如圖9所示。

圖9 基于片段的通用容器映射示意圖
不符合基于幀映射 (Frame Wrapping)和片段映射(Clip Wrapping)的,都應該定義為自定義映射。自定義映射要求至少制定以下要求:每個內容包(Content Package)都按時間基數計量的時長;每個內容元素 (Content Element)是否時長固定;每個內容元素(Content Element)的數據結構,以及素材數據到該數據結構的映射方法;在SMPTE 377-1規則下,是否可以索引,如何在映射方法中應用。自定義映射也應當遵循ISO 26429系列標準中規定的內容包 (Content Package)結構、KLV編碼結構、元素鍵值和容器標簽。常用的自定義映射類型有分組原始流 (Packetized Elementary Streams,PES)、 圖 像 組 (Group Of Picture,GOP)等。
目前點播影院暫行技術規范并沒有嚴格要求采用哪種映射方式,這就要求不同的系統和設備廠商要具備多種映射方式處理能力,才能保證播放不同廠商制造的發行包。
本文按照 《點播影院暫行技術規范》中,針對于安全級別為二級和三級的點播影院系統和設備制作點播影院發行包的要求,介紹了要參照的ISO 26429系列標準,以及按照標準,詳細介紹了點播影院發行包的文件組成及數據結構。但由于本文的篇幅有限,不能對數據結構中具體的數據生成方法和規則詳細說明,希望對點播影院各參與方在點播影院發行包的制作方面提供一個總體性了解。