[PeerCast-Admin @ jp:596] [User's Notebook]

Back to archive index

peerc****@lists***** peerc****@lists*****
2003年 8月 25日 (月) 00:01:37 JST


--------
MODE = Modify
REMOTE_ADDR = 203.165.21.103
REMOTE_HOST = 
--------
LE-YON
--------
1ユーザーのメモ書き
*このページは
 練習を兼ねて、PeerCastを使っていて気が付いたことを忘れないようにメモしてみようかと、そういうページ
----
*LAN内の他のマシンでPeerCastからのストリーム配信を受けるには
 本家かどこかに「''''LAN内に一台PeerCastを稼動させておけば、他のPCはそこから直接配信を受けられる''''」というような記述があったような気がします。しかし、実際やろうとしてみるとなかなかうまくいきませんでした。また、これに関する解説などもなぜか非常に少ないようです。;;
 できてしまえば大したことはなかったのですが、同じことで悩んでる人もあろうかと思います。というわけで、;;
;;
追記:http://www.PeerCast.org/jp/に次のようにありました。
>同じLAN内にいる人たちは自分のマシンにクライアント・ソフトウェアをインストールしなくても、ストリームのチャンネルを聴くことができます。オフィスにはLAN全体にストリームを供給するPeerCastクライアントが1台だけあれば良いのです。

**環境
 LAN内のマシンには192.168.0.で始まるプライベートなIPが割り当てられている。;;
 PeerCastが動いているPCのIPは192.168.0.2とする。このPCはポート7144を開けておく。;;

**PeerCastの設定
 PeerCastの設定画面のまんなか辺に''フィルター''という項目があります。ここに追加します。;;
 追加する設定はIP Maskを''192.168.0.255''とし、チェックボックスは左から3つにつけます。(''127.0.0.1と同じ'');;
 そして、[設定を保存]を押すのを忘れずに;;
;;
これであとはプレイヤーに配信元を教えてあげるだけです。

**プレイヤー側
Winampのプレイリストに次のURLを追加すればそのチャンネルが聞けるようになります。;;
''''''http://192.168.0.2:7144/stream/[ChannelID].ogg'''''';;
;;
もしくは(面倒ですが)html文書に
''''''http://192.168.0.2:7144/pls/[ChannelID]''''''
へのリンクを書いておき、それをクリックしても同様に聞けるようです。

----
フィルターの設定についてはよく理解していませんが、とりあえず動いています。;;
詳しい方がいたら適当に書き加えてほしいです。;;
以上;;

**8月5日追記
フィルターの設定はどうやら、指定したIPからの接続をタイプ別で許可/拒否するものらしい(参考:PeerCastJpWindows)

----
*127.0.0.1(localhost)について
127.0.0.1は''ループバックアドレス''といって、自分自身を指すアドレスだそうです。
カレントディレクトリとかと同じ考え方だと思います。

**PeerCastにおけるアドレス取得
PeerCastでは自分のグローバルIPの取得に特定のサーバーへの問い合わせを行います。;;
もし、このサーバーが落ちていた場合には、自分のIPを127.0.0.1としてしまいます。
これは、いってみれば''間違った思い込み''のようなものですが、これによりおかしなことが起こります。

・・・・いろいろあるかもしれませんが、とりあえず実際に遭遇した例で説明しておくと、

**個々のPeerCastの具体的な動作
 あるPCで動作しているPeerCastの状況を考えてみます。;;
PeerCastはネットワークを介して外から送られてきた情報を元に新たな接続を試みるわけですが、
送られてきたアドレスが127.0.0.1であった場合を考えると、

-まず、peercestクライアントは127.0.0.1に、つまりLocalhostへ接続しようとします。
-すると、LocathostにはすでにPeerCast(自分自身)がいるので、これとの間で接続が確立します。
-結局、同じPC上のPeerCast同士が接続されてしまいます。

この接続は無意味であり、またこの間では新たな情報は一切交換されないはずですが、実際にこの状況になるとその接続を介して大量のデータが流れるらしく、マシンがとんでもなく重くなります。;;
そのときにはPeerCastのWebインターフェース等で接続状況を確認して、127.0.0.1との接続を切れば元に戻ります。ただし、間違えてWinamp等との接続を切らないように(^^;
;;
しかし、いちいち監視していたのでは大変です。

**解決策
 上の例では送られてきた情報が間違っていた、つまり自分以外のどこかのPeerCastが
自IPを127.0.0.1として動作していたために、自分のPeerCastがおかしな動作をしてしまいました。;;
逆に自分のPeerCastが自IPを127.0.0.1とした場合には相手側で同様のことが起こります。;;
これを防ぐための方法を挙げると

-自分でIPを調べて''forceIP''してしまう。しかしIPは頻繁に変わる可能性があるため、しょっちゅう確認する必要があり、あまりいい方法とはいえない。
-下のコメントでanoさんが書かれているように''filter''の設定で''127.0.0.1''を''ban''してしまう。こうすれば、ローカルのPeerCastからの接続は拒否されるため、上のようなことは起こらなくなる。

2つ目に挙げた方法は、自IPが127.0.0.1であるという間違った情報が外に流れていくのを防ぐものではなく、自衛策にしかなりません。結局lookuoHostが落ちた場合に間違った情報が流れ出すのを防ぐには現状ではforceIPするしかないような気がします。
どちらにしろ2つ目の設定は行っておいたほうがいいでしょう。

----
グローバルなアドレスが127.0.0.1というのはあり得ないのだから、PeerCast内部で対処してくれるといいなと思ってみたり。;;
内容に関して、anoさんのLocalHost対策の方がまとまっていますが、とりあえず自分として整理したかったので。

----
*file://で配信できないファイルがあるのはなぜ?
file://を使って配信(FileSource)しようとすると、某ポート開放のoggはできるのに、自分でエンコードしたoggファイルでは配信できなかったことがありました。;;
考えられる原因としては

-ソースがモノラルだから(?)
-Winampで書き込んだタグのせい
-もしかしてCBRじゃないのでは?

とりあえず調べてみました。;;


**とりあえず実験
ソースからエンコードしなおして配信できるか確認しました。;;

**条件
ソース:Radioからの録音、モノラル22kHz16bit;;
エンコード:ビットレートはCBR45kbps、エンコーダーはoggdropXPd;;
配信方法:[file://c:/なんたら]による直接配信;;

**結果?
配信してみると、とりあえず成功。;;
次にWinampでタイトルなどのタグ情報を書き込んでからやってみると、今度は配信できない。;;
とっておいたコピーで確認してみるとやっぱりできる。;;
ためしにWinampにてタグをなしにして更新したファイル。配信できるかと思ったらこれもだめ。

**Winampのせいか
Winampでタグを書き込むと配信できなくなるようです。一度書き込んでしまうと消してもだめでした。きっと空白が書き込まれているからでしょう。;;

Winampによるタグ更新の前後で比較するとファイルの先頭と末尾がかなり変わっていました。しかし、WindowsMediaPlayerでも再生はできるのでoggの仕様からは外れていない模様。というか、タグ情報自体オプション(=あってもなくても動く)だろうと思いますが。;;

-結局Winampはshift-JISにしか対応してないとかそういうことでしょうか。

以前配信できなかった原因は主にはWinampによるタグ情報の所為、もしかしたらCBRでなかったことも原因とはなりうる、かな。
**対策は?
上に書いたようにタグをWinampで編集したことによる問題っぽいので、とりあえず

-タグなしにする
-Winamp以外のツールでタグを編集する。;;
-CBRにする

そういえばoggのエンコーダーはCBRは対応していないとかどこかにあった気がするのに、普通にCBRでエンコードできたのですが、ってどうでもいいけど。;;
''実際は、最大と最小のビットレートを同じにしたVBRによる疑似CBRになっているようです。''

*ビットレート指定について
エンコードする際に選択できるビットレート指定にはいくつかありますが
なんとなく用語解説っぽく並べてみると、
:CBR:固定ビットレート。単位時間当たりのビット数は一定。
:VBR:可変ビットレート。単位時間当たりのビット数は変動。音質一定
:ABR:可変ビットレート。ファイル全体でのビット数一定。
:QB:可変ビットレート。Quality(音質)一定。Qualityレベルを指定。
;;
微妙にかぶってるような部分もありますが、区別しているものは

-結果として何を一定にするのか

なのでしょう。;;
そのため、QB以外はビットレートを指定し、QBは音質を指定するようになっています。たぶん。

用語がoggエンコーダでの表記と違いますが適当に読み替えられるでしょう。;;
とゆうかVBRはないみたいですね。

*配信している曲とかのタイトル(タグ情報)が再生側で見えない
oddcastDSPでMP3ソースをogg配信するときタグ情報が再生しているWinampに正常に表示されない。
具体的には日本語が化けてしまう。;;
明らかに文字コードの問題でしょうが、peercastのタスクトレイのポップアップには日本語も正しく表示されている。;;
ということは、peercastは正しく認識しているにもかかわらずWinampに送る際に(対応した文字コード等に変更せずに)そのまま送っていることが問題なのでしょうか。

**対策(?)

-日本語を使わない
-mp3ソースを使わない(?)

''''現状では、日本語タグつきのmp3をLilithやAudioEncorder(下参照)でエンコードすることで一応解決できます。''''

*mp3をoggに
貯めこんだmp3をoggに変換したいということがよくあると思います。;;
エンコードされたものを再エンコードするので情報の劣化は避けられず、音質を考えるとよくないはずですが、wav等のソースがすでにないことが多いので・・・。
とりあえず実際のアプリを挙げてみます。

-wavに変換してから、oggdropXPdでエンコード
-Audio Encorder(http://kazuki.s18.xrea.com/index.html)で直接
-Lilith(http://www.project9k.jp/index.htm)で直接

1番目の方法はタグ情報が失われてしまうので、手動で移行せねばならず面倒。;;
2・3番目はそんなに変わりませんが、Lilithではリサンプリングなどより細かな設定が
可能かもしれません。

anoさんがコメントで紹介されている[[dMC http://www.dbpoweramp.com/dmc.htm]]等、他にもいろいろあるようです。

*ストレスのない配信がしたい
ストレスがないって何だろう、配信する側への負荷が少なくてスムーズに聞ければストレスは感じないかな、あと特許とか気にしなくていいとか...、というわけでエンコード済みのoggを直接ストリームとして流すだけのfile://による直接配信をすることに。
方法は[[ここ http://peercast-jp.sourceforge.jp/cgi-bin/note.cgi?FileSource]];;
配信を始めるときにビットレートを指定します。この配信方法だと完全に送信ビットレートが固定となってしまうようです。
このため、指定とoggファイルの実際のビットレートとにずれがある場合、受信側において'''バッファオーバーフロー'''や'''バッファアンダーラン'''(?)が起こってしまいます。つまり、音飛びしたり、途切れたりします。;;
実際にやってみた例では、ビットレートに''19''を指定するとときどき音が止まって''''prebuffering''''が発生し、''20''だと逆にバッファがあふれて音とびを起こしました。;;
ビットレートを小数で指定できれば改善するのでしょうけど、無理なようで。

いくつかファイルを作成して確認してみましたが、、、、例を挙げると、;;
エンコーダにはLilithを使用して、CBRとQB、それぞれで可能な最低品質で下のように

-''''CBR''''((疑似?)固定ビットレート)48Kbps
-品質ベース(''''QB''''?)(公称45.001Kbps)

モノラルソースなので、実際のビットレートは数字の半分になるようです。;;
確認のため書いておくと、この結果は、おそらくソース依存かつレートの指定依存なので、この場合はこうだったという参考にしかなりません。;;
それで、結局、これらを比べたところでは''''QB''''のほうがレートのばらつきが少なかったように感じました。
実際の配信で途切れが少なかったのも、''''QB''''の方でしたが、ただ単に整数に近いビットレートだっただけかもしれず...。

結局、配信する際の設定としては、バッファがあふれて音飛びするよりは、たまに音が止まって読み込みにいくほうが、聞いていてストレスを感じないので、上の例では''19''を指定するのがいいかと思います。;;
結局のところ

-完全な''''CBR''''ができないかなぁ  >エンコーダー
-ビットレートを細かく指定できないかなぁ  >エンコーダー、peercast
-可変ビットレート配信はできないのかなぁ  >peercast

というわけで現在はこれらの方法を検索中

現状ではogg自体がCBRに対応できていないようですが、...だれか作ってたりしないかなぁ(謎);;


----
[[#rcomment]]
- 2003-08-24 (Sun) 20:46:44 ''[[LE-YON]]'' : aveの計算はファイルサイズからしているのでしょうか。あと、dMCがタグ編集に使えるなら、大本のエンコーダーと組み合わせて細かなことができますね。
- 2003-08-23 (Sat) 23:50:09 ''[[ano]]'' : 昔、[[こんなやりとり http://ano.hearview.net/memo/?date=20030427#p01]]したんですよ。あれから、file://の仕様が変わっていないところを見ると…file://VBR.oggによる完全な配信は今後も無理っぽいような気が。ちなみに、nominal=min=maxエンコードでは確実に''''ave''''<=''''nominal''''です。そのaveの変動はファイルの内容次第としか。ただ、私個人のソースでは'''品質指定によるVBR'''より'''疑似CBR'''の方がbitrateの変動は少なかったです。あと、bitrate自体の細かい指定は大元のツールではできたはずです。そこらのエンコーダが対応してないだけで…。
- 2003-08-23 (Sat) 21:01:34 ''[[LE-YON]]'' : dMCですか。日本語のタグは大丈夫でしょうか。ちょっと見てみます。
- 2003-08-23 (Sat) 16:20:58 ''[[ano]]'' : mp3=>ogg、[[dMC http://www.dbpoweramp.com/dmc.htm]]使ってます。
- 2003-08-09 (Sat) 08:13:55 ''[[LE-YON]]'' : もうちょっと調べてからと思ってここにメモしておいたのですが、返答ありがとうございます。とりあえず、タグをなくすとか、エンコードの設定を確認するとかして調べて見ます。
- 2003-08-08 (Fri) 08:39:10 ''[[ano]]'' : OggVorbis、タグ情報周りで過去にいろいろありました。以前は文字数制限が。で、それは確か修正されたはずなんですが、一部のファイルや組み合わせ(?)でスキップされる場合は確かにあります。手元では日本語がタグ情報に入っているある特定のファイルのみスキップされたので、「utf8でも一部の領域で変な動作しているんだけど心当たりはない?」と本家フォーラムには投げてあります。
- 2003-08-05 (Tue) 08:19:40 ''[[ano]]'' : LocalHost対策は…長いので、私のページにでも書いておきましょうか。仰るとおり、localhostをbanすると、Win32GUI系はまともに動作しなくなるでしょう。
- 2003-08-05 (Tue) 05:47:37 ''[[LE-YON]]'' : しかし、こうするとタスクトレイからの再生が素直に通らないような・・・.
- 2003-08-05 (Tue) 05:45:55 ''[[LE-YON]]'' : localhost対策とは?結局は自IPが127.0.0.1にされてもおかしなことが起こらないということでしょうか。
- 2003-07-20 (Sun) 16:51:02 ''[[ano]]'' : 192.168.*.*でPeerCastにアクセスして、127.0.0.1をbanすると、本家が落ちたときのlocalhost対策になります…。
- 2003-07-20 (Sun) 16:49:24 ''[[ano]]'' : いらっしゃいませ。ちなみに、うちの環境ではルータから192.168.''1''.*というIPが割り当てられてます。環境ごとに微妙に違うでしょうね。
--------



Peercast-jp-admin メーリングリストの案内
Back to archive index