2016-09-22 (木)
1年半くらい前にやろうとしてた,AndroidでSorenson H.263の再生を試みるやつをもう一度やってみる.
前回は大分手を抜いて実装していたのを,真面目にPicture Headerを見てH.263v2(H.263+)へ変換するようにしてみる.
Sorenson H.263から素のH.263への変換は特定のエンコード条件でないとできないけど,H.263v2 であればAICもUMVも使えるはずなのでビットストリームのフォーマット変更だけで,再生できる(はず).
前回は解像度違うせいで崩れてしまっていた映像が出るようになった.が,やっぱり,INTRA形式のMBがデコードできていない雰囲気でまともに再生できない.Iフレームの周りの処理はは複雑なパラメータは無い気がするので,あとでffmpegあたりのデコーダも読んでみるか...
どうでも良いですが,H.263の亜種の名前,とても分かりにくい.FLV1 = Sorenson H.263 = Spark H.263 とか.
* [Android] VideoView内のSurfaceのリサイズのタイミング
アプリのレビューに,動画が小さく表示されるようなことが書いてあって,なんか昔そんなことあったなと思いだした.
http://www21.atwiki.jp/memodroid/pages/26.html
起きていた現象は,おそらく端末のOrientationが変わったとき,その後実行される動的にViewのレイアウト計算している処理でVideoViewが持ってるSurfaceのサイズが変わってくれていないというもの.
VideoView使うのやめたいけど今更感あるので,onConfigurationChanged内でVideoViewのLayoutParamsをセットしなおすことで逃げる.
手元の端末では起きないのでダメ元で適当な実装入れたら直った(らしい).
最近の端末はVideoView(というかSurface)の挙動素直なやつが多いけど,まだ微妙な感じのやつもあるっぽいな.