Submit Search
Upload
Inside WebM
•
Download as PPTX, PDF
•
0 likes
•
2,776 views
M
mganeko
Follow
WebRTC Meetup Tokyo #8で発表した資料から、WebMの内部構造についての部分だけを抜粋しました。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 23
Download now
Recommended
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
mganeko
WebRTC Build MCU on browser
WebRTC Build MCU on browser
mganeko
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
MITSUNARI Shigeo
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
こわくない Git
こわくない Git
Kota Saito
Hubsを何度も破壊して得た知見、話します
Hubsを何度も破壊して得た知見、話します
hironroinakae
Guide To AGPL
Guide To AGPL
Mikiya Okuno
Recommended
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
mganeko
WebRTC Build MCU on browser
WebRTC Build MCU on browser
mganeko
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
MITSUNARI Shigeo
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
こわくない Git
こわくない Git
Kota Saito
Hubsを何度も破壊して得た知見、話します
Hubsを何度も破壊して得た知見、話します
hironroinakae
Guide To AGPL
Guide To AGPL
Mikiya Okuno
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
.NET 7期待の新機能
.NET 7期待の新機能
TomomitsuKusaba
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
Unity Technologies Japan K.K.
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
MagicOnion入門
MagicOnion入門
torisoup
Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。
Yuya Yamaki
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
SEGADevTech
Amazon Kinesis Video Streams WebRTC 使ってみた
Amazon Kinesis Video Streams WebRTC 使ってみた
mganeko
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
(旧版) オープンソースライセンスの基礎と実務
(旧版) オープンソースライセンスの基礎と実務
Yutaka Kachi
例外設計における大罪
例外設計における大罪
Takuto Wada
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
モノビット エンジン
目grep入門 +解説
目grep入門 +解説
murachue
HoloLens2とPCで、WebRTCで映像をやりとり
HoloLens2とPCで、WebRTCで映像をやりとり
聡 大久保
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
mganeko
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.js
mganeko
More Related Content
What's hot
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
.NET 7期待の新機能
.NET 7期待の新機能
TomomitsuKusaba
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
Unity Technologies Japan K.K.
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
MagicOnion入門
MagicOnion入門
torisoup
Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。
Yuya Yamaki
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
SEGADevTech
Amazon Kinesis Video Streams WebRTC 使ってみた
Amazon Kinesis Video Streams WebRTC 使ってみた
mganeko
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
(旧版) オープンソースライセンスの基礎と実務
(旧版) オープンソースライセンスの基礎と実務
Yutaka Kachi
例外設計における大罪
例外設計における大罪
Takuto Wada
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
モノビット エンジン
目grep入門 +解説
目grep入門 +解説
murachue
HoloLens2とPCで、WebRTCで映像をやりとり
HoloLens2とPCで、WebRTCで映像をやりとり
聡 大久保
What's hot
(20)
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
.NET 7期待の新機能
.NET 7期待の新機能
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
Glibc malloc internal
Glibc malloc internal
MagicOnion入門
MagicOnion入門
Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
Amazon Kinesis Video Streams WebRTC 使ってみた
Amazon Kinesis Video Streams WebRTC 使ってみた
Docker Compose 徹底解説
Docker Compose 徹底解説
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
(旧版) オープンソースライセンスの基礎と実務
(旧版) オープンソースライセンスの基礎と実務
例外設計における大罪
例外設計における大罪
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
目grep入門 +解説
目grep入門 +解説
HoloLens2とPCで、WebRTCで映像をやりとり
HoloLens2とPCで、WebRTCで映像をやりとり
More from mganeko
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
mganeko
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.js
mganeko
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
mganeko
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
mganeko
Skywayのビデオチャットを録画しよう。そう、ブラウザでね
Skywayのビデオチャットを録画しよう。そう、ブラウザでね
mganeko
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
mganeko
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
mganeko
ブラウザでWebRTC - iOSゲートウェイ作ってみた
ブラウザでWebRTC - iOSゲートウェイ作ってみた
mganeko
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
mganeko
Inside of 聖徳玉子 by O2
Inside of 聖徳玉子 by O2
mganeko
Node.js with WebRTC DataChannel
Node.js with WebRTC DataChannel
mganeko
PeerConnectionリレーとMediaRecorder
PeerConnectionリレーとMediaRecorder
mganeko
ここがつらいよWebRTC - WebRTC開発の落とし穴
ここがつらいよWebRTC - WebRTC開発の落とし穴
mganeko
Webrtc bootcamp handson
Webrtc bootcamp handson
mganeko
WebRTC multitrack / multistream
WebRTC multitrack / multistream
mganeko
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
mganeko
WebRTC multistream
WebRTC multistream
mganeko
Chromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそう
mganeko
Infocom webrtc conference japan
Infocom webrtc conference japan
mganeko
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
mganeko
More from mganeko
(20)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.js
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Skywayのビデオチャットを録画しよう。そう、ブラウザでね
Skywayのビデオチャットを録画しよう。そう、ブラウザでね
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
ブラウザでWebRTC - iOSゲートウェイ作ってみた
ブラウザでWebRTC - iOSゲートウェイ作ってみた
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
Inside of 聖徳玉子 by O2
Inside of 聖徳玉子 by O2
Node.js with WebRTC DataChannel
Node.js with WebRTC DataChannel
PeerConnectionリレーとMediaRecorder
PeerConnectionリレーとMediaRecorder
ここがつらいよWebRTC - WebRTC開発の落とし穴
ここがつらいよWebRTC - WebRTC開発の落とし穴
Webrtc bootcamp handson
Webrtc bootcamp handson
WebRTC multitrack / multistream
WebRTC multitrack / multistream
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC multistream
WebRTC multistream
Chromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそう
Infocom webrtc conference japan
Infocom webrtc conference japan
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
Recently uploaded
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
Recently uploaded
(8)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Inside WebM
1.
Inside of WebM 2015.06.06 インフォコム株式会社 がねこまさし @massie_g 1
2.
WebMとは • Wikipediaより http://ja.wikipedia.org/wiki/WebM –
米Googleが開発している – オープンでロイヤリティフリーな – 動画コンテナフォーマット • コーデック – 映像: VP8 / VP9 – 音声: Vorbis • コンテナ – Matroskaのサブセット
3.
Matroska • Wikipediaより http://ja.wikipedia.org/wiki/Matroska –
ロシアの入れ子人形マトリョーシカにちなむ – オープンソース(GNU LGPL)で開発中 – EBML(Extensible Binary Meta Language)採用 – http://www.matroska.org/technical/specs/index.html – こちらの記事からたどり着きました。ありがとうございます! • Media Source Extensionsを使ってみた (WebM編) @othersight • http://qiita.com/tomoyukilabs/items/57ba8a982ab372611669 • EBML (Extensible Binary Meta Language) – XMLを基に作られた、拡張性に優れたデータ格納方式 • 要素のみ、属性なし、入れ子あり • ※むしろYAMLと言った方が近いかも – 対応していない機能(タグ)は無視する – テキストではなくバイナリで表現
4.
EMBLのイメージ <EBML> <EBMLVersion>1</EBMLVersion> <DocType>webm</DocType> </EBML> <Segment> … <Info> …
</Info> <Tracks> … </Tracks> <Cluster> … </Cluster> <Cluster> … </Cluster> … </Segment> これがバイナリで格納されている
5.
WebMのおおまかな構造 ヘッダー 部分 映像/音声 部分 おまけ
部分 Header Meta Seek Info Segment Info Tracks (Chapters) Cluster Cluster Cluster Cluster (Cue Data) (Attachment) (Tagging) Matroska的 EBML Segment WebRTC的
6.
Headerの主要要素 EBML:[1A][45][DF][A3]... EBML形式であることを示す EBMLVersion:[42][86]… EBMLのバージョン
1 EBMLMaxIDLength:[42][F2]…ID(タグ)の最大長4 EBMLMaxSizeLength:[42][F3]… 要素値のサイズを指定する数値の最大バイト数8 DocType:[42][82]…ファイル形式”webm” DocTypeVersion:[42][87]…ファイル形式のバージョン Header
7.
Headerの主要要素 EBML:[1A][45][DF][A3]... EBML形式であることを示す EBMLVersion:[42][86]… EBMLのバージョン
1 EBMLMaxIDLength:[42][F2]…ID(タグ)の最大長4 EBMLMaxSizeLength:[42][F3]… 要素値のサイズを指定する数値の最大バイト数8 DocType:[42][82]…ファイル形式”webm” DocTypeVersion:[42][87]…ファイル形式のバージョン Header ファイル名が変更されて拡張子がなくても ・先頭の4バイトが 0x1A, 0x45, 0xDF, 0xA3 であれば、高確率でWebM ・さらにDocTypeの値を見れば、 WebM であることがほぼ確定
8.
Segment Infoの主要要素 Info:[15][49][A9][66] TimecodeScale:[2A][D7][B1]… トラックの時刻を示す単位を、ナノ秒で指定 →1,000,000 ナノ秒
= 1 ミリ秒 Duration:[44][89]…映像/音声の長さ TimecodeScaleを単位として示す ※不明(継続中)の場合は0 Segment Info
9.
Segment Infoの主要要素 Info:[15][49][A9][66] TimecodeScale:[2A][D7][B1]… トラックの時刻を示す単位を、ナノ秒で指定 →1,000,000 ナノ秒
= 1 ミリ秒 Duration:[44][89]…映像/音声の長さ TimecodeScaleを単位として示す ※不明(継続中)の場合は0 Segment Info TimecodeScaleで、この後登場する時刻、時間の単位を指定 ・仕様上ナノ秒単位でも指定できるので、光の動きも捉えられそう Durationでは再生時間を指定 ・MediaRecorderで録画したものでは、0(ゼロ)が指定
10.
Tracksの主要要素 Tracks:[16][54][AE][6B]… Video/Audioトラックのセット TrackEntry:[AE]…トラック TrackNumber:[D7] CodecName:[25][86][88] TrackType:[83] …
Video/Audio Video:[E0] PixelWidth:[B0] PixelHeight:[BA] FrameRate:[23][83][E3] Audio:[E1] SamplingFrequency:[B5] Channels:[9F] Tracks
11.
Trackについて Tracks ・仕様上は、Trackは127個まで入れることが可能 ※今のところ、Videoが1つ、Audioが1つ、というケースしか見たことがない ・TrackTypeは、Video/Audio以外にも字幕、ロゴなどが用意されている模様
12.
Clusterの主要要素 Cluster[1F][43][B6][75]… 実際のVideoとAudioの断片を格納 Timecode:[E7] …その断片の開始時刻(TimecodeScaleの値単位) SimpleBlock:[A3]
…VideoかAudioの断片。複数 ※SimpleBlockの中身は、EBML形式ではない Cluster
13.
Clusterの主要要素 Cluster[1F][43][B6][75]… 実際のVideoとAudioの断片を格納 Timecode:[E7] …その断片の開始時刻(TimecodeScaleの値単位) SimpleBlock:[A3]
…VideoかAudioの断片。複数 ※SimpleBlockの中身は、EBML形式ではない Cluster ・実際の映像(Video)と音声(Audio)のデータはClusterに含まれる ・一つのWebMファイルには複数のClusterが含まれる
14.
WebM/Matroska/EBML バイナリのレイアウト
15.
EBML EBMLVersion “webm” Segment 1 Tracks CodecName “VP8” DOCType
16.
タグ/Elementのバイナリ表現 • 3つのパートでタグ/Elementは構成される ID DataSize
Data 1~4バイト 1~8バイト 0~0x00FFFFFFFFFFFFFEバイト ペタバイト級まで 可変長 可変長 可変長 実際のデータだけでなく、IDもDataSizeも可変長 厄介なヤツ。マジ勘弁…
17.
ID部のバイナリ表現 1バイト目(2進) 1xxx-xxxx 01xx-xxxx xxxx-xxxx 001x-xxxx xxxx-xxxx
xxxx-xxxx 0001-xxxx xxxx-xxxx xxxx-xxxx xxxx-xxxx 0x80~0xFF 0x40~0x7F 1バイト目(16進) 0x20~0x3F 0x10~0x1F ※先頭ビットも、IDの値に含める
18.
DataSize部のバイナリ表現 xxxx-xxxxxxxx-xxxx xxxx-xxxxxxxx-xxxx xxxx-xxxx
xxxx-xxxxxxxx-xxxx0000-0001 xxxx-xxxxxxxx-xxxx xxxx-xxxxxxxx-xxxx xxxx-xxxx xxxx-xxxx0000-001x xxxx-xxxxxxxx-xxxx xxxx-xxxxxxxx-xxxx xxxx-xxxx0000-01xx xxxx-xxxxxxxx-xxxx xxxx-xxxxxxxx-xxxx0000-1xxx xxxx-xxxxxxxx-xxxx xxxx-xxxx0001-xxxx xxxx-xxxxxxxx-xxxx001x-xxxx xxxx-xxxx01xx-xxxx 1xxx-xxxx 1バイト目(2進) 7bits 14bits 21bits 28bits 35bits 42bits 49bits 56bits 値はBig Endian のUnsigned Integer ※先頭ビットは、DataSizeの値に含めない ※すべてのビットが1の値は予約済(多分)
19.
Data部分 • DataSizeで指定されたバイト数 • タグ(ID)の種類によって、さまざま型 –
整数: unsigned int, signed int (Big Endian) – 文字列: ASCII string, UTF-8 string – 実数: float (Big Endian) – 日付: date (Big Endian) – バイナリ: binary – 他の複数のタグ: master • タグの入れ子の構造 • 型を識別するルールは無い …みたい – タグの値と型を対応付ける辞書を持つしかなさそう – http://www.matroska.org/technical/specs/index.html
20.
20 http://www.matroska.org/technical/specs/index.html より ID 型
21.
解析例(1) EBMLVersion • 16進表記:
42 86 81 01 • IDの最初のバイトの2進表記: 0100 0010 – → IDは2バイトの[42][86] – 一覧表から、EBMLVersionと判明 • DataSizeの最初のバイトの2進表記: 1000 0001 – → DataSizeは1バイト – サイズは 0000 0001 = 1バイト • Dataは1バイト。先ほどの一覧表から、型はUnsigend Int – → 値は 1 • 結果: EBMLVersion = 1
22.
解析例(2) DocType • 16進表記:
42 86 84 77 65 62 6D • IDの最初のバイトの2進表記: 0100 0010 – → IDは2バイトの[42][84] – 一覧表から、DocTypeと判明 • DataSizeの最初のバイトの2進表記: 1000 1000 – → DataSizeは1バイト。サイズは 0000 1000 = 4バイト • Dataは4バイト。先ほどの一覧表から、型はASCII string – 77 65 62 6D → 値は "webm" • 結果: DocType = "webm"
23.
WebMのパース • 先頭から1バイトづつパースしていけば、タグの内容を解析 可能 • とくに興味が無いタグや、理解できないタグが出現した場合 –
データー長はルールに従って算出可能 → スキップすることが可能 • ※もちろんライブラリもあります – libebml http://dl.matroska.org/downloads/libebml/ – libmatroska http://dl.matroska.org/downloads/libmatroska/ – yamka https://sourceforge.net/projects/yamka/ ※使ってはいません。詳細不明 • Node.js のサンプルコードを書いてみました – https://gist.github.com/mganeko/9ceee931ac5dde298e81 – メモリ上に一括して読み込む、しょぼい実装ですが…
Download now