技術的ひとりごと(備忘録)

いろいろな備忘録的な何か

TSファイルのエラーチェック by VLC Player

ドロップ発生などにより、うまくエンコード出来ないTSファイルが出来た場合は、修復をかける必要がある。

エラー修復用ツールとして出来が良いのは、VLC Player になるとの情報をを得たのでいろいろ試してみたところ、以下の様なコマンドでファイルを渡せば良さそうな感じになった。

vlc.exe -I dummy "ソースファイル" --sout-all --sout-ts-es-id-pid --sout=#std{access=file,mux=ts,dst="出力ファイル"} vlc://quit

オプションの意味(互換とマニュアル斜め読みに基づく解釈)

  1. -I dummy
    • "Disables the graphical interface" との事なので GUI 操作を廃するためのオプションかな。
  2. vlc://quit
    • "Quit VLC after transcoding" との事なので 処理終了時にVLCを閉じるためのオプションかな。
  3. --sout-ts-es-id-pid
    • 出力ファイルのメタデータにPID情報を埋め込むためのオプション。
    • この設定を入れないと、PIDが固定の値(videoが68, audioが69 など) に置き換わってしまう。
    • 自分の環境だと、IDがずれると他のバッチの動きに影響が出るので必須のオプション。
  4. --sout=#std{access=file,mux=ts,dst="出力ファイル"}
    • VLCに渡した動画データを TS動画(エラーがない状態)に変換した上でファイルに出力する。

エンコ出来ないファイルが見つかるたびに修復をかけるのもめんどくさいので、録画終了時に毎回このバッチで修復をかけようかとも思ったけど、修復前後のファイル両方を抱えるほどストレージに空きがないので断念。修復前ファイル消すのも怖いし。

参考URL

自宅鯖用 ESXi + FreeNAS のバックアップ自動化メモ

ねらい

  • 意図しないデータ破棄に対するリストア手段を確保するため、FreeNASの領域のスナップショットを取る
  • 仮想サーバのバックアップを自動化する

実装案

  • 日次
    • ESXiに以下のジョブを登録
      • AM05:00にESXi上で全VMのスナップショットを取る(バックアップモードに切り替えるイメージ)
      • AM08:00にESXi上で全VMをスナップショットを削除する(バックアップモードを解除するイメージ)
      • ESXi本体のCronに仕込む
    • FreeNASに以下設定を登録
      • FreeNASの各Volに対してスナップショットの取得設定を追加
        • 毎日6:00に取得
        • 保持期間は6ヶ月(FreeNAS上のデータは削除しない前提なのであふれるまで取る)
        • 割合は10%とか、空き容量を考えて適当に
  • 月次、定期ジョブ
    • ESXiに以下のジョブを登録
      • snapshotのデータをFreeNASのmonthlybackupフォルダにコピー
        • 日次スナップショット領域を汚さないように別ボリュームに逃したい。
      • フォルダ階層ごとまるっとコピー
      • AM09:00~12:00の時間帯にコピー
      • ESXi本体のCronに仕込む

ルータを入れ替えたらWindows8.1の接続先ネットワークが切り替わり、ファイアウォールが最強設定に…

ルータの入れ替えを行ったら、ルータの配下に接続しているWindows8.1 PCに対して通信(リモートデスクトップやらPingやら)ができなくなる現象が発生。問題のPCに直接接続すると画面が正常に表示され、そいつから外部への通信は問題なく出きた。

よくよく調べてみると、接続先ネットワークの種類が「パブリックネットワーク」になっていてこれが原因と気づく。これが原因で、ファイアウォールが最強の設定に切り替わっていたもの思われる。。。


下記のページを参考にして、プライベートネットワークに切り替えることで、問題PCへのリモートデスクトップ接続ができるようになり解決した。

──────────────────────────────────

Windows 8.1 プライベートとパブリックネットワークの切り替え方法
──────────────────────────────────

しかし、これは、手順複雑すぎのような気がする。何故コンパネから直接いじれないんだ…。
そもそも、ルータ入れ替えただけで、ネットワークの種類を変えないで欲しいんだが。
警告の表示ぐらいで止めろよ。個人PCならまだしも、業務用に使ってるPCでこれ起きたら大惨事じゃないか?

あと、今回繋げなくなったマシンは、リモートデスクトップ接続による運用が前提で、モニタもマウスもキーボドもつないでなかったから、切り分けに入るまでに相当時間を奪われたのも辛い。。。

NETGEAR EX6100 導入メモ

NETGEARのエクステンダEX6100を購入してみた。動作確認まで完了したが、わかりづらい仕様が1点あった。

EX6100から無線親機に通信を飛ばす過程でMACアドレスの書き換えが発生する模様。ベンダーコードの部分が「02:0F:B5」に置換されていた。

  • NETGEARのベンダコードっぽい。

この仕様があるので、無線親機でMACアドレスフィルタを実装している場合は、変換後のMACアドレスを許可リストに追加する必要がある。

  • ちなみに、これまで使用してたPLANEXのmzk-mf300nの場合は、中継する通信のMACアドレスをもれなくmzk-mf300nのMACアドレスに置換する動きを指定していたので、mzk-mf300nのMACを許可するだけで済んでいた。

変換後のアドレスはEX6100の管理画面にログインして『管理画面 > プロファイル > メンテナンス > 接続デバイス > バーチャルMACアドレス列』にアクセスすることで確認できる。

管理画面のヘルプにも以下の記載があるが、あまり強調されてないので気づきづらい。

  • バーチャルMACアドレス:これは、ルータから見たワイヤレスデバイスのMACアドレスです。エクステンダーに接続されたすべてのデバイスのMACアドレスは、デバイスからルータの通信が行われる際にバーチャルMACアドレスに変更されます。

EX6100を入れたけど、親機に対して通信ができないという人がいれば、この点を確認してみると良いかと。

無線LAN⇔有線LANコンバーターの構築に失敗

部屋AのLANと部屋BのLANを接続する用途でPLANEXのmzk-mf300nを利用していたが、機器のLAPポートが100BASE-Tで嫌になった。
Ubuntuを突っ込んだNUC(1GbE搭載)が余っていたので、こいつで同じことができないがいろいろ試してみたが、結論としては無理そうなことがわかった。

  • デフォルトの設定だと、無線インタフェースと物理インタフェースをブリッジさせることができない
  • iw dev set 4addr on コマンドを実行すると、無線インタフェースをブリッジに追加できるようになるが、これをやると wlanインタフェース が親機に繋がらなくなる。ざっと調べた限り、WDSの仕組みが悪さをしているらしい。
  • 半日ぐらい調べたが、無線LANエクステンダーちっくな仕組みを作れる術は見つからなかった。
  • hostap 入れれば有線LANと無線LANのブリッジができるよという鬼才も見受けられたが、これは該当サーバを無線LANに仕立てる方法なのでやりたいことが違う。
    • 自分がやりたいのは以下の通り。
      • wlan0 は 無線LAN親機に無線で接続。
      • eth0 は 部屋X のスイッチに接続。このスイッチの先には部屋Xに設置されている機器が接続。
      • wlan0 と eth0 をブリッジさせ、部屋Xの機器から無線LAN親機の配下に直収されている機器にアクセスできるようにしたい。

※2014/11/05 タイトルが誤解を招きそうだったので改題。

Windows共有フォルダ上の動画を直接再生するとバッファリングが頻発する問題の回避策

共有フォルダの上においた動画を再生すると再生がブチブチ途切れる現象が発生するということで、いろんな方法を試してきて、DLNAに頼るしか無いかなという結論を出したのですが、他にも安定化させる方法が見つかった。

  1. 安定化方法
    • 『Explorer』を介さずに動画を再生する。
  2. 具体的なやり方
    1. PowerShellなど使って、動画ファイルのフルパスのリストを作る。

# スクリプト実行時刻
$date = Get-Date -Format "yyyyMMddHHmmss"

# 出力ファイル名
$csvDir = CSV出力先となるディレクトリのパス
$mp4list = Join-Path $csvDir "mp4list_$date.csv"

# .mp4 ファイルの検索対象ディレクトリを列挙
$mp4dirs = ( "パス1","パス2",… )

# ファイルリスト出力
Get-ChildItem $mp4dirs -recurse -include *.mp4 | select-object name,fullname,Length,CreationTime,LastWriteTime | Export-Csv $mp4list -Encoding Default

  1. 効果
    • 上記のやり方で動画を開くと、VLCのバッファリングの発生頻度が激減する。

Windows標準のExplorerやasr.exeで開いた時は、数秒間隔でバッファリングが発生していた。

クライアントPCのSMBバージョンを下げたり、VLCのバッファを大きくしたり、小さくしたりと試したりといろいろ試したが、大幅な改善はなく、諦めていたのだが今回の方法で相当に改善された。

エクスプローラーのAPI経由でCIFSアクセスする場合と、ExcelAPI経由でCIFSアクセスする場合とで、内部処理が変わるんだろうか?

Excelの場合も、普通にエクスプローラにファイルオープン命令を渡しているだけだと思ったのだが、実際は違うのかもしれない。謎である。

64bitなWindows上で32bitアプリを実行し、そのアプリからPowerShellのスクリプトをコールする際の注意点

TvRockからコールしているスクリプトを入れ替えようとしていて、従来、.bat で実行していたものを .ps1 に切り替えようとしたところ、スクリプトの実行許可がないというエラーに遭遇。

.ps1 の実行許可はとっくの昔に適用していたのでアレ?っとおもったが、64bit 環境の場合、64bit 版の PowerShell と 32bit 版の PowerShell が別個に存在していて、それぞれに許可を挙げないと駄目っぽいことがわかった。

以下整理。

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

X:\TvRock>powershell -File "スクリプトフォルダ名\スクリプト名.ps1"
スクリプトの実行がシステムで無効になっているため、ファイル スクリプトフォルダ名\スクリプト名.ps1 を読み込めません。
詳細については、「get-help about_signing」と入力してヘルプを参照してください。
+ CategoryInfo : NotSpecified: (:) []、ParentContainsErrorRecordEx
ception
+ FullyQualifiedErrorId : RuntimeException

X:\TvRock>