前回のワンセグ的サブストリーム対応が終わっての続き。
・スキップ(±15秒、±1分、±3分)ができるようにする(済)
・ジューム再生の対応(済)
・ワンセグ的サブストリームが再生されるコンテンツの対策(済)
・音声多重(デュアルモノ)の切り替えの対応(今回はこれと、)
・音の出ないコンテンツの対策(これ)
音声多重(デュアルモノ)の切り替えの対応
VLC(for Android)には音声ストリームの切り替え機能はあるが音声多重の切り替えは無い。このままだと音声多重のコンテンツは主福の両方の音が出て何を言っているかわからない。
コードを調べてみると、楽観的予想通りnative側には音声多重の実装があった。(例にもれずここにたどり着くまでが長かった。。。)
しかし、UIとは繋がってないし、JNIのIFもない。
VLCの全体像が分かってないことと、自動生成されるIF定義のファイルがあったりするので、新たにJNIにIFを追加するとはまりそうな予感。なので既存のストリーム切り替えのIFを使って音声多重の切り替えをするようにした。
あと、UIを追加するのもめんどくさそうだったので、ダイアログで切り替えるようにした。
UI(VideoPlayerActivity.kt)はkotlinで書かれてて、馴染みが薄いのでJoyPlotさんのダイアログのコードをそのままコピペで使わせて頂いた。感謝。
でできたのがこんな感じ。
実際のところは、native側の音声多重の設定を変えても音声に変化がなく原因究明に結構時間がかかった。再生中に切り替えても動かないだろうという予想はしてたけど、音声だけ再スタートさせるIFがどれなのかかわからなくで悩んだ。。。
音の出ないコンテンツの対策
再生開始時に音が出ないコンテンツがある。
まだ原因を調べてないが、ちょっと見た感じでは正しいESを選択していて、他のコンテンツと変りなさそうなんだけど。。。
とりあえず、再生開始後にストリーム(VLCの表記ではトラック)切り替えをすれば出ることが分かったので後回し。
使い方/仕様
音声多重の切り替えのリモコンボタン割り当ては下記の通り。(例のごとく10キーでも使えるようにしてある)
・字幕ボタン:音声切替ダイアログを表示(10キーの*)
ダイアログが表示されたら、ステレオ、主音声、副音声のどれかを選択してOKを押すと1、2秒後に切り替わる。
(VLCの字幕切り替えは音声切替と一緒に出てくるので、このボタンの割り当てを変更した)
選択状態は記憶しないので再生するたびに切り替えが必要。
切替中はミュートしているが解除のタイミングがいまいちな気がする。対処は後回し。
音が出ないコンテンツはオリジナルの機能のストリーム(トラック)切り替えで、いったん他のストリーム(トラック)を選択するか、無効にしてから再度選択すると音が出る。
コード
スキップ対応と同じく整理してから。。。
APK
バージョン管理のために別記事に移動した。
今後
とりあえず、基本的なMPEG2-TSは再生できるようになったが、ここまでやってきて思うこと。
・VLCの内部構成を理解するのは自分には難しいし、参考になる情報を見つけることができない。
・nativeでデバッガ使いたいがドキュメントに書かれてるフォルダは存在しないからはまりそう
・スキップ、ジュームの時間精度を上げたい。
・ラムダ式が苦手。というかわからないことが多い。ラムダでなくとも1行に詰め込まれたコードは苦手。
コードの整理が憂鬱。年末から実験コードを入れたりしながらチョコチョコやってたのでどこを何の目的で変えたか覚えてない。。。diffとっても思い出さない気がするので機械的に処理するしかないかと思ったり。
VLCの気持ちを理解せずに改変しているので適正な対応ではないと思うし。
とは言え、テレビ付属のプレーヤよりはVLCの方が使い勝手が良いのと、自分好みに変更できるのでVLCありがとうという感じ。
IV-P100と比べると時間精度が大きく劣ってるところは何とかしたいところ。
あと、途中まで見てるものはコンテンツリストでわかるようにしたい、コンテンツリストのスクロール速度が遅い、コンテンツリストのソートを変えても覚えてくれない、後回しにした音声関連などの不便に感じるところも残ってる。
ちなみにメインで使っているDMSはmediatombの0.11.0。
しばらくは運用しながら次に何をするか考えようと思う今日この頃。
気が向いたら感想をお願いします。(ログイン不要、ボタンを押すだけです)