english

TS viewer for Cloud Drive

Last Update: 2017/12/16

クラウドに保存した動画や音楽ファイルをストリーミング再生するソフト。
対応しているストレージは、Amazon drive, Google drive, Local file systemです。
再生できる形式はFFmpegがデコードできる形式ですので、一般的なフォーマットにはすべて対応しています。

TSファイル(MPEG-2 Transport Stream)は、UDPで送信できます。
この機能を使うと、TVtestVLC media player などのTSファイル視聴に適したソフトを使用して、クラウドドライブの動画をストリーミング再生できます。

CarotDAV互換 及び rclone互換 で暗号化することができます。このソフト上では透過的に操作できます。
暗号化したファイルでも、ストリーミング再生が可能です。

ファイルのアップロードやダウンロード、フォルダの作成などのファイル操作が可能です。
コマンドラインからアップロードできますので、バッチジョブで上げることも可能です。
ローカルとリモートのフォルダを指定して、一致しているかどうかチェックする機能があります。

スクリーンショット

screen shot screen shot command line screen shot player

download

ポータブル版
TSviewCloud_20171204a.zip

インストーラ版
TSviewCloud_20171204a_installer.zip

ソースファイル
GitHub https://github.com/lithium0003/TSviewCloud

過去のバージョン

このソフトは、LGPLv2.1でライセンスされたFFmpegのコードを使用しています。
使用しているソースコードは、GitHub https://github.com/lithium0003/TSviewCloud からダウンロードできます。
このソフトで使用しているFFmpeg+SDL2は、https://bitbucket.org/lithium0003/external-tsviewacd からクローンすることにより、Visual Studio 2017でコンパイルすることができます。
GitHubからTSviewCloudのソースをクローンした際には、コンパイル済みのモジュールが外部モジュールとして登録されています。

このプログラムは、Visual Studio 2017 c++でコンパイルされています。
Visual Studio 2017 の Visual C++ 再頒布可能パッケージが必要です。 インストールするバージョンに合わせてどちらかをインストールしてください。

このプログラムは、c# .NET 4.7でコンパイルされています。
システムにインストールされていない環境の場合は、 Microsoft .NET Framework 4.7.1 をインストールしてください。Windows10では既にインストール済みでした。

更新履歴

2017/12/03 : 1.1.0.1203
公開バージョン
Amazon drive, Google drive, Local file systemに対応
CarotDAV, rcloneの暗号化に対応
2017/12/04 : 1.1.1.1204
GUIが固まる場合があるのを修正
2017/12/04 : 1.1.2.1204
listviewの表示がおかしくなるのを修正

使い方

ポータブル版の中身は次のとおりです。
実行ファイルディレクトリの中身を任意の場所に配置してください。
ポータブル版を展開する前に、プロパティのインターネットからダウンロードしたファイルの セキュリティブロックを解除しておいてください。DLLをロードする際にエラーとなります。 インストーラ版の中身は次のとおりです。
64bitもしくは32bitを選び、初回はsetup.exeを実行してC++のランタイムと共にシステムにインストールしてください。
2回目以降は、msiファイルからインストールしてください。 実行ファイルのフォルダは以下のようになっています

TSviewCloud.exeを実行し、File->Connectからドライブに接続してください。
暗号化ドライブを使用する際は、基準フォルダを含むドライブを先に接続してください。

Amazon drive 認証時の注意

Amazon側のサーバの更新により、ブラウザコンポーネントがデフォルトのままではブラウザが古い旨の
警告が出て初回ログインができません。
エラーが出たら、本体を起動しなおしてください。

設定の保存

設定情報は、ポータブル版では実行ファイルと同じ場所に保存されます。
インストーラ版では%AppData%\lithium03\TSviewCloud以下に保存されます。

本体の設定情報はConfig/TSviewCloud.xmlに、各接続の情報とキャッシュはServers以下に保存されます。

らいせんす

TSviewCloud.exe, ffmodule.dll 本体, plugin以下
CC0 でお願いします。お好きにどうぞ。

FFmpeg
LGPLv2.1

SDL2, SDL_ttf
zlib license


もくじ

画面構成

2ペインで、左側にツリー、右側にリストビューがあります。
接続したサーバー毎に内容が表示されます。左側のツリーで選択して、右側のリストビューで表示をするという形式です。
アイテムの絶対パスがわかる場合は、上部のアドレスボックスから飛ぶことも可能です。

window info

右側のリストビューは、カレントフォルダ(操作対象のフォルダ)の内容を表示しています。
後述する検索結果もこのリストビューに表示され、操作対象とすることができます。

各種操作の実行

左側のツリーや、右側のリストビューを操作することにより、現在見ているカレントフォルダを切り替えて
操作したいファイルやフォルダを探して、実行するようになっています。

各種操作はメニューのRomoteから操作するほかに、右側のリストビューで右クリックすることに
よるコンテキストメニューからも行えます。

remote menu listview menu

移動とコピーについて

キー割当はCtrl+cにしてありますが、同一サーバ内での操作は移動になります。
別のサービスへの移動については、端末にダウンロードしてアップロードする操作が自動的に行われ、コピーされます。
(AmazonからGoogleや、RcloneCryptから非暗号化ドライブや別の暗号化ドライブへのコピー等)

ドライブデータのキャッシュ

ドライブのデータは、ローカルにキャッシュされています。
外部で変更が行われた際は、その変更が反映されません。

更新したいフォルダにおいて、Reload(F5)を押すとサーバーに読みに行って更新されます。

file menu

メニューのClear selected drive cacheを選択すると、現在の選択ドライブの、
Reload all drivesを選択すると、全てのドライブの更新が行われます。

アップロード

アップロードボタンを使用するか、D&Dによりアップロードできます。
ファイルをエクスプローラから貼り付けることもできます。

uploadアップロードボタンは、そのまま押すとファイルの選択ダイアログが、
Ctrlを押しながら押すとフォルダの選択ダイアログが出ます。

同名ファイルのスキップ

config general

メニューの、Configure->Generalから設定ダイアログを出し、Upload conflict behaviorの3つの選択肢から
同名ファイル存在時の挙動を制御できます。

ダウンロード

右側のリストビューで、ダウンロードしたい項目(複数可)を選択して、
downloadダウンロードボタン、または、Download Item(s)を実行してください。

右側のリストビューで選択してエクスプローラにD&Dするか、Copy(Ctrl+C)でクリップボードに送りエクスプローラに貼り付けることもできます。

FFmpegによる再生

FFmpegとSDL2のモジュールを利用して、動画や音楽をダウンロードしながら再生できます。

右側のリストビューで、再生したい項目(複数可)を選択してください。
play再生ボタンを右クリックし、FFplayを選択した状態でボタンを押すと再生ウインドウが開き再生されます。

screen shot player ffplayer config

音楽ファイルを再生した場合は、同名の画像ファイルがないか調べ、あればそれを表示します。
カバー表示などに使用できます。

チャプターがついている動画ファイルは、チャプターで飛べると思います。
FFmpegが認識していない場合は動作しません。

FFmpegで認識できる字幕がついている場合には、表示できるように作ったつもりです。
サンプルがないのでテストが甘いですのでバグ報告よろしくお願いします。
画像形式、text形式、ass形式に対応しましたが、ass形式では装飾は解釈されません。
フォントがないと表示できませんので、text、ass形式の字幕の場合は表示したい文字を含む
フォントを設定から指定しておいてください。

エンコードの設定によっては、ファイルの前後ろと飛びまくってデコードしなくてはならない動画もあります。
このようなものは、一応再生できますがバッファにすべて載らないと再生できないので、ダウンロードするのと
変わりなくなってしまいます。(divxの一部のフォーマット)

動画側のタイムコードがちゃんと乗っていない、mjpegなどはちゃんとシークできません。
これはFFmpegがエラーを吐いてしまうためです。

番組枠が複数番組でひとつになっているファイルをそのまま保存しているような場合
録りためた特定の番組のみ連続再生したい場合があると思います。
その場合は、StartSkipTimeと、PlayDurationを使います

例えば、枠の開始30分後から15分間の番組を再生したい場合は、
StartSkipTimeに、0:30:00
PlayDurationに、0:15:00
と入力してから、再生を実行することにより、読み込み後30分のところにシークし
15分で再生が打ち切られて次に行くようになります。

音量調節は、Insert/Deleteで行う音量調節の他に、FFmpegのvolumeオーディオフィルタによる
ソース自体の音量調節(F1/F2)があります。
動画の音が小さい場合、volumeフィルタによる音量調節で大きくする必要があります。
実験的に、dynaudnormオーディオフィルタを入れました。(F4)
このフィルタを使うと、動的に音量が自動で調節されます。
しかし、約15秒間の先行した音声データが必要となるため、ダウンロード速度によっては
切り替え時に少し止まることがあります。

UDP ストリーム送信

MPEG TS ストリームを、ダウンロードしながらUDPストリーミングできます。

右側のリストビューで、再生したい項目(複数可)を選択してください。
play再生ボタンを右クリックし、TS sendを選択した状態でボタンを押すと再生ウインドウが開き再生されます。

MPEG TSのストリームに挿入されている、時間情報は5秒おきなので
(それより細かい時間はちゃんとパケットを解析する必要があり面倒なので)
あまり詳細なシークはできません。だいたいこの辺に飛ぶものと思って使用してください

番組枠が複数番組でひとつになっているファイルをそのまま保存しているような場合
録りためた特定の番組のみ連続再生したい場合があると思います。
その場合は、StartSkipTimeと、PlayDurationを使います

例えば、枠の開始30分後から15分間の番組を再生したい場合は、
StartSkipTimeに、0:30:00
PlayDurationに、0:15:00
と入力してから、再生を実行することにより、だいたいその辺から始まり、
だいたい15分で再生が打ち切られて次に行くようになります。

パケットの送信レートは、だいたい計算通りに飛ばすようにしています
こちらの環境では、TVTestで受信するとうまくいきました。
VLCの場合は、受信が安定しない場合があります。
クロック同期を調整するとうまくいくかもしれません。

TSsend config

環境によっては、Configを選び、パラメータを微調整する
必要があるかもしれません。
UDP send packet size : 一度に送信するパケット数
UDP send delay add : 一度の送信につき追加で入れるウエイト
Long term bitrate control offset : 時間ベースの送信コントロールで、先行させる時間
Bitrate caluculation by
UDPsend : 送信ビットレートの計算に何回平均を使用するか
TOT : ストリームのビットレートの推定に、TOT(5秒おき)何個分を使用するか

TVTestなどの再生ソフト側で、ストリームのクリアやバッファのクリアが
ショートカットキーによって可能な場合、設定するとシークやファイルの
切り替え時に障害が少なくなります。
Send a key to other Application when stream changedの
keyの横のテキストボックスにカーソルを合わせ、何かキーを押すと
送信するキーコードが登録されます。
Application Nameに、再生ソフトのイメージ名(実行ファイルの名前)を
入力してください。
再生ソフトが起動していれば、シークやファイルの切り替え時に
ソフトに内部的にキーを押したことにする処理が行われます。

search

選択フォルダ以下や、特定のドライブ、全てのドライブに検索をかけることができます。
部分一致検索のほか、正規表現による検索も可能です。

search icon検索ボタンまたはメニューのSearch items(Ctrl+F)から検索ダイアログを出します。

何も入れずにSearchボタンを押すと、検索対象の全てのアイテムが対象となります。
結果はShow Resultボタンを押して、リストビューに表示できます。

ファイルのみ、フォルダのみの検索や、作成日時(アップロード時間)や
更新日時による検索もできます。
サイズによる絞り込みもできます。

ローカルのファイルとの一致照合

リモートのファイル群が、ローカルのファイルリストと一致するか照合する機能があります。
たくさんのファイルを上げたときに、すべて上がっているかどうかを調べることができます。

AB icon比較ボタンを押すと、比較用ウインドウが開き 左側にローカルのファイル、右側にリモートのファイルを選択し比較します。

LocalRemoteDiff window

左側のローカルの方には、Add Local Fileボタンを用いてファイルを追加することや、
Add Local Folderボタンを用いてフォルダのしたのファイルをすべて追加することができます。
また、エクスプローラからD&Dで追加できます。

右側のリモートの方には、現在選択している項目をAdd Remote Itemで追加できます。
フォルダが指定された場合は、その下のファイルを再帰的に追加します。
リストビューから項目をD&Dで追加することが可能です。

Keep treeチェックボックスがオンの場合は、ディレクトリ構造を保ったまま比較します。
オフの場合は、ファイル名のみで比較します。

Hash calculate を MD5 にすると、比較する際にMD5ハッシュも用います。
ローカルのファイルに対して、MD5ハッシュの計算が行われます。
(リモート側でハッシュの計算が行われているドライブに限り比較できます)

match window

比較結果は、別のウインドウに表示されます。
Local Only Filesには、ローカルにのみ存在するファイルが
Remote Only Filesには、リモートにのみ存在するファイルが
Both but Unmatch Filesには、両方に存在するがファイルサイズ(またはMD5ハッシュ)が異なるファイル
Both Matched Filesには、両方に同じファイルが存在するものが挙げられます。

Local Duplicate FilesとRemote Duplicate Filesには、ファイル名のみで比較した際に
同じファイル名で複数のファイルがある場合に、その内訳が表示されます。

リモート同士の一致照合

AB icon比較ボタンをCtrlを押しながら押すと、リモート比較用ウインドウが開きます。

ABDiff window

左と右に、比較したいリモートのフォルダをそれぞれ追加して比較を行います。

コマンドラインからの起動

コマンドラインから、引数をつけて起動するとCUIモードで起動します。
CUIモードでは、一覧表示およびアップロードとダウンロードができます。

usage
        help                                      : show help
        list (REMOTE_PATH)                        : list item
                --recursive: recursive mode
                --hash: show hash
                --cache: no reload, list on cache
        download (remotepath) (localpath)         : download item(s)
        upload (localpath) (remotepath)           : upload local file or folder

一覧表示

TSviewCloud list
TSviewCloud list GoogleDrive://*
TSviewCloud list GoogleDrive://**/*.jpg

引数に、一覧表示するリモートパスを指定します。
フォルダの内容を一覧する場合は、最後に*をつけてフォルダ内すべてを指定してください。
--recursiveオプションを付加して、/* のように指定するとそのフォルダ以下を再帰的に列挙します。
--hashオプションを付加すると、ファイル名と共にサーバの報告するMD5ハッシュを表示します。
--cacheオプションを付加すると、ローカルのキャッシュのみを検索し、サーバーに問い合わせしません。
パスの途中に**を挟むと、階層をまたがって検索することができます。

日本語環境のコマンドプロンプトは、デフォルトでShift-JISとなっています。Unicodeなファイルは文字化けします。 リダイレクトでファイルにリストを取ろうとしても、Shift-JISとなってしまいます。
これをUTF8で出力するようにするには、次のようにコードページを変更してください。

C:\> chcp 65001
C:\> TSviewCloud list --recursive --cache *://* > drive.txt

コマンドプロンプトのコードページをUTF-8にした場合、デフォルトでは日本語フォントがないフォントが指定されており 日本語が表示できません。 プロパティー→フォントからMSゴシック等を指定しておくと表示できるようになります。

アップロード

TSviewCloud upload c:\test\test.txt GoogleDrive://Documents/

引数に、アップロードするローカルファイル、アップロード先のリモートパスの順に指定します。

同名チェックは、GUIで指定されているものに従います。

ダウンロード

TSviewCloud download GoogleDrive://Documents/test.txt d:\download\tmp.txt
TSviewCloud download GoogleDrive://**/*.m2ts d:\download\

引数に、ダウンロードするファイルののリモートパス、ローカルの保存パス順に指定します。

一覧表示と同様に、複数のファイルをワイルドカードで指定できます。
ディレクトリが含まれる場合は、ディレクトリを作って構造を保って保存されます。

暗号化

AES-256 CBCモード(CarotDAV互換) または、XSalsa20-Poly1305(rclone互換) で任意のフォルダを暗号化することができます。
以前に実装していた、CTRモードはこのアプリケーションでは実装していません。

暗号化のプロトコルについては以下を参照ください。

CarotDAV互換
rclone互換

暗号化の方法

通常のクラウドストレージに接続するのと同様に、File->Connectから、CarotCryptまたはRCloneCryptを選択してください。
接続の名前を入力し、暗号化する対象の親フォルダを指定します。事前に暗号化したいサービスをマウントしておく必要があります。
次に、パスワード等の入力画面が出ますので、間違えないように入力してください。
既に暗号化済みのデータが有る場合も、同様の手順でマウントし、閲覧することができます。

暗号化済みのデータがあって、パスワード等が一致しない場合は単純にマウントできず、ファイルが見えません。
ファイル名が暗号化されていない暗号化方式を選択した場合、ファイルは見えますがデータは壊れた状態に見えます。
この場合、正しいパスワードでマウントし直せば正しくアクセスできます。

パスワードは、デフォルトでは接続情報共にローカルに難読化された状態で記録されます。 この状態は、単純にはパスワードは見えませんがソースファイル上に暗号化の鍵があり、 ローカルの接続情報にアクセスできる攻撃者に暗号化ファイルシステムのパスワードが読み取られるおそれがあります。
さらに安全にするためには、接続情報を暗号化して保存し、マスターパスワードを用いてください。 マスターパスワードを用いたうえで接続情報を暗号化すれば、マスターパスワードなしには一切復号できません。

config general

メニューのConfig->Generalから、Server ConfigurationのEncrypt config dataにチェックを入れ、 Change MasterPasswordボタンを押してマスターパスワードを変更してください。

マスターパスワードを設定すると、起動時に入力を求められます。
CUIモードでは、リダイレクトで与えてください。

AES-256 CBCモード(CarotDAV互換)

CarotDAV互換モードは、CarotDAVの暗号化について で公開されているCarotDAVと互換性を持たせた暗号化方式です。
非常時に、他のソフトから暗号化状態でダウンロードしてローカルで復号するには、DecodeCarotDAVをご利用ください。

CarotDAV互換モードでの暗号化は常にファイル名が暗号化されます。
暗号化アイテムの名前は、"^_"、":D"、";)"、"T-T"、"orz"、"ノシ"、"(´・ω・)"の7種類から使用者が選んだもの
で始まる英数字の名前となります。

CarotDAV互換モードで暗号化されたファイルは、ダウンロード時にハッシュチェックが行われます。
破損している場合エラーとなり、ダウンロードできません。
ストリーミング再生時は、ランダムアクセスのためハッシュチェックは行われません。

XSalsa20-Poly1305(rclone互換)

rclone互換モードは、rcloneと互換性を持たせた暗号化方式です。
https://rclone.org/crypt/に仕様があるほか、ソースによるとGo言語の https://godoc.org/golang.org/x/crypto/nacl/secretbox を利用しているようです。内部では、XSalsa20-Poly1305の暗号化方式を使っています。
このプログラムでは、そのソースよりC#/C++ CLIによる実装を行いました。

rclone互換モードでは、パスワードとソルト(第2パスワード)が必要です。両方一致しないと復号できません。
ファイル名の暗号化は任意です。暗号化しない場合、フォルダはそのまま、ファイルは".bin"が最後につきます。
暗号化した場合、英数小文字の羅列になります。

rclone互換モードで暗号化されたファイルは、ダウンロード時にブロック毎にハッシュチェックが行われます。
破損している場合はエラーとなり、ダウンロードできません。 ランダムアクセス時にもハッシュチェックされます。


Windows10 pro で問題なく動作していますが、他の環境では動かないかもしれません。
本番で使用する前に、テストフォルダやテストファイルで想定の動作をするか確認してから
使用してください。

コンパイルは Visual Studio 2017 で行いました。

この物置のプログラムはあるがままの形で提供しています。
無保証ですが、不具合やバグ、機能追加について何かあれば
contact@lithium03.infoもしくは某巨大掲示板の
クラウドストレージ関連スレ周辺に分布していますので教えていただければ時間のあるときに直します。