Hatena::ブログ(Diary)

かーねる・う゛いえむにっき このページをアンテナに追加 RSSフィード Twitter

2009-04-25

[][][][][]ニコニコ動画キャッシュを皆で共有するソフト「Genkidama」をリリースしまふ。

なにこれ

ニコニコ動画動画ファイルキャッシュファイルを皆で共有しあってより快適にニコ動を楽しめるソフトです。

これで一般会員でも回線混雑時に通常画質で動画が見れるかもしれない・・・!って訳です(誰かが以前その動画を通常画質で見ていてくれれば、の話なんだけどね)。

えいさあさんのNicoCacheベースP2P技術を用いてキャッシュ情報をGenkidamaを起動しているPC同士で共有する仕組みを追加してあります。

えいさあさん良いプログラムソース公開してくれて感謝です。

動作環境

Java 6.0が動くシステム(Windows, Linuxで動作確認済み)

たぶんMacでもおk

ルータグローバルIPが振られていて、UPnPポート解放出来る必要あり。

使い方

Windows

NicoCacheの設定例があるので、こちらを参考にすると良いです:

http://www.oshiete-kun.net/archives/2007/09/nicocache.html

http://d.hatena.ne.jp/dangerous1192/20071009/p1

http://wayohoo.com/nicovideo/tech/nicocache_nl.html

http://www.smallstyle.com/20071009.html

その他

NicoCacheをMacで使う場合の設定例。たぶん参考になると思います:

http://d.hatena.ne.jp/oikea/20071203/1196657398

ダウンロード

http://syuu.dokukino.com/Genkidama_001.zip

※追記

消された動画キャッシュが頑張れば見えてしまう件は、不可能にする事にしました。

修正版のリリースと同時に前のバージョンは使えなくさせて頂きます。

#ブートストラップサーバを止めるので立ち上がらなくなります。

http://syuu.dokukino.com/Genkidama_002.zip

動作原理

Genkidamaでは分散ハッシュテーブル(DHT)というP2P技術を使ってキャッシュ情報PC間でやりとりします。

というか、このプログラムは分散ハッシュテーブルを用いたP2Pアプリの実装がやってみたくてカッとなって作った今は公開している、なんですが。

分散ハッシュテーブルというのは、キーとデータのペアの情報を繋がりあったコンピュータ間で記憶検索する仕組みの事で、いわゆるハッシュテーブルに近い使い方が出来るようになっています。

Genkidamaでは<動画ID, 動画キャッシュを持つPCへのURL>をこの分散ハッシュテーブルで管理しています。

URLhttp://IPアドレス:9801/nc/動画ID という形式になっており、このURLを通じてキャッシュを取得出来るようにHTTPサーバが動いています。

分散ハッシュテーブル、HTTPサーバでそれぞれtcp/9800、tcp/9801でインターネットからアクセス可能になっている必要が有るので、UPnPを用いてポートマッピングを行っています。

分散ハッシュテーブルのライブラリとしてOpenChord、UPnPライブラリとしてUPNPLibを用いています。

設定変更

NicoCacheと同じくconfig.propertiesを編集することで設定を変更する事が出来ます。

Genkidama独自のパラメータは以下の通り:

ソースコード

ソースコードはNicoCache Licenseでライセンスされているので、自由に利用・再配布が可能です。

https://enoki.dokukino.com/svn/public/Genkidama/trunk

http://syuu.dokukino.com/Genkidama_002src.zip

ところで消された動画ってみれんの?

ニコ動Webサイトから直接はみれないと思います。(エラーになるように出来てると思う)

FLV(またはMP4)のURLを直接指定してあげれば動画だけは救出出来そうですが、コメントが流れないニコ動なんて肉の入ってないハンバーガーなんじゃなかろうか・・・

★追記

やはり消された動画Flashハンドルして通常と異なるルートを通って「削除されました」のムービー(音声?)を流しているようで、キャッシュは使われない事を確認。

ところで消された動画ってみれんの?

意図的に見れなくしました。

分散ハッシュテーブルへ公開もしないし、リクエストが来ても拒否します。

完成度について・不具合報告のお願い

書き忘れてました。

テスト期間半日位なので、めっちゃβ版です。

バージョン番号は0.01です。

0.02だしました。

多分不具合は色々あるので、なんか有ったらコメントに書き込んでください。

よろしくです。

とりあえず確認してる現象としては、たまに分散ハッシュテーブルに繋がらなくってProxyサーバも開始出来ないというのがあります。

終了して立ち上げ直せば大体直ります。

はてブコメントへのレス

はてブコメントへ返事書くのってこれであってますか・・・?

すみません非コミュなんでよく分かりません

id:endo_5501 さんより、「あ、消された動画は見れないのか」

早まってはてブにも書いてしまいましたが、実はニコ動がどういう仕様になってるのかの所をちっとも理解してません。

消されてる時ってどういう状態になってるんでしょうね?

もし情報持ってる方居たら教えていただけるとうれしいです。

なんか変な音声が代わりに流れてる所を見ると、コメントはそのままムービーだけを差し替えてるんですかね?

その差し替えをやるのはサーバ側?フラッシュ側?

サーバ側であってフラッシュは何も知らないのであれば、Genkidamaでキャッシュがヒットしてくれるだけで素直に消されたムービーのキャッシュ再生してくれると思います。

フラッシュ側であれば、flvplayer_wrapperとか組み込んであげると回避可能になると思います。

・・・てか、そこまでやって、私、ニワンゴに怒られない?

あんまり乗り気じゃないのは正直そこに有るんですけど・・・・

id:northlight さんより、「発想はあったが作る人がいなかった。実行は大変ですな。」

やっぱ発想は有ったんですかね?私はどうも独創的な発想力とかそーいうのに乏しくて・・・

ニコ動とかちっとも詳しくなくて、NicoCacheってソフトを知ったのはつい先週なんですけど、知った瞬間にこれはおもしろいと思って発作的につくっちまいました。

後でググったらP2P NicoCacheとか書いてる人が居て、あ、やっぱりもう先に思いついてる人居たかな・・とか思って自分の浅はかさをちょっと後悔。

で、追加したコード量ですが、わずか200〜300行程度です。

期間はコーディング2日、テスト1日くらいですかね。

分散ハッシュテーブルのライブラリはOpenChordっていうかなり完成されたものがあるんで、私はこれとNicoCacheをくっつけるグルコードを書いただけなのですよ。

ってな訳で実はあんまり苦労してないw

そもそもDHTアルゴリズム自体を研究しているのですが、DHTを使う実用的なアプリっていうのも書いてみると楽しいかなぁと思いまして。

id:stts さんより、「キャッシュは、合法」

法律とかちっとも分からないんですけど、そうなんですか?

そうだと安心なんですけど。ネットワークに流したら灰色になったりしない?

連邦裁判所の判例だと合法、日本だと判例がない。

著作権法改正案で検索キャッシュは合法に、著作権違反なもののダウンロード違法にするつもりだが、未だ国会提出の段階かな。

id:th_6295 さんより、「キャッシュが半永久的に(ryあたりはどうなってるんだろう。」

分散ハッシュテーブルに流しているのは単なるURLキャッシュ保持ノードのIP+ポート番号+キャッシュID)なので、データそのものは流してません。

よって、分散ハッシュテーブルのネットワークを流れる情報は分散ハッシュテーブルのルーティング情報と<キャッシュID, URL>の組み合わせの情報だけになっており、キャッシュデータの中継はやりません。

で、分散ハッシュテーブルへは登録だけでなく削除も出来るので、起動時に手持ちキャッシュを登録、終了時に削除するようにしてます。

更に0.02で分散ハッシュテーブルへ登録、取得へいく前とURLを辿ってキャッシュリクエストが来た時に削除済みかどうかチェックし、削除されてたら作業を行わないようにしました。

あと、Winnyでいう初期ノードに当たるもの(=dhtBootstrapURL)を分散配置してません。

これ落としちゃうと誰も使えなくなります。

というか、今0.01のサーバを止めたので丁度そういう状態になってるはず。

ニワンゴさんに怒られたら勿論全部止めますよ。

gotosangotosan 2009/04/26 13:55 私も法律の事はよくわからないのですが、
最低限、「削除された動画は、たとえメンバーの誰かが保有していても再生できない。」とか、「削除動画が自分のキャッシュにあった場合は問答無用で削除する」とかはしておかないと、「違法行為の幇助」にされる可能性はありそうですよね。

あと、キャッシュは合法でも(現行法では)まだそれを使って不特定多数にサービスをする場合はグレーゾーンですし、法律が改正されるとしても「わかってて権利侵害の動画を流通させる事の手助けをしていた」と判断されると微妙じゃないでしょうか?

法律解釈なんかは、専門家でも意見が分かれる部分があるようですし、ニコニコ動画側の規約の問題もありますから、
どうにか「黙認」していただける範囲の実装(削除された動画や、公開範囲が限られている動画は共有、閲覧させないなど)は、しておいた方がいいでしょうね。
それプラス「直接権利者から依頼があった動画キャッシュの削除/再キャッシュ禁止機能」があった方がいいんでしょうけど.....

syuu1228syuu1228 2009/04/26 14:25 > id:gotosan
ん〜そうなりますか。
まぁ無難な方に倒しといた方が良いでしょうな・・・。

k-a2shik-a2shi 2009/04/26 19:06 法律の方はかなり疎いですが、それとは別に技術的な不安点が。
9800/tcpはWebDav Source Portが、9801/tcpはSakura Script Transfer Protocolが、Well Known Port Numbersとして知られ、そして運用されていますので、それらが目的の思わぬアクセスによって異常動作を引き起こしかねないという心配が。
特に9801/tcpのSSTPは、HTTPアクセスに連動して送信してくるサイトも存在しますので、対策無しだとかなり拙そうな感じです。
根本的解決を考えるのであれば、Unassigned(未使用)とされているポート番号に切り替えるのが良いでしょう。

endo_5501endo_5501 2009/04/27 07:37 ども、言及されたので来ました。
はてブコメの「あ、消された動画は見れないのか」はどっちかというと安堵の気持ちが強かったりします。見直すと残念そうにも見えるので書き直しておきますね。
下手に消された動画とか見れるようになってしまうと、昔の無法地帯に逆戻りしてしまうので、今の仕様のままで良いと思います。

wocotawocota 2009/04/27 18:19 こんにちわ。コード見ました。必要最小限のステキなハックだと思いました。
ところで,動画IDをキーにして,キャッシュ保持者のHTTPサーバーから単にキャッシュをダウンロードしているわけだけど,
キャッシュ保持者が,同名の中身が異なったファイルをキャッシュフォルダに置いておけば,
相手が意図した以外のファイルをダウンロードさせることができるなぁと思いました。
致命的な問題でもないし,分散ハッシュテーブルを使いたいだけだから,そこまでこだわる必要はないんだろうけど。

syuu1228syuu1228 2009/04/27 19:25 > id:wocota
ええ、その通りです。
結構致命的なんじゃないでしょうか。
対処法としては、どこか信頼出来る所にMD5とかで検証出来るモノが有れば良いように思うんですけどね。
例えば、キャッシュ時にURLだけじゃなくMD5も一緒にハッシュに流しておけば、一つの動画に対して3人以上のアクセスがある時は多数決で正しそうな人というのは分かりそう。
プログラムの改変までは行われないという前提なら、流したMD5で実際のキャッシュをチェックするだけでもキャッシュ改竄が有ったか分かりますよね。
ただ、これだけでは確実に改竄のチェックは出来ないですね。確実にやるなら、やっぱりどこか信頼出来る中央サーバにMD5のリストが無いと・・・。

syuu1228syuu1228 2009/04/27 19:27 > id:k-a2shik-a2shi
あ、しまった。本当ですね。
おかしいなぁ・・・最初チェックした時はかぶってない所にしたつもりだったんだけど、いつの間にかマズいポート番号にしてしまっていたようです。
次のバージョンが出せたらまたポート番号変えますね。

syuu1228syuu1228 2009/04/27 19:28 > id:endo_5501
ただでさえ、P2Pって言うだけで怪しい目で見られがちな上に、キャッシュ共有は実際にグレーっぽいのでこれ以上黒くするのは良くないですよね。

killswitch5375killswitch5375 2009/04/28 16:52 これはww。ネーミングも出来ることも応援したいですがニコニコ動画のリソースを使いまわすようなことになるんで微妙ですねぇ。ただニコニコ動画にアップされている元動画自体は別にニコニコ動画のものじゃないんでしょ?なんで、ニコニコ動画のキャッシュについて特に言及していないのであれば法的に突っ込まれることもない・・・のかなぁ

ほえほえほえほえ 2009/04/30 00:02 ハッシュ使うのならいまさらMD5を使うのはやめましょうよ
いまからならSHA256あたりで

ななしななし 2009/05/17 16:42 不具合か知りませんが起動したのにもかかわらずlocalhost:8080のプロキシに接続できません。

nakacyanakacya 2009/07/29 23:17 シリアルが必要な動画の扱いってどうなっちゃうんでしょうかね?

774774 2010/01/07 21:04 普及率ってどれくらいですか?

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証