IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ベイジン バイトダンス ネットワーク テクノロジー カンパニー リミテッドの特許一覧

特許7174762メタデータ容器の解析方法、装置及び記憶媒体
<>
  • 特許-メタデータ容器の解析方法、装置及び記憶媒体 図1
  • 特許-メタデータ容器の解析方法、装置及び記憶媒体 図2
  • 特許-メタデータ容器の解析方法、装置及び記憶媒体 図3
  • 特許-メタデータ容器の解析方法、装置及び記憶媒体 図4
  • 特許-メタデータ容器の解析方法、装置及び記憶媒体 図5
  • 特許-メタデータ容器の解析方法、装置及び記憶媒体 図6
  • 特許-メタデータ容器の解析方法、装置及び記憶媒体 図7
  • 特許-メタデータ容器の解析方法、装置及び記憶媒体 図8
  • 特許-メタデータ容器の解析方法、装置及び記憶媒体 図9
  • 特許-メタデータ容器の解析方法、装置及び記憶媒体 図10
  • 特許-メタデータ容器の解析方法、装置及び記憶媒体 図11
  • 特許-メタデータ容器の解析方法、装置及び記憶媒体 図12
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-09
(45)【発行日】2022-11-17
(54)【発明の名称】メタデータ容器の解析方法、装置及び記憶媒体
(51)【国際特許分類】
   H04N 21/434 20110101AFI20221110BHJP
   H04N 5/765 20060101ALI20221110BHJP
   H04N 5/92 20060101ALI20221110BHJP
【FI】
H04N21/434
H04N5/765
H04N5/92 010
【請求項の数】 14
(21)【出願番号】P 2020535968
(86)(22)【出願日】2018-08-31
(65)【公表番号】
(43)【公表日】2021-03-11
(86)【国際出願番号】 CN2018103550
(87)【国際公開番号】W WO2019227749
(87)【国際公開日】2019-12-05
【審査請求日】2020-06-25
(31)【優先権主張番号】201810532331.8
(32)【優先日】2018-05-29
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】520476341
【氏名又は名称】北京字節跳動網絡技術有限公司
【氏名又は名称原語表記】Beijing Bytedance Network Technology Co., Ltd.
【住所又は居所原語表記】Room B-0035, 2/F, No.3 Building, No.30, Shixing Road, Shijingshan District Beijing 100041 China
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】▲銀▼ 国▲徴▼
【審査官】大西 宏
(56)【参考文献】
【文献】特開2004-040329(JP,A)
【文献】特開2005-229587(JP,A)
【文献】特開2006-323678(JP,A)
【文献】特開2007-060286(JP,A)
【文献】特表2010-539834(JP,A)
【文献】特表2011-511593(JP,A)
【文献】特表2013-521691(JP,A)
【文献】国際公開第2005/002231(WO,A1)
【文献】中国特許出願公開第107979783(CN,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04N 21/434
H04N 5/765
H04N 5/92
H04N 7/10
H04N 7/14 - 7/173
H04N 7/20 - 7/56
H04N 21/00 -21/858
H04N 5/76 - 5/775
H04N 5/80 - 5/907
H04N 5/91 - 5/956
(57)【特許請求の範囲】
【請求項1】
メタデータ容器の解析方法であって、
メディアファイルにおけるメタデータ容器の位置に基づいて、メディアファイルのバイナリデータからメタデータ容器に対応するバイナリデータを取得すること;
取得されたバイナリデータ内の前記メタデータ容器のヘッダの標準長に対応するバイナリデータを順次に解析して、前記メタデータ容器内のサブ容器の容器タイプ、及び前記サブ容器の容器データの長さを取得すること;及び
前記サブ容器の容器タイプに対応するタイプの解析器を呼び出して、未解析のデータ内の前記容器データの長さに対応するバイナリデータを順次に解析し、前記容器データが表すメディア情報を取得すること;
を備え、
前記サブ容器の容器タイプに対応するタイプの解析器を呼び出せられなかった時に、
前記サブ容器に対応するバイナリデータを解析することを無視すること;及び
前記サブ容器の長さに基づいて、前記バイナリデータのうち次のサブ容器に対応する部分へジャンプし引き続いて解析を行うこと;
をさらに備え
呼び出された前記解析器内で解析するサブ容器を記録すること;及び
記録情報を分析することで解析器の呼び出された頻度を判断し、呼び出される頻度が高い解析器を基礎解析ユニットとしてパッケージングすること;
をさらに備える解析方法。
【請求項2】
請求項1に記載の解析方法であって、
前記サブ容器の容器タイプに対応するタイプの解析器を呼び出すことは、
前記サブ容器の容器タイプを事前にマークされた容器タイプと対比すること;及び
対比を行うことで、前記サブ容器の容器タイプが事前マークと一致し、且つバイナリデータを直接にパッケージすることに用いられると事前マークと一致した時に、
前記サブ容器の容器タイプに対応する解析器を呼び出し、前記解析器によって前記サブ容器内の容器データを解析し、前記容器データが表すメディア情報を取得すること;
を備える解析方法。
【請求項3】
請求項1に記載の解析方法であって、
前記サブ容器の容器タイプを事前にマークされた容器タイプと対比すること;
対比を行うことで、前記サブ容器の容器タイプが事前マークと一致し、且つ引き続き容器をパッケージすることに用いられると事前マークと一致した時に、
前記サブ容器内にパッケージされている容器の容器タイプが事前マークと一致し、且つバイナリデータを直接にパッケージすることに用いられると事前マークと一致するまで、前記メディアファイル内の容器ヘッダの標準長に基づいて、前記サブ容器に対応するバイナリデータを再帰的に解析すること;
をさらに備える解析方法。
【請求項4】
請求項3に記載の解析方法であって、
対比を行うことで、前記サブ容器内にパッケージされている容器の容器タイプが事前マークと一致し、且つバイナリデータを直接にパッケージすることに用いられると事前マークと一致したと確定した時に、
サブ容器内にパッケージされている容器の容器タイプに対応する解析器を呼び出し、バイナリデータをバイト単位毎に解析し、解析されたバイナリデータの長さが前記サブ容器内にパッケージされている容器の容器データの長さに対応することで、サブ容器内にパッケージされている容器の容器データが表すメディア情報を取得すること
をさらに備える解析方法。
【請求項5】
請求項1に記載の解析方法であって
録されたサブ容器のインスタンスをサブ容器属性に設定し、ここで、前記サブ容器属性が、前記サブ容器が所属する容器に含まれ、前記サブ容器と所属する容器との間のネスト関係を記述することに用いられること;
をさらに備える解析方法。
【請求項6】
請求項1に記載の解析方法であって、
前記サブ容器と所属する容器との間のネスト関係、及び前記サブ容器とパッケージしている容器とのネスト関係に基づいてオブジェクトを作成すること;及び
前記サブ容器の容器タイプがバイナリデータを直接にパッケージすることに用いられると事前マークと一致した時に、前記サブ容器に対応して作成されたオブジェクト内へメディア情報を含めた配列を格納し、ここで、格納されたメディア情報が前記サブ容器の容器データで表されること;
をさらに備える解析方法。
【請求項7】
メタデータ容器の解析装置であって、
メディアファイルにおけるメタデータ容器の位置に基づいて、メディアファイルのバイナリデータからメタデータ容器に対応するバイナリデータを取得するように構成されたデータ取得ブロックと;及び
取得されたバイナリデータ内の前記メタデータ容器のヘッダの標準長に対応するバイナリデータを順次に解析して、前記メタデータ容器内のサブ容器の容器タイプ、及び前記サブ容器の容器データの長さを取得するように構成されたデータ解析ブロックと、
を備え、
前記データ解析ブロックは、前記サブ容器の容器タイプに対応するタイプの解析器を呼び出して、未解析のデータ内の前記容器データの長さに対応するバイナリデータを順次に解析し、前記容器データが表すメディア情報を取得するように構成され、
前記データ解析ブロックは、前記サブ容器に対応するバイナリデータを解析することを無視するようにさらに構成され;
前記データ解析ブロックは、前記サブ容器の長さに基づいて、前記バイナリデータのうち次のサブ容器に対応する部分へジャンプし引き続いて解析を行うようにさらに構成され
呼び出された前記解析器内で解析するサブ容器を記録し、記録情報を分析することで解析器の呼び出された頻度を判断し、呼び出される頻度が高い解析器を基礎解析ユニットとしてパッケージングするように構成されたデータ記録ブロックをさらに備える解析装置。
【請求項8】
請求項7に記載の解析装置であって、
前記データ解析ブロックは、前記サブ容器の容器タイプを事前にマークされた容器タイプと対比するようにさらに構成され;
前記データ解析ブロックは、前記サブ容器の容器タイプに対応する解析器を呼び出し、前記解析器によって前記サブ容器内の容器データを解析し、前記容器データが表すメディア情報を取得するようにさらに構成された解析装置。
【請求項9】
請求項7に記載の解析装置であって、
前記データ解析ブロックは、前記サブ容器の容器タイプを事前にマークされた容器タイプと対比するようにさらに構成され;
前記データ解析ブロックは、前記サブ容器内にパッケージされている容器の容器タイプが事前マークと一致し、且つバイナリデータを直接にパッケージすることに用いられると事前マークと一致するまで、前記メディアファイル内の容器ヘッダの標準長に基づいて、前記サブ容器に対応するバイナリデータを再帰的に解析するようにさらに構成された解析装置。
【請求項10】
請求項9に記載の解析装置であって、
前記データ解析ブロックは、サブ容器内にパッケージされている容器の容器タイプに対応する解析器を呼び出し、バイナリデータをバイト単位毎に解析し、解析されたバイナリデータの長さが前記サブ容器内にパッケージされている容器の容器データの長さに対応することで、前記サブ容器内にパッケージされている容器の容器データが表すメディア情報を取得するようにさらに構成された解析装置。
【請求項11】
請求項7に記載の解析装置であって
録されたサブ容器のインスタンスをサブ容器属性に設定し、ここで、前記サブ容器属性が、前記サブ容器が所属する容器に含まれ、前記サブ容器と所属する容器との間のネスト関係を記述するように構成された解析装置。
【請求項12】
請求項7に記載の解析装置であって、
前記サブ容器と所属する容器との間のネスト関係、及び前記サブ容器とパッケージしている容器とのネスト関係に基づいてオブジェクトを作成し、前記サブ容器に対応して作成されたオブジェクト内へメディア情報を含めた配列を格納し、ここで、格納されたメディア情報が前記サブ容器の容器データで表されるように構成されたデータ格納ブロックをさらに備える解析装置。
【請求項13】
メタデータ容器の解析装置であって、
実行可能な指令を格納するように構成されたメモリと;
前記実行可能な指令を実行する時に、請求項1から6の何れか1項に記載のメタデータ容器の解析方法を実現するように構成されたプロセッサと;
を備える解析装置。
【請求項14】
コンピュータで読み取り可能な記憶媒体であって、
実行可能な指令が格納され、前記実行可能な指令が実行される時に、請求項1から6の何れか1項に記載のメタデータ容器の解析方法を実現するように構成されたコンピュータで読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の取り込み
本出願は、申請番号201810532331.8、申請日2018年05月29日である中国特許出願に基づいて提出し、該中国特許出願の優先権を要求し、該中国特許出願の全ての内容をここで本出願に参照として取り込んでいる。
【0002】
本公開は、マルチメディアデータ技術に関し、特にメタデータ容器の解析方法、装置及び記憶媒体に関する。
【背景技術】
【0003】
メディアファイル内にパッケージされたメタデータがメディア情報をキャリアしている。メディア情報に基づいてメディアファイル内にパッケージされたメタデータ(例えば、ビデオフレーム及びオディオフレーム)を正確にデコードすることができる。これにより、映像の非同期又は映像の欠落等の現象を回避する。
【0004】
メディアファイルをネットワーク通じて伝送し再生する場合、再生のリアルタイム性によって、メタデータからメディア情報を正確且つ効率よく解析可能なことが要求されている。これにより、再生の遅延を回避する。
【発明の概要】
【課題を解決するための手段】
【0005】
これを鑑みて、本公開の実施例は、メタデータからメディア情報を正確且つ効率よく解析することができるメタデータ容器の解析方法、装置及び記憶媒体を提供する。
本公開の実施例の形態は、以下のように実現されている。
【0006】
本公開の実施例は、メタデータ容器の解析方法を提供する。前記解析方法は、メディアファイルにおけるメタデータ容器の位置に基づいて、メディアファイルのバイナリデータからメタデータ容器に対応するバイナリデータを取得することと;取得されたバイナリデータ内の前記メタデータ容器ヘッダの標準長に対応するバイナリデータを順次に解析して、前記メタデータ容器内のサブ容器の容器タイプ、及び前記サブ容器の容器データの長さを取得することと;前記サブ容器の容器タイプに対応するタイプの解析器を呼び出して、未解析のデータ内の前記容器データの長さに対応するバイナリデータを順次に解析し、前記容器データが表すメディア情報を取得することと;を備える。
【0007】
本公開の実施例は、さらにメタデータ容器の解析装置を提供する。前記解析装置は、メディアファイルにおけるメタデータ容器の位置に基づいて、メディアファイルのバイナリデータから相応するメタデータ容器のバイナリデータを取得するように構成されたデータ取得ブロックと;取得されたバイナリデータ内の前記メタデータ容器ヘッダの標準長に対応するバイナリデータを順次に解析して、前記メタデータ容器内のサブ容器の容器タイプ、及び前記サブ容器の容器データの長さを取得するように構成されたデータ解析ブロックと;を備え、前記データ解析ブロックは、前記サブ容器の容器タイプに対応するタイプの解析器を呼び出して、未解析のデータ内の前記容器データの長さに対応するバイナリデータを順次に解析し、前記容器データが表すメディア情報を取得するように構成されている。
【0008】
他の形態では、本公開の実施例は、さらにメタデータ容器の解析装置を提供する。前記解析装置は、
実行可能な指令を格納するためのメモリと;
前記メモリに格納された実行可能な指令を実行して本公開の実施例が提供したメタデータ容器の解析方法を実現するためのプロセッサと;
を備える。
【0009】
他の形態では、本公開の実施例は、さらに記憶媒体を提供する。前記記憶媒体は、実行可能な指令が格納され、前記実行可能な指令が実行される時に、本公開の実施例が提供したメタデータ容器の解析方法を実現することに用いられる。
【0010】
本公開の実施例は、本公開の実施例に示す態様によって、メタデータ容器内の相応するデータに対する解析速度を効果的に向上させることができ、データ解析の正確率を向上させ、データ解析の速度が遅いことでユーザの使用体験が影響されることを回避できるという効果を有する。
【図面の簡単な説明】
【0011】
図1図1は、本公開の実施例が提供したマルチメディアファイルパッケージ用の容器のある選択可能な構造の模式図である。
図2図2は、本公開の実施例のMP4ファイルのある選択可能なパッケージ構造の模式図である。
図3図3は、本公開の実施例のメディアファイル内のメディアデータ容器がメディアデータを記憶する、ある選択可能な構造の模式図である。
図4図4は、本公開の実施例のFMP4ファイルのある選択可能なパッケージ構造の模式図である。
図5図5は、本公開の実施例のメタデータ容器の解析装置のある選択可能な構成の模式図である。
図6図6は、本公開の実施例のメタデータ容器の解析装置のある選択可能な構成の模式図である。
図7図7は、本公開の実施例が提供したメタデータ容器の解析方法のある選択可能なフローの模式図である。
図8図8は、本公開の実施例が提供したメタデータ容器からメディア情報を解析して取得する、ある選択可能なフローの模式図である。
図9図9は、本公開の実施例が提供したメタデータ容器の解析方法のある選択可能なフローの模式図である。
図10図10は、本公開の実施例が提供したメタデータ容器の解析方法のある選択可能なフローの模式図である。
図11図11は、本公開の実施例が提供したメタデータ容器の解析方法のある選択可能な使用場面の模式図である。
図12図12は、本公開の実施例が提供したMP4ファイルをFMP4ファイルに変換してメディアソース拡張インターフェースを通じて再生する模式図である。
【発明を実施するための形態】
【0012】
本開示の目的、態様、利点をより明確するために、以下で本開示を、図面を結合しながら詳しく説明する。下記の実施例が本開示を限定するものではなく、当業者が、創造的な労働せずに取得した全ての他の実施例は、本開示の技術的範囲に属する。
【0013】
本明細書で使用される全ての技術や科学用語は、特に断りがない限り、本開示の技術領域に属する当業者に通常理解されるものと同義である。本明細書に使用される用語は、具体的な実施例を説明するためのものであり、本開示を限定する主旨ではない。
【0014】
本開示をさらに詳しく説明する前に、本開示の実施例に係る名詞及び技術用語を説明する。本開示の実施例に係る名詞及び技術用語は、以下の解釈を適用する。
【0015】
1)メディアファイルは、容器(Box、ボックスとも呼ぶ)という形式で符号化されたメディアデータ(例えば、オディオデータ及びビデオデータの少なくとも一種)を記憶するファイルである。メディアファイルには、メディアデータを正確的に復号されることを確保するために、メディアデータを記述するメタデータをさらに含む。
【0016】
例えば、MPEG(MovingPictureExpertsGroup)-4というパッケージMP4容器という方式でマルチメディアデータをパッケージすることで形成されるメディアファイルは、MP4ファイルという。典型的には、MP4ファイルには、AVC(AdvancedVideoCoding、即ちH.264)又はMPEG-4(Part2)標準に符合化された映像データ及びAAC(AdvancedAudioCoding)標準に符合化された音声データが格納されており、もちろん映像と音声の他の符号化方式を除外しない。
【0017】
2)容器(Box)は、ボックスとも呼ばれ、唯一の類別識別子と長さで定義される、オブジェクト向けの部材である。図1は、本開示の実施例に係る容器の選択可能な構造の一つを模式的に示す図である。図1を参照して、容器には、容器ヘッダ(容器ヘッダ)及び容器データ(BoxData)が含まれ、各種情報を表現するためのバイナリデータが充填されている。ここで、容器が相互にネストされることができ、容器のデータは一連のサブ容器である場合、この容器がコンテナ容器(ContainerBox)となる。
【0018】
容器ヘッダは、容器がメディアファイルに占用する長さ記憶空間の大きさを示す容量(size)、及び容器の種類を示すタイプ(type)を含む。図2は、本開示の実施例に係るMP4ファイルの選択可能なパッケージ構造の一つを模式的に示す図である。図2を参照して、MP4ファイルには、ファイルタイプ容器(ftypbox)、メタデータ容器(moovbox)及びメディアデータ容器(mdatbox)という三つの基本的な容器タイプを含む。
【0019】
容器データ部は、具体的なデータを記憶することができ、このときの容器が「データ容器」と呼ばれる。容器データ部は別の種類の容器をさらにパッケージすることができ、このときの容器が「容器の容器」と呼んでもよい。
【0020】
3)トラック(Track)は、ストリーム(Stream)とも呼ばれ、メディアデータ容器において時間順にソートする相関のサンプル(Sample)である。メディアデータにおいては、トラックが一つの映像フレーム系列又は一つの音声フレーム系列を表し、映像フレーム系列に同期した字幕トラックを含んでもよい。同一のトラックにおける一組の連続するサンプルはチャンク(Chunk)と呼ばれる。
【0021】
4)ファイルタイプの容器は、メディアファイルにおいてファイルの容量(即ち、占用するバイトの長さ)やタイプを格納するための容器である。図2に示すように、ファイルタイプの容器は、ftyp容器と付けられ、格納されるバイナリデータが、ファイル容器の種類及び互換性を標準バイト長さに従って記述する。
【0022】
5)メタデータ容器は、メディアファイルにおいてメタデータ(即ち、メディアデータ容器に格納されるマルチメディアデータを記述するデータ)を記憶するための容器である。MP4ファイルのメタデータ容器に格納されるバイナリデータが表現する情報をメディア情報と呼ぶ。
【0023】
図2に示すように、メタデータ容器のヘッダは、容器タイプが「moovbox」であることをバイナリデータで表す。容器データ部は、MP4ファイルの全体情報を記憶するためのmvhd容器をパッケージしており、時間長、作成時刻、修正時間などを含み、MP4ファイルから独立して、MP4ファイルの再生に関するものである。
【0024】
メディアファイルのメディアデータ容器に、複数のトラック、例えば音声トラック容器(オディオトラック容器)及び映像トラック容器(ビデオトラック容器)、に対応するサブ容器を含んでもよい。音声トラック容器及び映像トラック容器のサブ容器のそれぞれには、対応するトラックのメディアデータの参照及び記述を含んでいる。必要なサブ容器には、トラックの特性及び全体情報(例えば時間、高さ、幅)を記述するための容器(tkhdboxと記す)と、トラックのメディア情報(例えばメディアタイプ及びサンプルに関する情報)を記録する容器(mdiaboxと記す)と、を含む。
【0025】
メディア容器にパッケージされるサブ容器については、トラックの関連属性及び内容を記録する容器(mdhdboxと記す)と、メディアを再生する過程情報を記録する容器(hdlrboxと記す)と、トラックにおけるメディアデータのメディア情報を記述する容器(minfboxと記す)と、を含むことができる。minf容器には、どのようにメディア情報を位置決めるかを解釈するためのサブ容器(dinfboxと記す)、及びトラックでサンプリングした全ての時間情報(復号時間/表示時間)、位置情報及び復号/符号などの情報を記録するためのサブ容器(stblboxと記す)がさらにパッケージされる。
【0026】
図3は、本開示の実施例に係るメディアファイルにおけるメディアデータ容器がメディアデータを記憶する構造模式図である。図3に示すように、stbl容器のバイナリデータから識別されるメディア情報を用いて、サンプルの時間、タイプ、容量及びメディアデータ容器における位置を解釈可能である。次に、stbl容器における各サブ容器について説明する。
【0027】
stsd容器は、1つのサンプルディスクリプション(sampledescription)テーブルを含む。各メディアファイルには、異なる符号化方式及び記憶データのファイル数に応じて、一つ又は複数のディスクリプションテーブルが含まれることができる。ディスクリプションテーブルを通じて、サンプル毎のディスクリプション情報を見当たることができる。ディスクリプション情報は、サンプルを正しく復号されることを保証できる。異なるメディアタイプに対して相違するディスクリプション情報、例えば映像メディアについてのディスクリプション情報が画像の構造、を格納する。
【0028】
stts容器は、サンプルの時間長に関する情報を格納するものであり、時間(復号時間)とサンプルの番号とをマッピングするためのテーブルを提供する。sttxboxにより、メディアファイルおける任意の時間のサンプルを位置決めすることができる。stts容器はさらに他のテーブルを用いてサンプルの容量とポインタとをマッピングし、テーブルにおけるエントリごとに同じ時間オフセット内で連続するサンプルの番号、およびサンプリングのオフセットを与え、これらのオフセットを増加させて、完全な時間-サンプルのマッピングテーブルを作成し、数式は次のようになる。
【0029】
DT(n+1)=DT(n)+STTS(n)(1)
【0030】
ここで、STTS(n)は、第nのサンプルの時間長であり、DT(n)は第nのサンプルの表示時間である。サンプルの配列が時間順にソートされているので、オフセット量は常に非負である。DTは、一般的に0から開始する。第iのサンプルの表示時間DT(i)を例として、計算式は次の通りである。
【0031】
DT(i)=SUM(forj=0toi-1ofdelta(j))(2)
【0032】
全てのオフセットの和はトラックにおけるメディアデータの時間長である。
【0033】
sStss(Time-To-SampleAtoms)容器は、メディアファイルにおけるキーフレームの番号を記録するものである。
【0034】
stsc(Sample-To-ChunkAtom)容器は、サンプルとサンプルを格納するチャンクとのマッピング関係を記録するものであり、テーブルによりサンプルの番号とチャンクの番号との関係をマッピングし、テーブルを調べることで特定のサンプルを含むチャンクを見つけることができる。
【0035】
stco容器は、トラック内における各チャンクの位置を定義するものであり、位置が、メディアデータ容器の先頭バイトのオフセットと、先頭バイトに対する長さ(容量)で表される。
【0036】
stsz(SampleSizeAtom)容器は、メディアファイルの各サンプルの容量(即ちサイズ)を記録する。
【0037】
6)メディアデータ容器は、メディアファイルにおいてマルチメディアデータを記憶するための容器である。例えば、MP4ファイルにおけるメディアデータ容器は、図3に示すように、サンプルがメディアデータ容器において記憶する単位であって、メディアファイルのチャンクに記憶され、チャンクとサンプルの長さは互いに異なってもよい。
【0038】
7)セグメントメディアファイルは、メディアファイルを分割して形成され、それぞれ独立して復号できるサブファイルである。
【0039】
MP4ファイルを例とすれば、MP4ファイルのメディアデータがキーフレームによって分割され、分割されたメディアデータと対応するメタデータとをセグメント化FMP4ファイルにパッケージし、各FMP4ファイルにおけるメタデータがメディアデータが正確的に復号されることを保証できる。
【0040】
図4は、本開示の実施例に係るセグメント化MP4(FMP4)ファイルの選択可能なパッケージ構造の一つを模式的に示す図である。例えば、図2に示すMP4ファイルを複数のFMP4ファイルに変換するとき、図4に示すように、一つのMP4ファイルは、複数のFMP4ファイルに変換でき、各FMP4ファイルには、moov容器、moof容器及びmdat容器という三つの基本的な容器が含まれる。
【0041】
moov容器は、MP4ファイルレベルのメタデータを含み、FMP4ファイルの由来となるMP4ファイルにおける全てのメディアデータ、例えばMP4ファイルの時間長、作成時刻、修正時間などを記述するためのものである。
【0042】
moof容器は、セグメントレベルのメタデータを記憶し、FMP4ファイルにパッケージされたメディアデータを記述し、FMP4におけるメディアデータの復号が可能であることを保証するためのものである。
【0043】
1つのmoof容器と1つのmdat容器は、セグメント化MP4ファイルの1つのセグメントを構成し、1つのセグメント化MP4ファイルに一つ又は複数のこのようなセグメントが含まれてもよい。各セグメントにパッケージされたメタデータは、当該セグメント内にパッケージされたメディアデータが独立して復号することができることを保証する。
【0044】
8)メディアソース拡張(MSE、MediaSourceExtensions)インターフェースは、ウェブページで実現されプレーヤ向けのインターフェースであって、ウェブページにおけるローディング期間にウェブブラウザのインタープリタによって解析されて、フロントエンドのプログラミング言語(例えばJavaScript)を実行することで実現され、プレーヤにハイパーテキストマークアップ言語(HTML)メディア要素(MediaElement)を呼び出すというメディアストリーミングを再生する機能を提供する。例としては、映像要素<video>、及び音声要素<audio>でビデオ/オーディオを再生する機能を実現する。
【0045】
9)ストリームメディアパッケージフォーマットフォーマットメディアは、メディアデータをストリームのメディアファイルにパッケージする。メディアファイルを完全にダウンロードする必要がなく、別途トランスコードする必要がなく、復号されて再生されることができる、すなわち、本来にダウンロードしながら再生することをサポートする技術である。典型的なストリームメディアパッケージフォーマットストリームメディアフォーマットのファイルは、HTTPライブストリーム(HLS、HTTPLiveStreaming)技術に基づくTSメディアファイルセグメント、FLV(FlashVideo)ファイルなどが挙げられる。
【0046】
10)非ストリームメディアパッケージフォーマットストリームメディアフォーマットは、メディアデータをメディアファイルにパッケージし、且つメディアファイルを完全にダウンロードしてから復号されて再生されるパッケージ技術である。典型的には、非ストリームメディアパッケージフォーマットストリームメディアフォーマットのファイルは、MP4ファイル、WMV(WindowsMediaVideo)ファイル、ASF(AdvancedStreamingFormat)ファイルなどが挙げられる。
【0047】
なお、MP4ファイルは本来にストリームメディアの形式の再生をサポートしないが、オンライントランスコードした後に、プレーヤによりトランスコードされたメディアストリームに、又は部分的にダウンロードしたMP4ファイルの欠落部分に無効なバイナリデータを充填(例えば、ftyp容器及びmoov容器が完全にダウンロードされた場合、mdat容器の欠落部分に無効なバイナリデータを代わりに充填)することで、ダウンロードしながら再生する技術効果を実現できる。本明細書には、このような本来にストリームメディアの形式の再生をサポートしないパッケージフォーマットを、非ストリームメディアフォーマットという。
【0048】
まず、本公開の実施例を実現するメタデータ容器の解析装置を説明する。メタデータ容器の解析装置は、ハードウェア、ソフトウェア又はソフト-ハードウェア結合の方式として提供され得る。
【0049】
以下、メタデータ容器の解析装置のソフト-ハードウェア結合の実施を説明する。図5を参照して、図5は、本公開の実施例のメタデータ容器の解析装置のある選択可能な構成の模式図である。メタデータ容器の解析装置500は、ビデオ再生機能を有する携帯電話、コンピューター、デジタル放送端末、情報送受信設備、ゲーム操作卓、タブレット設備、医療設備、フィットネス設備、個人用デジタル補助装置等であってよい。図5に示すメタデータ容器の解析装置500は、少なくとも1つのプロセッサ501、メモリ502、少なくとも1つのネットワークインターフェース504、及びユーザインターフェース503を備える。メタデータ容器の解析装置500の各アセンブリのそれぞれは、バスシステム505によって結合されている。バスシステム505は、これらのアセンブリの間の接続や通信を実現するために用いられると理解される。バスシステム505は、データバスの他に、電源バス、制御バス、及び状態信号バスを備える。しかし、明確に説明するために、図5において各種のバスを全てバスシステム505として示している。
【0050】
ここで、ユーザインターフェース503は、ディスプレー、キーボード、マウス、トラックボール、クリック輪、キー、ボタン、タッチパネル又はタッチスクリーン等を備えてよい。
【0051】
メモリ502は、発揮性メモリ又は非発揮性メモリでもよいし、発揮性と非発揮性メモリとの両者を備えてもよいと理解される。ここで、非発揮性メモリは、読み出し専用メモリ(ROM,Read Only Memory)、プログラマブル読み出し専用メモリ(PROM,Programmable Read-Only Memory)、消去可能プログラマブル読み出し専用メモリ(EPROM,Erasable Programmable Read-Only Memory)、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM,Electrically Erasable Programmable Read-Only Memory)であってよい。磁気表面メモリは、磁気ディスクメモリ又は磁気テープメモリであってよい。発揮性メモリは、ランダムアクセスメモリ(RAM,RandomAccessMemory)であってよく、外部キャッシュとして用いられる。制限的ではなく例示的な説明によって、多くの形式のRAM、例えば、スタティックランダムアクセスメモリ(SRAM,Static Random Access Memory)、同期型スタティックランダムアクセスメモリ(SSRAM,Synchronous Static Random Access Memory)、ダイナミックランダムアクセスメモリ(DRAM,Dynamic Random Access Memory)、同期型ダイナミックランダムアクセスメモリ(SDRAM,Synchronous Dynamic Random Access Memory)を使用可能である。本公開の実施例に記述されたメモリ502は、これらと任意の他の適合なタイプのメモリとを含める旨である。
【0052】
本公開の実施例のメモリ502は、三状態コンテントアドレッシングメモリ(TCAM)、スタティックランダムメモリを含めているが、これらに限定されることではなく、メタデータ容器の解析装置500の操作を支持できるようにサーバから取得されたメディアファイルデータを記憶することができる。これらのデータの例としては、メタデータ容器の解析装置500で操作される何のコンピュータープログラム、例えばオペレーティングシステム5021及びアプリケーション5022、各タイプのメディアファイルデータ情報等を含める。ここで、オペレーティングシステム5021は、各種のシステムプログラム、例えばアーキテクチャ層、コアライブラリ(Core libraries)層、駆動層等を含め、各種の基礎業務の実現及びハードウェアに基づくタスクの処理に用いられる。アプリケーション5022は、各種のアプリケーション、例えばメタデータ容器の解析機能を有するクライアント、又はアプリケーション等を含めることができる。本公開の実施例のメタデータ容器の解析方法を実現するプログラムは、アプリケーション5022に含められることができる。
【0053】
前記した本公開の実施例に開示された方法は、プロセッサ501によって実現される。プロセッサ501は、集積回路チップであり得、信号の処理能力を有している。本公開の実施例が提供したメタデータ容器の解析方法は、実現する過程で、プロセッサ501内のハードウェアの集積理論回路又はソフトウェア形式の操作により完成され可能である。前記したプロセッサ501は、汎用プロセッサ、デジタル信号プロセッサ(DSP,Digital Signal Processor)、又は他のプログラム可能論理デバイス、離散ゲート又はランジスタ論理デバイス、離散ハードウェアアセンブリ等であり得る。プロセッサ501は、本公開の実施例が提供した各方法、ステップ及び論理ブロック図を実現又は実行することができる。汎用プロセッサは、マイクロプロセッサ又は何の従来のプロセッサ等であり得る。本公開の実施例が提供した方法のステップは、ハードウェア復号プロセッサによって実行されて完成される、又は、復号プロセッサ内のハードウェアとソフトウェアブロックの協働によって実行されて完成されるように直接に表すことができる。ソフトウェアブロックは、記憶媒体にあることができる。該記憶媒体がメモリ502にある。プロセッサ501は、メモリ502内の情報を読み出して、そのハードウェアと協働してメタデータ容器の解析方法を完成する。
【0054】
例示的な実施例では、本公開の実施例は、コンピューター読取り可能な記憶媒体、例えば、コンピュータープログラムを含めたメモリ502を更に提供している。前記したコンピュータープログラムは、メタデータ容器の解析方法を完成するように、メタデータ容器の解析装置500のプロセッサ501により実行されることができる。コンピューター読取り可能な記憶媒体は、FRAM(登録商標)、ROM、PROM、EPROM、EEPROM、FlashMemory、磁気表面メモリ、光ディスク、又はCD-ROM等メモリであってもよいし、前記メモリの一つ又は任意の組合せを備えた各種の設備、例えば携帯電話、コンピューター、タブレット設備、個人用デジタル補助装置等であってもよい。
【0055】
以下、メタデータ容器の解析装置の単純ハードウェア実施を説明する。本公開の実施例のメタデータ容器の解析装置は、一つ又は複数のアプリケーション専用集積回路(ASIC,Application Specific Integrated Circuit)、DSP、プログラム可能論理デバイス(PLD,Programmable Logic Device)、複雑プログラム可能論理デバイス(CPLD,Complex Programmable Logic Device)、フィールドプログラム可能なゲートアレイ(FPGA,Field-Programmable Gate Array)又は他の電子デバイスにより実現することができ、本公開の実施例が提供したメタデータ容器の解析方法を実行して実現することに用いられる。
【0056】
以下、メタデータ容器の解析装置の単純ソフトウェア実施を説明する。本公開の実施例のメタデータ容器の解析装置は、アプリケーション又はプラグインによって実現することができ、あるいは、両者が協働する方式で実現することができる。
【0057】
例示として、アプリケーションは、メタデータ容器解析に専用されるクライアントであってもよく、メタデータ容器の解析機能を選択可能な機能としたクライアントであってもよく、相応のプラグインをインストールすることで実現される。
【0058】
例示として、プラグインは、アプリケーションの機能アップグレードインスタレーションパッケージとして実現されることができ、メディア再生用のアプリケーションにメタデータ容器の解析の機能が重畳される。メディア再生のウェブサイト内の要素であってもよく、フロントエンド言語で実現され、ブラウザにより直接に解釈実行されることでウェブサイトでメタデータ容器の解析及びメディア再生の機能を実現する。
【0059】
メタデータ容器の解析装置のハードウェア実施又はソフトウェア実施の例示として、メタデータ容器の解析装置は、信号/情報/データ層で結合関係がある一連のブロックとして提供されることができる。以下、図6に合わせて説明する。図6を参照して、図6は、本公開の実施例のメタデータ容器の解析装置のある選択可能な構成の模式図であって、メタデータ容器の解析を実現した解析装置が備えた一連のブロックを示している。しかし、メタデータ容器の解析装置のブロック構造は、図6に示すもののみに限定されることではなく、例えば、その中のブロックに対して、実現する機能の相違に応じてさらに分解又は合併することができる。以下、図6に示すブロックが実現する機能について説明する。
【0060】
以下、引き続いて図5に基づいて図6に示す各ブロックの機能を説明する。
【0061】
データ取得ブロック601は、メディアファイルにおけるメタデータ容器の位置に基づいて、メディアファイルのバイナリデータからメタデータ容器に対応するバイナリデータを取得するように構成されている。
【0062】
データ解析ブロック602は、取得されたバイナリデータ内の前記メタデータ容器ヘッダの標準長に対応するバイナリデータを順次に解析して、前記メタデータ容器内のサブ容器の容器タイプ、及び前記サブ容器の容器データの長さを取得するように構成されている。
【0063】
前記データ解析ブロック602は、前記サブ容器の容器タイプに対応するタイプの解析器を呼び出して、未解析のデータ内の前記容器データの長さに対応するバイナリデータを順次に解析して、前記容器データが表すメディア情報を取得するように構成されている。
【0064】
ある実施例では、提供されたメタデータ容器の解析装置は、アプリケーションに対応するサーバに適用されることができる。ここで、前記したアプリケーションに対応するサーバは、フロントエンドのプレーヤの請求に反応して、フロントエンドへメディアファイル内のバイナリデータを提供するためのものである。前記フロントエンドのプレーヤは、下記の場合を含む:プレーヤが埋め込みブラウザ(又は埋め込みブラウザの任意のアプリケーション)によりロードされたウェブサイト内のHTML5(H5)プレーヤであって、フロントエンド向けの言語(例えばJavaScript)を用いて実現され、ブラウザによりメディア再生のウェブサイトがロードされると、プレーヤコードとウェブサイト要素とが共にブラウザにダウンロードされる。プレーヤがフロントエンド向けの言語を採用して実現されるため、集約を経る必要がなく、ブラウザにより直接に解釈され、プレーヤコードを実行するとウェブサイトでプレーヤの機能を実現することができ、適用できるプラットホームが広く存在し、実現効率が高い。
【0065】
ある実施例では、前記バイナリデータは、ファイルタイプ容器、メタデータ容器及びメディアデータ容器内のバイナリデータを含め、フロントエンドに、取得されたファイルタイプのバイナリデータ、キーフレームの間のメディアデータ、及び取得されたメタデータに基づいて、取得されたメディアデータに対応する新しいメタデータを新たに計算させることに供される。
【0066】
ある実施例では、前記した取得されたメタデータに基づいて、取得されたメディアデータに対応する新しいメタデータを新たに計算することは、セグメントメディアファイルレベルのメタデータ(例えば、FMP4内のmoov容器及びそれが含めたデータ)をセグメント化し、メディアファイル内のセグメントレベルのメタデータ(例えば、FMP4内のmoofボックス及びそれが含めたデータである。ここで、一つのセグメントのFMP4ファイル内には一つ又は複数のセグメントが有する可能性がある)をセグメント化し、セグメントメディアファイルのパッケージ構造内の対応する容器へ充填することを備える。
【0067】
ある実施例では、提供されたメタデータ容器の解析装置は、例えば端末設備に適用可能である。例えば、端末設備に使用されるプレーヤであってもよい。プレーヤは、嵌め込みブラウザ(又は嵌め込みブラウザの任意のアプリケーション)にロードされるウェブサイト内のH5プレーヤであってもよく、フロントエンド向けの言語(例えばJavaScript)で実現される。ブラウザがメディア再生のウェブサイトをロードすると、プレーヤコードとウェブサイト要素とが共にブラウザにダウンロードされる。プレーヤがフロントエンド向けの言語を採用して実現されているため、集約を経る必要がなく、ブラウザにより直接に解釈され、プレーヤコードが実行されると、ウェブサイトでプレーヤの機能を実現することができ、適用できるプラットホームが広く存在し、実現効率が高い。
【0068】
ある実施例では、前記メタデータ容器の解析装置を適用したプレーヤは、まず、相応のサーバにメディアファイル内のファイルタイプ容器及びメタデータ容器のバイナリデータを請求し、メディアファイルのタイプ及びメディア情報を解析する。次に、プレーヤは、メディア情報に関連して、時間スパンに再生待ち時間帯が含まれている2つのキーフレームを計算し、サーバにメディアデータ容器内の2つのキーフレームの間のメディアデータ(ビデオ/オディオデータ)を請求する。最後に、プレーヤは、取得されたメディアデータを表すメタデータを計算し、新しいメタデータ(セグメントメディアファイルレベルのメタデータ、及びセグメントメディアファイル内のセグメントレベルのメタデータを含み)を計算し、セグメントメディアファイルのパッケージ構造に応じて充填を行う。
【0069】
ある実施例では、前記メタデータ容器の解析装置を適用したプレーヤは、まず、相応のサーバに請求するファイルがMP4ファイルである。MP4ファイルのメタデータ容器は、複数のサブ容器が嵌め込んだ嵌め込み構造であり、嵌め込み構造において、一部のサブ容器内には具体的なバイナリデータがパッケージされ、一部のサブ容器内には他のサブ容器もパッケージされている。
【0070】
取得されたメタデータ容器のバイナリデータについては、パッケージングルールによって、その開始部分のバイトが前記メタデータ容器の容器タイプ及び容量を表すためのものである。そこで、メディアファイル内のメタデータ容器に対応するバイナリデータを取得する時に、まず、前記メディアファイル内の容器ヘッダの標準長によって、バイナリデータ内の相応の標準長のデータをバイト単位毎に解析して、前記メディアデータ容器の容器タイプ及び容量を取得する。次に、容器タイプがメタデータ容器であると解析した時に、引き続いて前記メディアファイル内の容器ヘッダの標準長によってメタデータ容器内の後続データ、即ち、容器データ(複数のセルフ容器を含む)のサブ容器のヘッダに対応するバイナリデータをバイト単位毎に解析する。
【0071】
メタデータを解析する過程で、前記MP4ファイルのパッケージルールに基づいて相応のデータの解析処理を行う必要がある。
【0072】
MP4ファイルを例として、容器ヘッダの標準長について以下のように説明する。容器ヘッダの先頭の4バイト(32ビット)が容器の長さ(容量)であって、容器ヘッダと容器データとが占める記憶空間を含めている。長さが1であれば、容器の容量が続く8ビットユニット64の大きいサイズの(large size)フィールドに格納されることを表す。sizeが0であれば、容器が最後の容器であることを表す。容器ヘッダにおける容量を示すバイトより後ろにある4つのバイトが容器タイプ、例えば“ftyp”、“moov”等を表すためのものであって、特定のタイプの容器を表す。“uuid”であれば、容器が拡張タイプであることを表す。容器のタイプが共通唯一識別コード(uuid)であれば、続く16バイトがuuidの格納に用いられる。続くバイトからはmoov容器内の容器データである。moov容器内には、複数の容器のバイナリデータが含まれ、サブ容器のヘッダも同様に標準長に従う。
【0073】
ある実施例では、前記データ解析ブロック602は、前記サブ容器の容器タイプを事前にマークされた容器タイプと対比するように構成されている。前記データ解析ブロック602は、前記サブ容器の容器タイプに対応する解析器を呼び出し、前記解析器によって前記サブ容器内の容器データを解析し、前記容器データが表すメディア情報を取得するように構成されている。対比を行うことで前記サブ容器の容器タイプが事前マークと一致し、且つバイナリデータを直接にパッケージすることに用いられると事前マークと一致したと確定した時に、相応の容器データに対する快速解析を実現することができ、解析処理速度を効率的に向上させることができる。
【0074】
ある実施例では、前記データ解析ブロック602は、前記サブ容器の容器タイプを事前にマークされた容器タイプと対比するように構成されている。前記データ解析ブロック602、前記サブ容器内にパッケージされている容器の容器タイプが事前マークと一致し、且つバイナリデータを直接にパッケージすることに用いられると事前マークと一致するまで、前記メディアファイル内の容器ヘッダの標準長によって、前記サブ容器に対応するバイナリデータを再帰的に解析するように構成されている。対比を行うことで前記サブ容器の容器タイプが事前マークと一致し、且つ引き続き容器をパッケージすることに用いられると事前マークと一致したと確定した時に、前記メディアファイル内の容器ヘッダの標準長によって、前記サブ容器に対応するバイナリデータを再帰的に解析するため、データ解析の正確性を確保することができる。
【0075】
ある実施例では、前記データ解析ブロック602は、前記サブ容器内にパッケージされている容器の容器データが表すメディア情報を取得するために、サブ容器内にパッケージされている容器の容器タイプに対応する解析器を呼び出し、バイナリデータをバイト単位毎に解析し、解析されたバイナリデータの長さが前記サブ容器内にパッケージされている容器の容器データの長さに対応するように構成されている。対比を行うことで前記サブ容器内にパッケージされている容器の容器タイプが事前マークと一致し、且つバイナリデータを直接にパッケージすることに用いられると事前マークと一致したと確定した時に、バイナリデータをバイト単位毎に解析し、解析されたバイナリデータの長さが前記サブ容器内にパッケージされている容器の容器データの長さに対応するため、データ解析の正確性を効率的に向上させることができる。
【0076】
ある実施例では、前記装置は、呼び出された前記解析器において解析されるサブ容器を記録することに用いられるように構成されているデータ記録ブロック(図示せず)を更に備える。記録されたサブ容器のインスタンスをサブ容器属性に設定する。前記サブ容器属性が前記サブ容器が所属する容器に含められ、前記サブ容器と所属する容器との間のネスト関係を記述することに用いられる。呼び出された解析器内で解析するサブ容器を記録することで、前記サブ容器と所属する容器との間のネスト関係を正確に記述することができる。
【0077】
ある実施例では、前記装置は、データ格納ブロック(図示せず)を更に備える。該データ格納ブロックは、前記サブ容器と所属する容器との間のネスト関係、及び前記サブ容器とパッケージしている容器とのネスト関係に基づいてオブジェクトを作成し、前記サブ容器に対応して作成されたオブジェクト内へメディア情報を含めた配列を格納するように構成されている。格納されたメディア情報が前記サブ容器の容器データで表される。オブジェクトの方式によって、ネスト構造を解析する過程で、バイナリデータサブ容器に格納されたメディア情報を同期的に直接にパッケージすることができる。
【0078】
ある実施例では、前記サブ容器の容器タイプに対応するタイプの解析器を呼び出せられなかった時に、前記データ解析ブロック602は、前記サブ容器に対応するバイナリデータの解析を無視するようにも構成されている。具体的に、前記サブ容器に対応するバイナリデータの解析を無視することは、以下の2つの場合を含める。(a)解析不可なサブ容器が全てのサブ容器のうち最後に並べているサブ容器ではない時に、完全な解析過程を実現するために、該サブ容器に対応するバイナリデータを無視した後に前記バイナリデータのうち次のサブ容器に対応する部分へジャンプして引き続き解析を行う必要がある場合。(b)解析不可なサブ容器が全てのサブ容器のうち最後に並べているサブ容器である時に、該サブ容器に対応するバイナリデータのみを無視することができる。ここで、サブ容器が解析不可であることは、サブ容器に対応する解析器の欠落、及びサブ容器に対応する解析器の呼び出し不可を含める。前記サブ容器に対応するバイナリデータの解析を無視すること、及び前記サブ容器の長さによって前記バイナリデータのうち次のサブ容器に対応する部分へジャンプし引き続いて解析を行うことで、解析不可な容器に対する処理を実現し、容器解析中の互換性及び安定性を保証し、解析不可又は解析過程中のエラーの発生による解析過程の滞りを回避した。同時に、メディアファイル内にカスタム容器の存在によって解析できなくなる場合があっても、実施例が提供した態様を採用すれば、解析過程でのエラーの通知が生じて後続の解析を継続できなくなることがなく、メディアファイルが最大限に完全に解析可能なことを確保した。
【0079】
前記データ解析ブロックは、前記サブ容器の長さによって、前記バイナリデータのうち次のサブ容器に対応する部分へジャンプし引き続いて解析を行うように構成されている。ここで、解析不可なサブ容器が全てのサブ容器のうち最後に並べているサブ容器である時に、該サブ容器に対応するバイナリデータのみを無視することができる。逆に、解析不可なサブ容器が全てのサブ容器のうち最後に並べているサブ容器ではない時に、完全な解析過程を実現するために、該サブ容器に対応するバイナリデータを無視した後に、前記バイナリデータのうち次のサブ容器に対応する部分へジャンプし引き続いて解析を行う必要もある。前記サブ容器に対応するバイナリデータの解析を無視すること、及び前記サブ容器の長さによって前記バイナリデータのうち次のサブ容器に対応する部分へジャンプし引き続いて解析を行うことで、解析不可な容器に対する処理を実現し、容器解析中の互換性及び安定性を保証し、解析不可又は解析過程中のエラーの発生による解析過程の滞りを回避した。同時に、メディアファイル内にカスタム容器の存在によって解析できなくなる場合があっても、本実施例が提供した態様を採用すれば、解析過程でのエラーの通知が生じて後続の解析を継続できなくなることがなく、メディアファイルが最大限に完全に解析可能なことを確保した。
【0080】
ある実施例では、解析されるメタデータ容器はデータが壊された場合が存在する可能性があるため、本実施例に示す態様を採用すれば、ジャンプの方式で一部のサブ容器に対する解析を無視して、データの解析速度を向上させることができ、同時に、元データの一部が壊した解析待ちデータに対して、サブ容器内でのジャンプによって、壊されていないデータを引き続いて解析することができる。壊されたデータの存在によるデータ解析の失敗を回避する。
【0081】
ある実施例では、容器内のネスト関係は、前記サブ容器と親容器とのネスト関係、及び前記サブ容器と前記サブ容器のサブ容器との間のネスト関係を含めている。サブ容器の容器タイプがバイナリデータを直接にパッケージするためのものである時に、後者のネスト関係が存在しないと理解される。
【0082】
ある実施例では、プレーヤが所定の時間帯に対応するメディアデータを取得するフローについて説明する。プレーヤが一本のビデオファイル又は1トラックのメディアファイルを再生する時に、プレーヤは、データストリームを正確に解析しなければならないとともに、一定の時間で対応するメディアデータを取得しこの1セグメントのメディアデータが独立にデコード可能であることを確保しなければならない。
【0083】
本公開の実施例が提供したメタデータ容器の解析装置に合わせて、本公開の実施例を実現するメタデータ容器の解析方法について説明する。以下、メディアファイルがMP4ファイルであることを例として説明するが、以下に記載されるMP4ファイルについての変換方法が他の非ストリームメディア様式にも容易に適用することができると理解される。
【0084】
本公開の実施例が提供したメタデータ容器の解析方法は、フロントエンドのプレーヤへ適用することができる。プレーヤは、嵌め込みブラウザがロードする、フロントエンド向けの言語(例えばJavaScript)で実現されるウェブサイト内のHTML5(H5)プレーヤを含めるが、これに限定することではない。ブラウザがメディア再生のウェブサイトをロードする時に、プレーヤコードとウェブサイト要素とが共にブラウザにダウンロードされる。プレーヤがフロントエンド向けの言語で実現されるため、集約を経る必要がなく、ブラウザにより直接に解釈され、プレーヤコードを実行するとウェブサイトでプレーヤの機能を実現することができ、適用できるプラットホームが広く存在し、実現効率が高い。
【0085】
ある実施例では、プレーヤは、メディア情報に基づいてメディアファイル内のメディアデータを正確にデコードするために、メディアファイルのメタデータを解析してメディア情報を取得する必要がある。図7を参照して、図7は、本公開の実施例が提供したメタデータ容器の解析方法のある選択可能なフローの模式図である。図7が示すステップに合わせて説明する。
【0086】
ステップ701において、メディアファイルにおけるメタデータ容器の位置を位置決める。
【0087】
ある実施例では、メディアファイル内におけるメタデータ容器のオフセット及び容量を位置決めるまで、読み出されたバイナリデータから識別された容器のタイプ及び長さに基づいて、メディアファイルのバイナリデータから容器ヘッダ標準に合致するバイナリデータを読み出す。
【0088】
例を挙げて説明する。メディアファイルのバイナリデータについて、0バイトから始まるバイナリデータがファイルタイプ容器に対応している。容器ヘッダの標準長によってメディアファイルのバイナリデータの開始位置を読み取り、容器ヘッダの標準長に合致するバイナリデータを読み取り、読み取られたバイナリデータを解析することで、メディアファイル内でファイルタイプ容器の後ろに位置する容器のタイプ及び長さを確定することができる。
【0089】
解析されたタイプがファイルタイプ容器であれば、メタデータ容器の長さ(即ち容量)を解析することができる。この時、メタデータ容器のオフセットがファイルタイプ容器の長さとなる。
【0090】
解析されたタイプがメディアデータ容器であれば、メディアデータ容器の長さに基づき、容器タイプによる長さをオフセットとして、容器ヘッダの標準長に合致するバイナリデータを引き続き読み取ることで、メタデータ容器の長さ(即ち容量)を解析することができる。この時、メタデータ容器の長さは、ファイルタイプ容器の長さとメディアデータ容器の長さとの加算値である。
【0091】
メディアファイルのうち、開始の容器がファイルタイプ容器であることを除き、後続の容器のパッケージ順序について規範がないため、前記解析方式によって、メディアファイル内で容器のパッケージ順序がファイルタイプ容器、メタデータ容器及びメディアデータ容器であるか、或いはファイルタイプ容器、メディアデータ容器及びメタデータ容器であるかを問わず、メディアファイル内におけるファイルタイプ容器の位置を正確に効率よく位置決めることができる。
【0092】
ステップ702において、メディアファイルにおけるメタデータ容器の位置に基づいてメディアファイルのバイナリデータからメタデータ容器に対応するバイナリデータを取得する。
【0093】
オフセット及び容量によってメディアファイルにおけるメタデータ容器の位置を表すことができるため、読み取られたバイナリデータの長さがメタデータ容器の容量に合致するまで、メディアファイルからオフセットに対応する位置を始点としてバイナリデータを読み取る。これにより、メタデータ容器に対応するバイナリデータを読み取ることができる。
【0094】
ステップ703において、メタデータ容器バイナリデータ内の容器ヘッダの標準長に対応するバイナリデータを順次に解析して、メタデータ容器内のサブ容器の容器タイプ、及びサブ容器の容器データの長さを取得する。
【0095】
ある実施例では、メタデータ容器内に複数のサブ容器がネストされている場合について、毎度バイナリデータを読み取るときのオフセットがいずれも既に識別されたサブ容器長の加算値であり、読み取るバイナリデータの長さが容器ヘッダの標準長に合致することで、現時点で処理するサブ容器のタイプ及び長さを解析することができる。
【0096】
例を挙げて説明する。初回に読み取る時に、メタデータ容器のバイナリデータの0バイトからバイナリデータの読み取りを開始し、且つ読み取るバイナリデータの長さが容器ヘッダの標準長に合致することで、1番目のサブ容器のタイプ及び長さを解析することができる。2回目の読み取りを行う時に、初回に読み取られたサブ容器の長さをオフセットとして、バイナリデータの読み取りを開始し、且つ読み取るバイナリデータの長さが容器ヘッダの標準長に合致することで、2番目のサブ容器のタイプ及び長さを解析することができる。
【0097】
該実施例に示す方式を採用してバイナリデータを読み取ると、過度な読み取りによって戻すことはなく、読み取り不足によって二次読み取りを行うこともないことで、解析の効率及び正確率を向上させた。
【0098】
ステップ704において、サブ容器の容器タイプに対応するタイプの解析器を呼び出し、未解析のデータ内の容器データの長さに対応するバイナリデータを順次に解析して、容器データが表すメディア情報を取得する。
【0099】
ある実施例では、メタデータ容器内にネストされた典型的な容器タイプに対して事前にマークして、容器がバイナリデータをパッケージすることに直接に用いられるか、或いはさらに容器をパッケージしているかを示す。例えば、図2に示すmvhd容器、オディオトラック容器和ビデオトラック容器等に対して、さらに容器をパッケージしているとマークし、図2に示すstts容器、stsd容器等に対して、バイナリデータを直接にパッケージしているとマークする。
【0100】
バイナリデータを直接にパッケージするとマークされた容器タイプに対して,容器タイプにそれぞれ対応する解析器を設置する。解析器は、バイナリデータからそれが表すメディア情報を解析するためのものである。ステップ704において、ステップ703で解析されたサブ容器の容器タイプと事前にマークされた容器タイプとを対比する時に、以下の2つの場合に関わる。
【0101】
場合1)対比を行うことで、サブ容器の容器タイプが事前マークと一致し、且つバイナリデータを直接にパッケージすることに用いられると事前マークと一致したと確定した時に、サブ容器の容器タイプに対応する解析器を呼び出し、解析器によってサブ容器内の容器データを解析して、容器データが表すメディア情報を取得する。
【0102】
場合2)対比を行うことで、サブ容器の容器タイプが事前マークと一致し、且つ引き続き容器をパッケージすることに用いられると事前マークと一致したと確定した時に、サブ容器内にパッケージされている容器の容器タイプが事前マークと一致し、且つバイナリデータを直接にパッケージすることに用いられると事前マークと一致することが解析されるまで、メディアファイルの容器ヘッダの標準長に基づいてサブ容器に対応するバイナリデータを再帰的に解析する。サブ容器内にパッケージされている容器の容器データが表すメディア情報を取得するために、サブ容器内にパッケージされている容器の容器タイプに対応する解析器を呼び出し、バイナリデータをバイト単位毎に解析し、解析されたバイナリデータの長さがサブ容器内にパッケージされている容器の容器データの長さに対応する。
【0103】
ある実施例では、メタデータ容器を解析する過程でメディア情報を記録する方式について説明する。メタデータ容器バイナリデータ内の容器ヘッダの標準長に対応するバイナリデータを順次に解析して、メタデータ容器内のサブ容器の容器タイプを取得する時に、サブ容器と所属する容器との間のネスト関係、及びサブ容器とパッケージしている容器とのネスト関係に基づいてオブジェクトを作成し、サブ容器の容器タイプがバイナリデータを直接にパッケージすることに用いられると事前にマークされた時に、サブ容器に対応して作成したオブジェクト内へメディア情報を含めた配列を格納する。格納されたメディア情報は、サブ容器の容器データによって表される。
【0104】
例えば、図2において、解析されるサブ容器のタイプがstts容器である時に、stts容器がバイナリデータを直接にパッケージすると事前にマークされているため、stts容器に対応して作成したオブジェクト内へメディア情報を含めた配列を格納する。ここでのメディア情報は、stts容器の容器データによって表される時間長情報である。
【0105】
ある実施例では、メタデータ容器を解析する過程でサブ容器の間のネスト関係を記録する方式について説明する。メタデータ容器バイナリデータ内の容器ヘッダの標準長に対応するバイナリデータを順次に解析して、メタデータ容器内のサブ容器の容器タイプを取得する時に、容器タイプがバイナリデータを直接にパッケージすると事前にマークされていれば、呼び出された解析器の中へ解析するサブ容器を記録する。記録されたサブ容器のインスタンスをサブ容器属性に設定する。サブ容器属性は、サブ容器が所属する容器に含められ、サブ容器と所属する容器との間のネスト関係を記述することに用いられる。
【0106】
例えば、図2において、解析されるサブ容器のタイプがstsd容器である時に、stsd容器がバイナリデータを直接にパッケージすると事前にマークされているため、stsd容器に対応する解析器の中へstsd容器を記録し、stsd容器のインスタンスをstbl容器サブ容器属性に設定する。以降は同様であり、最後にstsd容器のサブ容器属性にstsd容器、stts容器、stsc容器等の、stbl容器にネストされている複数のサブ容器を記録した。
【0107】
ある実施例では、対比を行うことで、サブ容器の容器タイプが事前にマークされていないと確定した、又はバイナリデータを直接にパッケージすると事前にマークされたが対応するタイプの解析器の呼び出しができなかった時に、サブ容器に対応するバイナリデータを解析することを無視し、サブ容器の長さに基づいて、バイナリデータのうち次のサブ容器に対応する部分へジャンプして引き続いて解析する。ここで、解析不可なサブ容器が全てのサブ容器のうち最後に並べているサブ容器である時に、該サブ容器に対応するバイナリデータのみを無視することができる。逆に、解析不可なサブ容器が全てのサブ容器のうち最後に並べているサブ容器ではない時に、完全な解析過程を実現するために、該サブ容器に対応するバイナリデータを無視した後に、前記バイナリデータのうち次のサブ容器に対応する部分へジャンプし引き続いて解析を行う必要もある。前記サブ容器に対応するバイナリデータを解析することを無視すること、及び前記サブ容器の長さに基づいて前記バイナリデータのうち次のサブ容器に対応する部分へジャンプし引き続いて解析を行うことで、解析不可な容器に対する処理を実現し、容器解析中の互換性及び安定性を保証し、解析不可又は解析過程中のエラーの発生による解析過程の滞りを回避した。同時に、メディアファイル内にカスタム容器の存在によって解析できなくなる場合があっても、本実施例が提供した態様を採用すれば、解析過程でのエラーの通知が生じて後続の解析を継続できなくなることがなく、ディアファイルが最大限に完全に解析可能なことを確保した。
【0108】
ある実施例では、解析されるメタデータ容器はデータが壊された場合が存在する可能性があるため、本実施例に示す態様を採用すれば、ジャンプの方式で一部のサブ容器に対する解析を無視して、データの解析速度を向上させることができ、同時に、元データの一部が壊した解析待ちデータに対して、サブ容器内でのジャンプによって、壊されていないデータを引き続いて解析することができる。壊されたデータの存在によるデータ解析の失敗を回避する。
【0109】
さらに、メディアファイルの源が多様であるため、メディアファイル内にカスタムの容器タイプが出現することはあり得る。幾つかの実施例に記載された採用されたジャンプの方式によって、メタデータ容器の全体の解析の進度を影響することがない。同時に、解析器を設置することで、メタデータ容器の容器タイプが変化した時に、対応するタイプの解析器の増加、削除及び修正を通じて、最新のメタデータ容器に対する互換的な解析を快速的に実現することができ、解析の融通度を向上させ、使用コストも低減させた。
【0110】
ある実施例では、呼び出された前記解析器の中で解析されるサブ容器を記録してもよい。記録されたサブ容器のインスタンスをサブ容器属性に設定する。前記サブ容器属性は、前記サブ容器が所属する容器に含められ、前記サブ容器と所属する容器との間のネスト関係を記述することに用いられる。本実施例に示す態様を採用すれば、呼び出された解析器内で解析するサブ容器を記録することができる。記録情報を分析することで解析器の呼び出された頻度を判断することができ、呼び出される頻度が高い解析器を基礎解析ユニットとしてパッケージングして、データの解析速度の向上を実現する。
【0111】
ある実施例では、前記サブ容器と所属する容器との間のネスト関係、及び前記サブ容器とパッケージしている容器とのネスト関係に基づいてオブジェクトを作成し、前記サブ容器の容器タイプがバイナリデータを直接にパッケージすることに用いられると事前にマークされた時に、前記サブ容器に対応して作成されたオブジェクト内へメディア情報を含めた配列を格納する。格納されたメディア情報が前記サブ容器の容器データで表される。
【0112】
ある実施例では、前記サブ容器の容器タイプに対応するタイプの解析器を呼び出せられなかった時に、前記サブ容器に対応するバイナリデータを解析することを無視する。本実施例に示す態様を採用すれば、呼び出し不可な解析器に対応するバイナリデータを無視することで、大容量データに対する解析速度を効果的に向上させることができる。
【0113】
ある実施例では、容器内のネスト関係は、前記サブ容器と親容器とのネスト関係、及び前記サブ容器と前記サブ容器のサブ容器との間のネスト関係を含めている。ここで、サブ容器の容器タイプがバイナリデータを直接にパッケージするためのものである時に、後者のネスト関係が存在しない。
【0114】
ある実施例では、前記サブ容器の長さに基づいて、前記バイナリデータのうち次のサブ容器に対応する部分へジャンプし引き続いて解析を行ってもよい。本実施例に示す態様を採用すれば、サブ容器内でのジャンプによって、データの解析速度を向上させることができ、同時に、元データの一部が壊した解析待ちデータについて、サブ容器内でのジャンプによって、壊されていないデータを解析することができる。さらに、事前にマークされていなくて使用待ち解析器で解析に失敗したサブ容器について、それの対応するオブジェクト内のデータが空であるが、完全なネスト関係を形成するために、サブ容器のインスタンスをそれの所属する容器のサブ容器属性へ設定することが依然として必要である。
【0115】
本公開の実施例が提供したメタデータ容器の解析装置に合わせて、ウェブサイトに埋め込まれたH5プレーヤがMP4ファイルを解析する場合を例として説明する。図8を参照して、図8は、本公開の実施例が提供したメタデータ容器の解析方法のある選択可能なフローの模式図である。図8に示すステップに合わせて説明する。
【0116】
ステップ801において、ウェブサイトに埋め込まれたH5プレーヤによってサーバからメディアファイルのメタデータ容器内にパッケージされているメタデータを取得する。
【0117】
ある実施例では、プレーヤは、以下のようにメディアファイルのメタデータ容器内にパッケージされているメタデータを取得することができる。プレーヤは、設定されたオフセット及び容量を携帯したネットワーク請求をサーバへ送信することで、サーバが返したメディアファイル内での0バイトから開始し、且つ設定容量に合致するバイナリデータを取得する。サーバが返したバイナリデータからメタデータ容器内のメタデータを識別する。
【0118】
ここで、設定された容量は、既存のメディアファイルのファイルタイプ容器及びメタデータ容器の容量に基づいて統計して取得することができる。設定された容量は、設定された割合(例えば全ての)メディアファイルのファイルタイプ容器及びメタデータ容器の容量の加算値をカバーすることができようにして、メディアファイルのパッケージ構造が、ファイルタイプ容器、メタデータ容器及びメディアデータ容器を順序にバッケージしたものであるとき、一回の要求でメタデータ容器にバッケージされたメタデータを完全に取得できることを確保する。ネットワーク伝送時に接続を占有する状況を節約でき、さらに接続占有に起因してウェブページ内の非メディア再生サービスが接続を使用できないことで応答を遅延させる状況を回避する。
【0119】
プレーヤが取得したメタデータ容器にバッケージされたメタデータは、MP4ファイルにおけるmoov容器にバッケージされたバイナリデータである。MP4ファイルのパッケージ構造がfytp容器、moov容器及びmdat容器を順序にバッケージするものであるとき、設定容量が既存のMP4ファイルのftyp容器及びmoov容器の容量に基づいて統計して取得できる。設定容量が、設定割合(例えば全ての)MP4ファイルのftyp容器及びmoov容器のバイナリデータの加算値をカバーできるようにして、多数の場合、moov容器に含まれた全てのバイナリデータをサーバから一回だけで取得できることを保証する。
【0120】
ある実施例において、プレーヤが設定されたオフセット及び容量によってサーバから請求したバイナリデータにおいて、ゼロバイトから始まる一段のバイナリデータがファイルタイプ容器に対応するものである。プレーヤが容器ヘッダを読み出すことでファイルタイプ容器の容量を取得し、第2の容器のヘッダを読み出すことで次の容器のタイプ及び容量を知り、第2の容器のタイプがメタデータ容器であり、且つ返信したバイナリデータの容量がファイルタイプ容器の容量及びメタデータ容器容量の加算値以上である場合、設定されたオフセット及び容量によってサーバから要求したバイナリデータには、メタデータ容器にバッケージされたメタデータが含まれることを表明する。それに対して、第2の容器のタイプがメタデータ容器であり、且つ返信したバイナリデータの容量がファイルタイプ容器の容量及びメタデータ容器容量の加算値に未満である場合、設定されたオフセット及び容量によってサーバから要求したバイナリデータには、メタデータ容器にバッケージされたメタデータが含まれていないことを表明する。プレーヤが設定されたオフセット及び容量によってサーバから要求したバイナリデータには、メタデータ容器におけるメタデータを完全に含んでいない場合、プレーヤは、サーバから返信されたバイナリデータから容器の容量を読み出す必要がある。メタデータ容器のヘッダによってメタデータ容器のオフセット及び容量を算出し、算出されたオフセット及び容量をネットワーク要求に運ばせて、サーバにメタデータを要求する。サーバは、要求に従ってメディアファイルにおいて算出されたオフセットから、読み出されるバイナリデータが算出された容量に合致するようにバイナリデータを読み出し、プレーヤにデータを返信する。
【0121】
例を挙げて説明する。プレーヤは、サーバから返信したバイナリデータから容器の容量を読み出し、メタデータ容器のヘッダに基づいてメタデータ容器のオフセット及び容量を算出する。以下の二つの場合に関わる。
【0122】
場合1)残余のバイナリデータ(即ち返信されたバイナリデータのうちファイルタイプ容器のバイナリデータ以外のデータ)から読み出された容器のタイプがメタデータ容器であり、且つ残余のバイナリデータの容量がメタデータ容器の容量よりも小さい場合、メタデータ容器の容量と残余バイナリデータ容量の差分値を算出して二回目の請求の新たな容量とし、初回請求したオフセット及び容量の加算値を新たのオフセットとし、サーバにバイナリデータを二回目で請求する。
【0123】
場合2)残余のバイナリデータから読み出された容器のタイプがメディアデータ容器である場合、メディアデータ容器の容量とファイルタイプ容器容量の加算値を二回目で要求する新たなオフセットとし、設定された容量(メタデータ容器の容量をカバーできる経験値であってもよい)でサーバにバイナリデータを二回目で要求する。
【0124】
メディアファイルがMP4ファイルである場合を例とする。プレーヤが設定されたオフセット及び容量によってサーバから要求されたバイナリデータにはmoov容器の完全なバイナリデータを含まないとき、プレーヤは、サーバから返信されたバイナリデータから容器のタイプ及び容量を読み出して、MP4ファイルにおけるmoov容器のオフセット及び容量を確定する必要がある。
【0125】
MP4ファイルのバイナリデータは、最初のバイトがいつもftyp容器に対応するものであって、返信されたバイナリデータからfytp容器のバイナリデータを識別し、ftyp容器のヘッダに基づいてその長さを取得できる。そして、残余のバイナリデータから、ヘッダの基準長さによって次の容器のバイナリデータを読み出す。ヘッダが示す容器タイプによって、以下の場合が含まれる。
【0126】
1)残余のバイナリデータ(即ち返信されたバイナリデータのうちfytp容器のバイナリデータ以外のデータ)から読み出された容器のタイプがmoov容器であり、且つ残余のバイナリデータの容量がmoov容器の容量以上である場合、確定されたオフセット及び容量によって、サーバからMP4ファイル内の、MP4ファイルにおけるmoov容器のオフセットで始まり、且つMP4ファイルにおけるmoov容器の容量に合致するmoovデータを取得する。
【0127】
2)残余のバイナリデータから読み出された容器のタイプはmoov容器であり、且つ残余のバイナリデータの容量がmoov容器の容量よりも小さいとき、moov容器の容量と残余のバイナリデータ容量の差分値を算出して二回目で要求する新たな容量とし、一回目に要求されたオフセット及び容量の加算値を二回目で請求する新たなオフセットとし、サーバにバイナリデータを二回目で要求する。
【0128】
3)残余のバイナリデータから読み出した容器のタイプはmdat容器であるとき、mdat容器の容量及びftyp容器容量の加算値を算出して二回目で要求する新たなオフセットとし、設定された容量でサーバにバイナリデータを二回目で要求する。
【0129】
このように、メディアファイルがいずれのパッケージ構造であっても、つまりメディアファイルにおけるファイルタイプ容器、メタデータ容器及びメディアデータ容器のパッケージ順序がどうなるかにもかかわらず、プレーヤが多くでも二回要求することでサーバからメタデータ容器におけるメタデータを取得することを保証でき、メタデータを取得する効率を向上させることができる。
【0130】
例を挙げて説明する。MP4ファイルについては、サーバから返信したバイナリデータにおいて、MP4ファイルのパッケージ基準によって、ゼロバイトからの一段のバイナリデータがftyp容器に対応するものである。容器のヘーダのパッケージ基準によって、ftyp容器のヘーダからftyp容器の容量(即ち長さ)及びMP4ファイルの完全な容量を読み取ることができる。ftyp容器の容量をaとすれば(単位がバイトである)、a+1から引き続く容器のヘーダ情報を読み取り、引き続く容器のタイプ及び容量を取得する。読み取ることで得られたftyp容器に引き続くものはmoov容器であり、且つ残余のバイナリデータの容量(設定の容量-ftyp容器の容量)がmoov容器の容量よりも大きい場合、moov容器の完全のバイナリデータを取り戻したことを表明し、moov容器のオフセット及び容量によって残余のバイナリデータからmoov容器におけるメタデータを抽出することができる。
【0131】
ステップ802において、取得したメタデータを解析し、メディアファイルを記述するための、メディアデータ容器にパッケージされたメディアデータのメディア情報を取得する。
【0132】
プレーヤは、サーバからメタデータ容器にパッケージされたメタデータを取得した後、メタデータ容器におけるサブ容器のネスト構造を解析し、サブ容器のネスト構造に応じて、それぞれのサブ容器におけるバイナリデータを読み取り、読み取ったバイナリデータからそれぞれのサブ容器が表すメディアデータのメディア情報を解析する。実際の応用において、メディア情報がメディアファイルにおける映像フレーム及び/又は音声フレームのオフセット、容量、復号時間などの情報を含んでもよい。
【0133】
メディアファイルがMP4ファイルであることを例とする。メタデータ容器がmoov容器である。図2から分かるように、moov容器にはmvhd容器及びトラック容器がパッケージされ要る。ここで、mvhd容器のバイナリデータを解析することで、MP4ファイルの作成時刻、修正時刻、時間計量スケール、再生可能な時間長、デフォルトボリュームなどの情報を取得できる。moov容器には複数のトラック容器が含まれ、各メィデアトラックの特有な記述情報を記録している。例えば、ビデオトラックであるビデオトラック容器に対して、ビデオトラック容器には複数のサブ容器が複数層にネストされ、ビデオトラック容器のネスト構造によって、対応するバイナリデータを解析してMP4ファイルの映像フレーム情報及び対応する画面情報を取得する。
【0134】
ある実施例において、プレーヤは、取得されたメタデータを以下の方式で解析して、メディア情報を取得する。メタデータ容器のバイナリデータにおける容器ヘッダの基準長さに対応するバイナリデータを順序に解析し、前記メタデータ容器のサブ容器の容器タイプ、及び前記サブ容器の容器データの長さを取得する;前記サブ容器の容器タイプに対応する解析器を呼び出し、解析されていないデータのうち前記容器データの長さに対応するバイナリデータを順序に解析し、前記容器データが表すメディア情報を取得する。
【0135】
ここで、プレーヤは、メタデータ容器に複数のサブ容器がネストされた状況に対して、バイナリデータを毎回に読み取る際のオフセットを、識別されたサブ容器の長さの加算値にし、読み取ったバイナリデータの長さが容器ヘッダの基準長さに合致することで、現在に処理するサブ容器のタイプと長さを解析することができる。
【0136】
例えば、初めて読み取るとき、メタデータ容器のバイナリデータのゼロバイトからバイナリデータを読み出し、且つ読み出したバイナリデータの長さが容器ヘッダの基準長さと合致することで、第1のサブ容器のタイプ及び長さを解析できる。2回目で読み取るとき、1回目で読み取ったサブ容器の長さをオフセットとし、バイナリデータの読み取りを始め、読み取ったバイナリデータの長さが容器ヘッダの基準長さと合致することで、第2のサブ容器のタイプと長さを解析できる。
【0137】
前記した方式によってバイナリデータを読み取ると、過度な読み取りによって戻すことはなく、読み取り不足によって二次読み取りを行うこともないことで、解析の効率及び正確率が保証される。
【0138】
ある実施例において、容器が直接にバイナリデータをパッケージすることに用いられるか、または容器をさらにパッケージすることに用いられるかを示すように、メタデータ容器にネストされた典型的な容器タイプを事前にマークする。例えば図2に示すmvhd容器、オディオトラック容器及びビデオトラック容器などに対して容器をさらにパッケージしているとマークし、図2に示すstts容器、stsd容器などに対してバイナリデータを直接にパッケージしているとマークする。
【0139】
バイナリデータを直接にパッケージするとマークされた容器タイプに対して、容器タイプと一つずつ対応する解析器を設置する。解析器は、表すメディア情報をバイナリデータに基づいて解析するためのものである。解析されたサブ容器の容器タイプと事前にマークされた容器タイプとを比較することは、以下の二つの場合に関わる。
【0140】
場合1)対比を行うことで、前記サブ容器の容器タイプが事前マークと一致し、且つバイナリデータを直接にパッケージすることに用いられると事前マークと一致したと確定されたとき、前記サブ容器の容器タイプに対応する解析器を呼び出し、前記解析器によって前記サブ容器における容器データを解析することで、前記容器データが表すメディア情報を取得する。
【0141】
場合2)対比を行うことで、前記サブ容器の容器タイプが事前のマークと一致し、且つ容器をさらにパッケージすることに用いられると事前マークと一致したと確定されたとき、前記サブ容器にパッケージされた容器の容器タイプが事前マークと一致し、且つバイナリデータを直接にパッケージすることに用いられると事前マークと一致するまで、前記メディアファイルにおける容器ヘッダの基準長さに基づいて、前記サブ容器に対応するバイナリデータを再帰的に解析する。サブ容器にパッケージされた容器の容器タイプに対応する解析器を呼び出し、バイナリデータをバイト単位で解析し、解析されたバイナリデータの長さが前記サブ容器にパッケージされた容器の容器データの長さと対応することで、前記サブ容器にパッケージされた容器の容器データが表すメディア情報を取得する。
【0142】
ある実施例では、メタデータ容器を解析する過程でメディア情報を記録する方式について説明する。メタデータ容器バイナリデータ内の容器ヘッダの標準長に対応するバイナリデータを順次に解析して、前記メタデータ容器内のサブ容器の容器タイプを取得する時に、サブ容器と所属する容器との間のネスト関係、及びサブ容器とパッケージしている容器とのネスト関係に基づいてオブジェクトを作成し、サブ容器の容器タイプがバイナリデータを直接にパッケージすることに用いられると事前マークに一致する時に、前記サブ容器に対応して作成したオブジェクト内へメディア情報を含めた配列を格納する。格納されたメディア情報は、サブ容器の容器データによって表される。
【0143】
例えば、図2において、解析されるサブ容器のタイプがstts容器である時に、stts容器がバイナリデータを直接にパッケージすると事前にマークされているため、stts容器に対応して作成したオブジェクト内へメディア情報を含めた配列を格納する。ここでのメディア情報は、stts容器の容器データによって表される時間長情報である。
【0144】
ある実施例では、メタデータ容器を解析する過程でサブ容器の間のネスト関係を記録する方式について説明する。メタデータ容器バイナリデータ内の容器ヘッダの標準長に対応するバイナリデータを順次に解析して、前記メタデータ容器内のサブ容器の容器タイプを取得する時に、容器タイプがバイナリデータを直接にパッケージすると事前にマークされていれば、呼び出された前記解析器の中へ解析するサブ容器を記録する。記録されたサブ容器のインスタンスをサブ容器属性に設定する。サブ容器属性は、サブ容器が所属する容器に含められ、サブ容器と所属する容器との間のネスト関係を記述することに用いられる。
【0145】
例えば、図2において、解析されるサブ容器のタイプがstsd容器である時に、stsd容器がバイナリデータを直接にパッケージすると事前にマークされているため、stsd容器に対応する解析器の中へstsd容器を記録し、stsd容器のインスタンスをstbl容器サブ容器属性に設定する。以降は同様であり、最後にstsd容器のサブ容器属性にstsd容器、stts容器、stsc容器等の、stbl容器にネストされている複数のサブ容器を記録した。
【0146】
ある実施例では、対比を行うことで、前期サブ容器の容器タイプが事前にマークされていないと確定した、又はバイナリデータを直接にパッケージすると事前にマークされたが対応するタイプの解析器の呼び出しができなかった時に、サブ容器に対応するバイナリデータを解析することを無視し、サブ容器の長さに基づいて、前記バイナリデータのうち次のサブ容器に対応する部分へジャンプして引き続いて解析する。
【0147】
実際に、メディアファイルには、カスタムの容器タイプが含まれ、メタデータ容器の全体解析の進度に影響を及ぼすことがない。それと同時に、解析器を設置することで、メタデータの容器タイプが変化するとき、対応するタイプの解析器を追加・削除・修正することで、最新のメタデータ容器に対する互換的な解析を速やかに実現でき、アップデートの融通度が高いという特徴がある。
【0148】
実際に、メディアファイル内にカスタムの容器タイプが出現することはあり得る。ジャンプの方式によって、メタデータ容器の全体の解析の進度を影響することがない。同時に、解析器を設置することで、メタデータ容器の容器タイプが変化した時に、対応するタイプの解析器の増加、削除及び修正を通じて、最新のメタデータ容器に対する互換的な解析を快速的に実現することができ、柔軟かつ快速的にアップデートできるという特性がある。
【0149】
本公開の実施例が提供したメタデータ容器の解析装置に合わせて、ウェブサイトに埋め込まれたH5プレーヤがMP4ファイルを解析する場合を例として説明する。図10を参照して、図10は、本公開の実施例が提供したメタデータ容器の解析方法のある選択可能なフローの模式図である。図10に示すステップに合わせて説明する。
【0150】
ステップ1001:バイナリビデオデータを取得する;
メディアファイルにおけるメタデータ容器の位置をオフセット及び容量で表すことができるため、読み取られたバイナリデータの長さがメタデータ容器の容量に合致するまで、メディアファイルからオフセットに対応する位置からバイナリデータを読み取ることで、メタデータ容器に対応するバイナリデータを読み取ることができる。
【0151】
ステップ1002:容器集合を作成する;
相応する解析器を呼び出すために、ステップ1002によって、取得されたバイナリビデオデータに対するマークを実現することができる。
【0152】
プレーヤは、設定のオフセット及び容量を携帯したデータ請求をサーバへ送信することで、MP4ファイル内で0バイトから開始し、且つ設定容量に合致するバイナリデータを取得する。MP4ファイルのパッケージ構造に順次にパッケージされたfytp容器、moov容器及びmdat容器が含まれた場合を例として、設定容量は、既存のMP4ファイルのftyp容器及びmoov容器容量に基づいて統計して得られる。設定容量が設定割合(例えば全部)のMP4ファイル的ftyp容器とmoov容器との加算値をカバーできるようにすることで、サーバから完全なmoov容器バイナリデータを1回だけで請求できることを確保する。図9を参照して、プレーヤ請求に設定されたオフセットが0バイトであり、設定された容量がMath.pow(25,4)バイトのバイナリデータであり、サーバが返したバイナリデータからmoovデータを取得する。1回の請求で完全なmoovデータを取得できなかったら、改めてオフセット(図9の開始(start))及容量(開始~サイズ(start~size))を計算し、2回目の請求を行う。
【0153】
ステップ1003:ストリーム(Stream)を読み取るインスタンスを作成する;
ステップ1004:容器インスタンスを作成する;
ステップ1005:容器ヘッダを読み取る;
前記容器ヘッダを解析することで前記容器のタイプ及び長さ等情報を知ることができる。
【0154】
ステップ1006:容器体(boxBody)を読み取る;
ステップ1007:容器に対応する解析器を呼び出す;
ここで、容器内のメタデータ容器の解析は、以下のように行うことができる。
【0155】
メタデータ容器バイナリデータ内の容器ヘッダの標準長に対応するバイナリデータを順次に解析して、前記メタデータ容器内のサブ容器の容器タイプ、及び前記サブ容器の容器データの長さを取得する。前記サブ容器の容器タイプに対応するタイプの解析器を呼び出して、未解析のデータ内の前記容器データの長さに対応するバイナリデータを順次に解析し、前記容器データが表すメディア情報を取得する。
【0156】
ここで、プレーヤは、メタデータ容器内に複数のサブ容器がネストされた場合について、毎度にバイナリデータを読み取る時のオフセットが既に識別されたサブ容器長の加算値であり、読み取るバイナリデータの長さが容器ヘッダの標準長に合致することで、現時点で処理するサブ容器のタイプ及び長さを解析することができる。
【0157】
例えば、初回の読み取りを行う時に、メタデータ容器のバイナリデータの0バイトからバイナリデータの読み取りを開始し、且つ読み取るバイナリデータの長さが容器ヘッダの標準長に合致することで、1番目のサブ容器のタイプ及び長さを解析することができる。2回目の読み取りを行う時に、初回に読み取られたサブ容器の長さをオフセットとして、バイナリデータの読み取りを開始し、且つ読み取るバイナリデータの長さが容器ヘッダの標準長に合致することで、2番目のサブ容器のタイプ及び長さを解析することができる。
【0158】
前記した方式によってバイナリデータを読み取ると、過度な読み取りによって戻すことはなく、読み取り不足によって二次読み取りを行うこともないことで、解析の効率及び正確率が保証される。
【0159】
ステップ1008:各容器の間のネスト関係を確定する;
ある実施例では、メタデータ容器を解析する過程でサブ容器の間のネスト関係を記録する方式について説明する。メタデータ容器バイナリデータ内の容器ヘッダの標準長に対応するバイナリデータを順次に解析して前記メタデータ容器内のサブ容器の容器タイプを取得する時に、容器タイプがバイナリデータを直接にパッケージすると事前にマークされていれば、呼び出された前記解析器内へ解析されるサブ容器を記録する。記録されたサブ容器のインスタンスをサブ容器属性に設定する。前記サブ容器属性は、前記サブ容器が所属する容器に含まれ、前記サブ容器と所属する容器との間のネスト関係を記述することに用いられる。
【0160】
例えば、図2において、解析されるサブ容器のタイプがstsd容器である時に、stsd容器がバイナリデータを直接にパッケージすると事前にマークされたため、stsd容器に対応する解析器の中でstsd容器を記録し、stsd容器のインスタンスをstbl容器サブ容器属性中に設定する。以降は同様であり、最後に、stsd容器のサブ容器属性にstsd容器、stts容器、stsc容器等の、stbl容器にネストされている複数のサブ容器を記録した。
【0161】
ステップ1009:ストリーム(Stream)を読み取る位置を更新する。
【0162】
ステップ1008及び1009によって、サブ容器と所属する容器との間のネスト関係、及び前記サブ容器とパッケージしている容器とのネスト関係に対する解析及びマークを実現することができる。
【0163】
図10に示す処理過程によって、取得されたバイナリビデオデータに対する解析を実現した。ここで、取得されたバイナリビデオデータ内の関係する容器にサブ容器と所属する容器との間のネスト関係、及び前記サブ容器とパッケージしている容器とのネスト関係が存在している。
【0164】
図11は本公開の実施例が提供したメタデータ容器の解析方法のある選択可能な使用場面の模式図である。図11を参照して、本公開の実施例が提供したメタデータ容器の解析装置は、ユーザ端末10として実施されることができる。ある例示的な応用を支持することを実現するために、ユーザ端末10(例示的にユーザ端末10-1とユーザ端末10-2を示している)は、ネットワーク20を介してサーバ30に接続されている。ネットワーク20は、広域ネットワーク又はローカルネットワークであってもよいし、或いは両者の組合せであってもよい。無線リンクを用いてデータ伝送を実現する。
【0165】
ユーザ端末10は、プレーヤがはめ込んだウェブサイトによってメディアファイル再生を行い、グラフィックインターフェース110(例示的にグラフィックインターフェース110-1とグラフィックインターフェース110-2を示している)によって再生する内容を表示する。ユーザ端末10は、再生の過程で、メディアファイルにおけるメタデータ容器の位置に基づいて、前記サーバ30から取得されたメディアファイルのバイナリデータからメタデータ容器に対応するバイナリデータを取得する。取得されたバイナリデータ内の前記メタデータ容器ヘッダの標準長に対応するバイナリデータを順次に解析して、前記メタデータ容器内のサブ容器の容器タイプ、及び前記サブ容器の容器データの長さを取得する。前記サブ容器の容器タイプに対応するタイプの解析器を呼び出して、未解析のデータ内の前記容器データの長さに対応するバイナリデータを順次に解析し、前記容器データが表すメディア情報を取得する。
【0166】
図12は、本公開の実施例が提供した、MP4ファイルをFMP4ファイルへ変換してメディアソース拡張インターフェースによって再生する模式図である。図13を参照して、プレーヤは、メディアファイルの実アドレス(図中http://www.toutiao.com/a/b.mp4)に基づいて一定の時間長に満足するメディアデータを取得する。その後、取得されたメディアデータ構造に基づいてメディアファイルをセグメント化する、即ち、それをセグメントMP4様式のメディアファイルへ変換する。その後、セグメントメディアファイルをMSEのメディアソースオブジェクト(例えば、クラスファイルオブジェクト(Blob)の方式を用いて実現する)へ添加する。MSEは、メディアソースオブジェクトに対応する仮想URLを作成し、ビデオ素子へ該仮想URLを伝送することで、ビデオ素子が相応のメディアソースオブジェクトを取得させる。前記した抽出されたメディアデータ、及び前記メディアデータを記述するメタデータを、セグメントメディアファイルのパッケージ構造によってパッケージすることを実現して、独立にデコードすることに使用可能なセグメントメディアファイルを取得する。
【0167】
前記した実施例によって、メタデータ容器内の相応するデータに対する解析速度を効率的に向上させることができ、データ解析の速度が遅いことでユーザの使用体験が影響されることを回避し、同時に、メタデータ容器を解析することで取得した相応の情報は、前記メタデータに対応するメディア情報を変換することに使用することができる。
【0168】
当業者は、本公開の実施例が方法、システム、或コンピュータープログラム製品として提供され得ると理解される。そこで、本公開の実施例は、ハードウェア実施例、ソフトウェア実施例、或いはソフトウェアとハードウェア形態を組み合わせた実施例の形式を採用し得る。そして、本公開の実施例は、コンピューター使用可能なプログラムコードを含めた一つ又は複数のコンピューター使用可能な記憶媒体(磁気ディスクメモリ及び光学メモリ等を含め)で実施されるコンピュータープログラム製品の形式を採用し得る。
【0169】
本公開の実施例は、本公開の実施例による方法、設備(システム)、及びコンピュータープログラム製品のフロー図、及び/又はブロック図を参照して記述された。コンピュータープログラム操作によって、フロー図及び/又はブロック図内の各フロー及び/又はブロック、及びフロー図及び/又はブロック図内のフロー及び/又はブロックの組み合わせを実現することができると理解すべきである。これらのコンピュータープログラム操作を汎用コンピューター、専用コンピューター、嵌め込み型処理機又は他のプログラマブルデータ処理設備のプロセッサへ提供して機器を生成することで、コンピューター又は他のプログラマブルデータ処理設備のプロセッサで実行される操作によって、フロー図の一つ又は複数のフロー及び/又はブロック図の一つ又は複数のブロックで指定した機能を実現するための装置を生じることができる。
【0170】
これらのコンピュータープログラム操作は、コンピューター又は他のプログラマブルデータ処理設備をガイドして特定の方式で作動させることができるコンピューター読み取り可能なメモリに格納されることにより、該コンピューター読み取り可能なメモリ内に格納された操作が操作装置を含めた製造品を生じて、該操作装置により、フロー図の一つ又は複数のフロー及び/又はブロック図の一つ又は複数のブロックで指定された機能を実現してもよい。
【0171】
これらのコンピュータープログラム操作は、コンピューター又は他のプログラマブルデータ処理設備に搭載されることで、コンピューター又は他のプログラマブル設備で一連の操作ステップを実行してコンピューターで実現される処理を生じて、コンピューター又は他のプログラマブル設備で実行された操作が、フロー図の一つ又は複数のフロー及び/又はブロック図の一つ又は複数のブロックで指定された機能を実現するためのステップを提供しても良い。
【0172】
以上のように、本公開の好ましい実施例に過ぎず、本公開の技術的範囲を限定するためではなく、本公開の精神と原則内でなされる何の補正、同等入れ換え、及び改善等は、いずれも本公開の技術的範囲に含まれる。
【符号の説明】
【0173】
20ネットワーク
30サーバ
500メタデータ容器の解析装置
501プロセッサ
502メモリ
503ユーザインターフェース
504ネットワークインターフェース
600メタデータ容器の解析装置
601データ取得ブロック
602データ解析ブロック
5021オペレーティングシステム
5022アプリケーション
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12