どんぶらアニマル さんぽ道

CBR250RR(MC22)とNSR80(HCO6)とAPE50(AC16)を中心とした備忘録。

TSを(実用的に)再生できるようにVLCを改造:レジューム再生の対応

 前回のスキップ対応が終わっての続き。

・スキップ(±15秒、±1分、±3分)ができるようにする(済)
ジューム再生の対応(今回はこれ)
・ワンセグ的サブストリームが再生されるコンテンツの対策
・音声多重(デュアルモノ)の切り替えの対応
・音の出ないコンテンツの対策

 
VLCでTSのresume再生

ジューム再生の対応

ネットワーク越しのMPEG2-TSのジュームができないのもdurationが取得できないためなので、これも簡易的にシークバーを使った方法を実装してみる。
 
実装の考え方は簡単で、前回のスキップボタンで対応した方法を使って、再生再開時に前回の再生停止時に保存された時間からシークバーの位置を割り出してそこにシークするだけ。
 
再生開始時は、時間がほぼ0の位置になっているので、そこで1ステップあたりの時間を算出すると誤差が大きくなる。よって一旦シークバーの50%位置にシークして、その時の時間を取得し、コンテンツの50%の位置でのステップ数を算出する。(この間の音声はミュートした。映像も非表示にしたいけど後回し)
 
出来てしまうと簡単だけど、VLCの内部ではduration(実際の変数名はlength)が0または-1の場合にはいろんな処理をすっ飛ばすようになっていて、そもそも再生停止時に時間が保存されないところからの対処が必要でかなり面倒だった。他の対応に比べてダントツにめんどくさかった。(途中で何日も放置しなければならないこともあって、前回何やってたか思い出せなかったりしたことも面倒になった原因かも)
 

使い方/仕様

特に意識することなく、標準のジューム機能と同じに使える(はず)
 
VLCには以下の設定をしておく。
「設定」→「ビデオ」→「高速シークを常に使用」をオン
「設定」→「ビデオ」→「再生していたビデオを再開」は必須ではないが「確認する」がおすすめ
 
ジューム再生時は前回の停止時間の15秒前から再開する。
前回の再生停止時間が60秒未満の場合は先頭(0秒)から再生する。
最後まで再生しても次回の再生時にジューム動作をする。(最後まで再生したら情報を削除したいが後回し)
 
コンテンツによっては再開位置が1分位ずれることがある。
 

コード

スキップ対応と同じく整理してから。。。
 
 
 
気が向いたら感想をお願いします。(ログイン不要、ボタンを押すだけです)