インターネットラジオ「らじるれ郎」開発記録 (09)

こんばんは「らじるれ郎」です
1
戸田プロダクション @TodaProduction

うわー、なるほどー。超・極めてレアな不具合?を見つけてしまった。安易にボリュームミュートを PC Audio に統合した上で、これまた安易に VLC の実行中 (複数回) 動的廃棄~再生成を行なうと、こういう摩訶不思議な現象が発生するというわけか? これって VLC 側のバグみたいな気もするが、うーん? pic.twitter.com/pXVFw5qg8D

2019-12-26 11:20:26
拡大
戸田プロダクション @TodaProduction

色々やったが、結局 PC Audio 統合は諦めざるを得ないことが判った (コードも元に戻した)。VLC を使う限り、ボリューム制御とミュート制御は各プレーヤーで個別実行する必要がある。ほんの数キロバイト EXE サイズを小さくする目的で取り組んだ PC Audio 統合だったが、悪影響コストの方が高くついた。

2019-12-26 17:48:42
戸田プロダクション @TodaProduction

クリスマスイブからやってたVLCのビデオ出力先動的変更、昨夜19時時点では細かい微調整を除き「ほぼほぼ」完成した感触だった。しかし晩メシのあと、どこをどう変えたか?全然覚えてないのだが、突然あらゆる動作が変になって「ほぼほぼ」が「ボロボロ」になる…というドツボにハマってしまった。

2019-12-27 19:41:22
戸田プロダクション @TodaProduction

昨夜20時現在の不具合 1.一番ひどい時はチャンネル切替毎にハング 2.VLC動画をWeb窓出力中にチャンネル切替でハング 3.VLC再生中ミュート状態からチャンネル切替でハング 4.ビデオ出力先をWeb窓から外部窓に変更した時ハング   (ただし逆は問題なし) 信じられんほどの惨状…

2019-12-27 19:41:59
戸田プロダクション @TodaProduction

最初はVLC環境も疑った。先日 YouTube.lua 入れ直したし、そう言えばいつかの段階で 試しに VLC.Free を VLC.FreeInstance に変えてコケた直後から状況がおかしくなり始めたような気もしたので…。しかし、マシンをリブートしても VLC を再インストールしても状況は変わらなかった。

2019-12-27 19:42:55
戸田プロダクション @TodaProduction

イブの前日 PC Audio 統合を諦め個別プレーヤ制御に戻した…そのあと何をやったか?覚えてない。まれなハングが多少のウェイトで解決した経験はあったので、今回の怒涛のハングにもウェイトを入れまくって様子を見てみた。しかしその結果はウェイトが効く時もあれば効かない時もあって全然安定しない。

2019-12-27 19:44:21
戸田プロダクション @TodaProduction

不具合を分析すると、これらはすべて全く同じ処理ルーチン「TunerSTOP」の中でのハングだと判った。処理内の肝の部分は以下の2行のみ。 VLC.Audio.Mute := FALSE; VLC.PlayList.STOP; 不思議なのは、この処理はプレーヤ停止で必ず通る処理であり、全然問題ない場合もある…という点。

2019-12-27 19:45:19
戸田プロダクション @TodaProduction

同一処理を通ってハングする時としない時がある…のは大問題だ。ウェイトを増やせば一時的に改善するけど、また何かの拍子にハングしたりする。とにかく怪しいのは VLC.Audio.Mute := FALSE; の一行だが、別の VLC.Audio.ToggleMute は何百回やっても問題が発生しない。

2019-12-27 19:47:32
戸田プロダクション @TodaProduction

万策尽き果てた頃、VLC.Audio.Mute := FALSE; の直前に ShowMessage を入れて止めたら「絶対にハングしない」ことに気がついた。だから今まではウェイト時間を伸ばすことばかり考えていたのだが、ふと「ウェイト代わりに AppOnActivate を呼んだらどうだ?」と思ったらこれが大ビンゴ!

2019-12-27 19:48:35
戸田プロダクション @TodaProduction

結果的には TunerSTOP 内 VLC.Audio.Mute := FALSE; の直前に AppOnActivate(NIL); if VLConOleBASE then WaitTimePassAway(VLC_AXTLB_WAIT); という2行を入れたら、あれほどハングしまくりだった状況が完全に改善された。AlphaBlendValue と SetWindowPos 設定だけだが、なぜ有効?

2019-12-27 19:49:32
戸田プロダクション @TodaProduction

ウェイトを入れまくって様子を見ていた昨夜の最悪状態の時 (今朝の 午前2時過ぎ?) には VLC_AXTLB_WAIT は最大で 5000 にまで膨れ上がっていたが、最終的にはこの待ち時間はわずか 100 ミリ秒で安定している。ハングを防ぐためチャンネル切替ごとに5秒も必要になったとしたら、ホントに地獄だった。

2019-12-27 19:56:38
戸田プロダクション @TodaProduction

以上、後日のトラブル発生時に備えて一連の経緯を記録した。追試用に、ごく簡単なゴミプロ作ってハングを再現させようとしたら、アプリケーションがアクティブでも VLC.Audio.Mute := FALSE; がハングして追試の意味がなかった。何か根本的な間違いをしているのかも知れんがもう疲れた。

2019-12-27 19:57:06
戸田プロダクション @TodaProduction

Ayasa channel の「ヲタリスト Ayasa」分を片っ端からユーザーリストに追加した。タイトル文字列が長い曲がとても多いね。メニュー開いたら、まぁこうなるわな? pic.twitter.com/a3ixUTEo4x

2019-12-28 23:26:41
拡大
戸田プロダクション @TodaProduction

@booskanium すごく良いでしょ? ごく最近ハマっています。 以下のURLに、らじるれ郎 ver 1.42 用の追加リストを置いときますね (^_^)。 coara.or.jp/~tt/soft/rajir…

2019-12-29 14:41:42
戸田プロダクション @TodaProduction

@booskanium あ、そうそう、今現在 VLC で YouTube を聴く時は、古くなってる YouTube.lua を最新版に入れ替える必要があります (booskanium さんなら先刻ご承知済みでしょうけど)。 git.videolan.org/?p=vlc.git&a=s…

2019-12-29 14:49:24
戸田プロダクション @TodaProduction

らじるれ郎「環境設定」表示タブの中にある「最前面に表示する」か否か?のチェックボックス、 1.電源オフの時 2.電源オン、かつブラウザで再生中 3.電源オン、かつVLCを外部窓モードで再生中 以上3つ、どれかの状態の時だけ変更可能とした。条件に合致しない場合はその旨を淡色表示する。 pic.twitter.com/InzcNTdP8F

2019-12-29 10:52:15
拡大
戸田プロダクション @TodaProduction

くわぁぁぁぁぁ、そんな甘いもんじゃなかったか?(^_^;) 人生ホント何が起こるか判らんな…orz。

2019-12-29 13:24:10
戸田プロダクション @TodaProduction

今日も徹底的に VLC.Audio.Mute := FALSE; のテストを継続中。ウェイト入れたらハングは大幅に減ったが、それでも100回のうち1回くらいの割合でまだハングが発生する。どうも特定動画を視聴中のチャンネル切替でハングしやすい気もするが、ハング直後のリトライは成功するから困る。

2019-12-29 17:29:07
戸田プロダクション @TodaProduction

いっこだけ気になる点が見つかった。外部変数参照に変更してもう一度やってみる。 pic.twitter.com/TArTf7pjak

2019-12-29 17:38:02
拡大
戸田プロダクション @TodaProduction

もしかしたら当たりかも? 確証は持てないが、ハングしやすい (ように思った) 特定動画でもハングしない。とりあえずこのまま行ってみよう。 古人曰く「さわらぬ神に祟りなし」

2019-12-29 17:55:11
戸田プロダクション @TodaProduction

当たりじゃなかった (^_^;)。外部変数参照だと単純チャンネル切替時なら良いけど、ビデオ出力先動的変更時の TunerSTOP が出来なくなる。やむなく VLC 参照に戻す。 …ってことは、全テストやり直しだよ orz。

2019-12-29 23:31:49
戸田プロダクション @TodaProduction

ついに判ったぁぁぁぁ!! 単純チャンネル切替は完全OK、残る不安要素の原因は、VLCビデオ窓でファンクションキー表示状態からWeb窓を開く局に遷移する時、ファンクションキー表示を引っ込めるから駄目なんだ!! TunerSTOP と Align 変更のバッティング、ハング原因は2種類あったんだ!!

2019-12-29 23:55:50
戸田プロダクション @TodaProduction

【結論】 TVLCPlugin2 のインスタンスを OleContainer 上に載せた時には 1.VLC.Audio.Mute := FALSE; 直後に待ち時間が必要 2.VLC.PlayList.Stop; 直後にも待ち時間が必要 3.Stop 中の VLC.Align 変更はNG ただし親がなく宙に浮いたインスタンスなら待ち時間はゼロでもOK。

2019-12-30 01:59:10
戸田プロダクション @TodaProduction

【補足】 Align 変更がNG…という表現は正確ではない。Align 変更と言うより、Align は alClient 状態のまま、Stop 中に親のクライアント領域がサイズ変更されると駄目。

2019-12-30 02:10:04
残りを読む(55)

コメント

コメントがまだありません。感想を最初に伝えてみませんか?