Suche senden
Hochladen
Stagefright入門
•
14 gefällt mir
•
22,233 views
L
l_b__
Folgen
横浜Androidプラットフォーム部第13回勉強会で発表した資料です。
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 34
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
カリギュラオーバードーズにおけるUE4へのデータ移植の手引き
カリギュラオーバードーズにおけるUE4へのデータ移植の手引き
エピック・ゲームズ・ジャパン Epic Games Japan
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
Tatsuhiko Yamamura
全部知ってたらTwinmotionマスター!TwinmotionのぷちTips・テクニック
全部知ってたらTwinmotionマスター!TwinmotionのぷちTips・テクニック
エピック・ゲームズ・ジャパン Epic Games Japan
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
UnityTechnologiesJapan002
エフェクトツール機能の実装例
エフェクトツール機能の実装例
エピック・ゲームズ・ジャパン Epic Games Japan
UE4.25のレイトレーシングで出来ること/出来ないこと
UE4.25のレイトレーシングで出来ること/出来ないこと
Satoshi Kodaira
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
Empfohlen
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
カリギュラオーバードーズにおけるUE4へのデータ移植の手引き
カリギュラオーバードーズにおけるUE4へのデータ移植の手引き
エピック・ゲームズ・ジャパン Epic Games Japan
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
Tatsuhiko Yamamura
全部知ってたらTwinmotionマスター!TwinmotionのぷちTips・テクニック
全部知ってたらTwinmotionマスター!TwinmotionのぷちTips・テクニック
エピック・ゲームズ・ジャパン Epic Games Japan
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
UnityTechnologiesJapan002
エフェクトツール機能の実装例
エフェクトツール機能の実装例
エピック・ゲームズ・ジャパン Epic Games Japan
UE4.25のレイトレーシングで出来ること/出来ないこと
UE4.25のレイトレーシングで出来ること/出来ないこと
Satoshi Kodaira
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
historia_Inc
はりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみた
uchan_nos
Editor Utility Widgetで色々便利にしてみた。
Editor Utility Widgetで色々便利にしてみた。
IndieusGames
UE4とUnrealC++について
UE4とUnrealC++について
Masahiko Nakamura
Fbx解説 (1 構文編) (1)
Fbx解説 (1 構文編) (1)
らりお ザ・何とは言わない天然水ソムリエ
UE4の色について v1.1
UE4の色について v1.1
エピック・ゲームズ・ジャパン Epic Games Japan
アニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdf
infinite_loop
UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -
エピック・ゲームズ・ジャパン Epic Games Japan
バーチャルライブプラットフォーム 「INSPIX」を支える技術とその活用法
バーチャルライブプラットフォーム 「INSPIX」を支える技術とその活用法
pulse Inc.
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
エピック・ゲームズ・ジャパン Epic Games Japan
Unreal Engineを使用した商用タイトルで のノンフォトリアルレンダリング(NPR)事例
Unreal Engineを使用した商用タイトルで のノンフォトリアルレンダリング(NPR)事例
Tatsuhiro Tanaka
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
Unity Technologies Japan K.K.
猫でも分かるUE4.22から入ったSubsystem
猫でも分かるUE4.22から入ったSubsystem
エピック・ゲームズ・ジャパン Epic Games Japan
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
UE4における大規模背景制作事例(データメンテナンス・大技設定編 )
UE4における大規模背景制作事例(データメンテナンス・大技設定編 )
エピック・ゲームズ・ジャパン Epic Games Japan
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
Tokoroten Nakayama
デジタル水遊び (UE4 VFX Art Dive)
デジタル水遊び (UE4 VFX Art Dive)
エピック・ゲームズ・ジャパン Epic Games Japan
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
エピック・ゲームズ・ジャパン Epic Games Japan
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話
Tatsuya Matsumoto
OpenMAX Overview
OpenMAX Overview
Yoss Cohen
Weitere ähnliche Inhalte
Was ist angesagt?
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
historia_Inc
はりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみた
uchan_nos
Editor Utility Widgetで色々便利にしてみた。
Editor Utility Widgetで色々便利にしてみた。
IndieusGames
UE4とUnrealC++について
UE4とUnrealC++について
Masahiko Nakamura
Fbx解説 (1 構文編) (1)
Fbx解説 (1 構文編) (1)
らりお ザ・何とは言わない天然水ソムリエ
UE4の色について v1.1
UE4の色について v1.1
エピック・ゲームズ・ジャパン Epic Games Japan
アニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdf
infinite_loop
UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -
エピック・ゲームズ・ジャパン Epic Games Japan
バーチャルライブプラットフォーム 「INSPIX」を支える技術とその活用法
バーチャルライブプラットフォーム 「INSPIX」を支える技術とその活用法
pulse Inc.
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
エピック・ゲームズ・ジャパン Epic Games Japan
Unreal Engineを使用した商用タイトルで のノンフォトリアルレンダリング(NPR)事例
Unreal Engineを使用した商用タイトルで のノンフォトリアルレンダリング(NPR)事例
Tatsuhiro Tanaka
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
Unity Technologies Japan K.K.
猫でも分かるUE4.22から入ったSubsystem
猫でも分かるUE4.22から入ったSubsystem
エピック・ゲームズ・ジャパン Epic Games Japan
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
UE4における大規模背景制作事例(データメンテナンス・大技設定編 )
UE4における大規模背景制作事例(データメンテナンス・大技設定編 )
エピック・ゲームズ・ジャパン Epic Games Japan
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
Tokoroten Nakayama
デジタル水遊び (UE4 VFX Art Dive)
デジタル水遊び (UE4 VFX Art Dive)
エピック・ゲームズ・ジャパン Epic Games Japan
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
エピック・ゲームズ・ジャパン Epic Games Japan
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
Was ist angesagt?
(20)
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
はりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみた
Editor Utility Widgetで色々便利にしてみた。
Editor Utility Widgetで色々便利にしてみた。
UE4とUnrealC++について
UE4とUnrealC++について
Fbx解説 (1 構文編) (1)
Fbx解説 (1 構文編) (1)
UE4の色について v1.1
UE4の色について v1.1
アニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdf
UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -
バーチャルライブプラットフォーム 「INSPIX」を支える技術とその活用法
バーチャルライブプラットフォーム 「INSPIX」を支える技術とその活用法
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
Unreal Engineを使用した商用タイトルで のノンフォトリアルレンダリング(NPR)事例
Unreal Engineを使用した商用タイトルで のノンフォトリアルレンダリング(NPR)事例
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
猫でも分かるUE4.22から入ったSubsystem
猫でも分かるUE4.22から入ったSubsystem
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
UE4における大規模背景制作事例(データメンテナンス・大技設定編 )
UE4における大規模背景制作事例(データメンテナンス・大技設定編 )
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
デジタル水遊び (UE4 VFX Art Dive)
デジタル水遊び (UE4 VFX Art Dive)
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
Andere mochten auch
日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話
Tatsuya Matsumoto
OpenMAX Overview
OpenMAX Overview
Yoss Cohen
20分で理解するdisplaysystem
20分で理解するdisplaysystem
magoroku Yamamoto
Understanding open max il
Understanding open max il
Chethan Pchethan
A slightly deeper dive into Stagefright
A slightly deeper dive into Stagefright
Alexy Joseph
IOMX in Android
IOMX in Android
Raghavan Venkateswaran
Android media framework overview
Android media framework overview
Jerrin George
Android Multimedia Framework
Android Multimedia Framework
Picker Weng
Android最速のフォトグラファーに、俺はなる!
Android最速のフォトグラファーに、俺はなる!
Kazutoshi Kashimoto
さらば、Stagefright 脆弱性
さらば、Stagefright 脆弱性
Tsukasa Oi
Stagefright入門
Stagefright入門
l_b__
Open binder
Open binder
l_b__
Eclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグ
l_b__
Yapf2013
Yapf2013
l_b__
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
l_b__
ABS2015 のセッション紹介
ABS2015 のセッション紹介
l_b__
PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達
l_b__
Androidの新ビルドシステム
Androidの新ビルドシステム
l_b__
Intentの概要
Intentの概要
l_b__
Android デバッグ小ネタ
Android デバッグ小ネタ
l_b__
Andere mochten auch
(20)
日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話
OpenMAX Overview
OpenMAX Overview
20分で理解するdisplaysystem
20分で理解するdisplaysystem
Understanding open max il
Understanding open max il
A slightly deeper dive into Stagefright
A slightly deeper dive into Stagefright
IOMX in Android
IOMX in Android
Android media framework overview
Android media framework overview
Android Multimedia Framework
Android Multimedia Framework
Android最速のフォトグラファーに、俺はなる!
Android最速のフォトグラファーに、俺はなる!
さらば、Stagefright 脆弱性
さらば、Stagefright 脆弱性
Stagefright入門
Stagefright入門
Open binder
Open binder
Eclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグ
Yapf2013
Yapf2013
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
ABS2015 のセッション紹介
ABS2015 のセッション紹介
PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達
Androidの新ビルドシステム
Androidの新ビルドシステム
Intentの概要
Intentの概要
Android デバッグ小ネタ
Android デバッグ小ネタ
Ähnlich wie Stagefright入門
Cell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始め
You&I
KEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来る
android sola
About kitakat
About kitakat
hidenorly
Programming camp Codereading
Programming camp Codereading
Hiro Yoshioka
20130316 プログラミング言語Go
20130316 プログラミング言語Go
Yoshifumi Yamaguchi
Linux Kernel Seminar in tripodworks
Linux Kernel Seminar in tripodworks
tripodworks
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
5mingame2
Mac Ports
Mac Ports
Naoya Nakazawa
20140830 firefox os-sampler
20140830 firefox os-sampler
Noritada Shimizu
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Naruto TAKAHASHI
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
Takuya Ueda
Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門
cch-robo
Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御
Norito Agetsuma
Android4.2徹底解剖!
Android4.2徹底解剖!
leverages_event
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
Makiko Konoshima
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
Takako Miyagawa
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!
yoshikawa_t
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2
Computational Materials Science Initiative
DelphiでWin/Macクロスコンパイル
DelphiでWin/Macクロスコンパイル
Tomonori Ohba
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
Masamitsu Maehara
Ähnlich wie Stagefright入門
(20)
Cell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始め
KEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来る
About kitakat
About kitakat
Programming camp Codereading
Programming camp Codereading
20130316 プログラミング言語Go
20130316 プログラミング言語Go
Linux Kernel Seminar in tripodworks
Linux Kernel Seminar in tripodworks
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
Mac Ports
Mac Ports
20140830 firefox os-sampler
20140830 firefox os-sampler
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門
Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御
Android4.2徹底解剖!
Android4.2徹底解剖!
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2
DelphiでWin/Macクロスコンパイル
DelphiでWin/Macクロスコンパイル
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
Kürzlich hochgeladen
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
Kürzlich hochgeladen
(9)
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
Stagefright入門
1.
横浜 Android プラットフォーム部
第13回勉強会 Stagefright 入門 ~ Android Multimedia~ 2011/9/19 @l_b__
2.
Stagefright とは? ➲
Gingerbread から採用された動画・音声再生を行う ためのメディアプレーヤーフレームワーク ➲ ソース自体は Eclair から入っていたが、正式採用は Gingerbread ➲ 意味は「舞台負け」「気後れ」「舞台あがり」(研究 社新英和中辞典より)
3.
MediaPlayer のおさらい ➲
基本的な MediaPlayer の使い方(音楽再生) Uri myUri = ....; // initialize Uri here MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC) ; mediaPlayer.setDataSource(getApplicationContext(), myUri); mediaPlayer.prepare(); mediaPlayer.start();
4.
MediaPlayer のソースを見る ➲ frameworks/base/me
dia 以下がマルチメディ ア関連のソース。 ➲ コアである MediaPlayer.java の実 行ステップ数450行!
5.
MediaPlayer のソース ➲ イベント処理を行っているだけでほ
とんどの機能で Native を呼んでい る。 ➲ で、 JNI を通した呼び先が Stagefright。
6.
Android のマルチメディア史 ➲ 元々はメディアエンジンとして
ffmpeg (http://ffmpeg.org/) を採 用する予定だったらしい。 ➲ しかし ffmpeg はライセンスに GPL を採用。 ➲ しかも...
7.
Hall of Shame
8.
Android のマルチメディア史 ➲
ライセンス違反ソフトの晒し上げページを作るほど 強硬派。 ➲ で、 ffmpeg はあきらめ、他のエンジンを探したら しい。 ➲ そして採用されたのが PacketVideo 社の CORE を オープンソース化した OpenCore。 ➲ 以後、 Froyo まで/ external/opencore の下に存 在。
9.
OpenCore ➲
OpenCore はプレーヤー部分である pvPlayer と各 Codec から構成。 ➲ 開発向けガイドなどのドキュメント類 が/ external/opencore/doc 配下にある。 ➲ OpenCore には一つ面白い特徴が。
10.
OpenMAX ➲
OpenCore は OpenMAX をサポート。 ➲ OpenMAX(http://www.khronos.org/open max/) とは ● Khronos グループが策定しているポータビリ ティを重視したクロスプラットフォーム向け のメディア API
11.
余談: Khronos って? ➲
様々なオープンスタンダード API を策定して いるコンソーシアム。 ➲ OpenGL,OpenCL,OpenVG,OpenSL,OpenK ODE,WebGL,EGL,WebCL,OpenWF etc etc. ➲ OpenAL が Khronos 策定で無いのをさっき知ったのはここだけの話で す。
12.
OpenCore と OpenMAX ➲
OpenCore がサポートしているのは OpenMAX IL(Integration Layer) ➲ OpenMAX には DL(Development Layer)、IL、AL(Application Layer) があ り、 IL はコーデックを叩きやすくする API が定義されている。
13.
OpenMAX IL http://pc.watch.impress.co.jp/docs/2004/0729/kaigai104.htm から
14.
ここは想像 ➲
OpenCore にスタンダードなエンコード/デ コードの API が用意されていたので、 Java 側の AndroidMediaFramework に合わせて 作り直したのが Stagefright じゃないかな と。 ➲ Stagefright が公開されたのは Eclair から。
15.
動画再生の基礎 ➲
動画はおおざっぱに言うと、パラパラ漫画の 絵(フレーム)を1枚ずつどう圧縮し(符号化)、 どういう形でファイル/ストリームに格納する か(コンテナ)。 ➲ 動画再生はファイル/ストリームからコンテナ 形式に従ってフレームを取り出し、デコード して取り出した画像を画面表示すること。
16.
動画再生の図 ➲
取り出したフレームには ● それだけで復号できる I フレーム ● 前の I フレーム/ P フレームを参照して復号する P フレーム ● 前後のフレームを参照して復号する B フレーム ➲ デコーダには I フレームを含む形でフレームを渡す必要がある
17.
音声再生の基礎 ➲
基本は PCM(Pulse Code Modulation) フォー マット。 ➲ サンプリング周波数単位で、音圧を変換した 量子化ビットを記録したもの。 ➲ サンプリング周波数は音声をどの頻度でデー タ化するかを Hz で表したもの。 ➲ 量子化ビット(ビット深度)はどの程度の精度 で音圧を記録するか。
18.
音声再生の基礎 ➲
CD の場合、サンプリング周波数は 44.1 KHz、 量子化ビット数は16 bit、 ステ レオで2 ch。 ➲ データサイズは1秒辺り 44100 x2byte(=16bit)x2(ch)=176400byt e ➲ このデータをコーデックでエンコード・デ コードする。
19.
で、 Stagefright の話 ➲
Stagefright の機能を簡単に ● アプリから渡された uri を元にファイル/スト リームを取得 ● ファイル/ストリームがどのコンテナ形式かを チェックし、対応する DataSource/MediaSource に格納
20.
Stagefright の処理(承前) ●
コンテナからフレームを取り出し ( Parser)、OpenMAX IL でデコード ● デコードしたフレームを Surface/AudioTrack に設定して SurfaceFlinger/AudioFlinger に 渡して再生する( Rendrer)
21.
StageFright を簡単な図で http://events.linuxfoundation.org/events/embedded- linux-conference/garcia の資料 http://elinux.org/images/5/52/Elc2011_garcia.pdf
から
22.
Parser 処理 ➲
ファイル/ストリームデータを格納する MediaSource クラス及びコンテナタイプ毎の サブクラスから MediaExtractor のコンテナ タイプ毎のサブクラスを呼び出して処理。 ● MPEG4 の場合、 MPEG4Source と MPEG4Extractor ➲
23.
Parse 処理 ➲
内部では泥臭くバイナリデータをパース。 ➲ フレームのデータを取得しておく。 ● 画面サイズ、フレームレート、 RGB フォー マット、サンプリングレート、ビット深度等 デコード、レンダリングに必要な情報
24.
デコード処理 ➲
OpenMAX IL の API を使ってデコードする。 ➲ OpenMAX IL の使い方は Bellagio( http://omxil.sourceforge.net/)が詳しく、サンプ ルソースがある。 ➲ /external/opencore/doc にある開発ガイドにも説 明あり。 ➲ 以下 openmax_call_sequences.pdf から抜粋
25.
OMX Core 初期化
➲ OMX_Init で初期化 し、使用可能な Codec をコンポーネ ント名として取得す る。 ➲ コンポーネント名か ら機能(何の Codec か)を取得。
26.
OMX コンポーネント設定
➲ OMXGetHandle で コンポーネントハン ドルを取得する。 ➲ コンポーネントのパ ラメータ取得
27.
OMX 入出力バッファ設定
➲ フレームを入力し、 デコードされたデー タを出力するバッ ファを設定する。 ➲ この後、コンポーネ ントの状態を Loaded→Idle→Exe cuting にする。
28.
OMX のポート ➲
コンポーネントの入出力ポートを介してデ コード前/後のデータをやり取りする。
29.
OMX デコード処理 ➲
バッファにデータを設定した後、 EmptyThisBuffer でデ コード開始、 FillThisBuffer でデコードされたデータを取り 出し。
30.
Renderer 処理 ➲
OMX コンポーネントから取得したデータを出 力する。 ➲ 画像データは必要ならスケーリング、画像 フォーマット( YUV→RGB) 変換を行 い、 Surface を使って SurfaceFlinger で描 画。 ➲ 音声データは AudioTrack を使って AudioFlinger で再生。
31.
Stagefright の構成図 http://freepine.blogspot.com/2010/01/overview-of- stagefrighter-player.html
32.
Stagefright の構成 ➲
緑が DataSource、MediaSource と MediaExtractor。 ファイル/ストリームから フレーム(やメタデータ)をパースする処理部 分。 ➲ オレンジが OpenMAX IL の実装部分。 ➲ 水色がレンダリング処理部分。 ➲ 赤が全体を制御する機能部分。
33.
まとめ ➲
Android のマルチメディア処理はほとんど Native の Stagefright で行われます。 ➲ Stagefright には OpenMAX DL というオー プンスタンダードが使われています。
34.
最後に ➲
OpenMAX Dl の API は共有ライブラリとし て公開されているので、実は普通に JNI を 使った Android アプリから叩けます。 ➲ なので、 Android 標準で対応していない フォーマットの動画・音声も頑張れば HW デ コードをサポートした形で自作アプリから再 生できます。 以上です。
Jetzt herunterladen