2017年5月28日日曜日

nginxでライブストリーミング!nginx-rtmp-module

生配信サーバーを構築してみたかったのですが、nginxのエクステンションでできることがわかって構築しました。
サーバーはこれで構築できました。
macbook air obs-(wifi 100mbps)>ubuntuサーバー-(wifi)>macbook air vlc
での遅延が3秒のようですから、私には実用的な遅延レベルです。

しかし、クライアントがHLSとなると36秒遅延しています。

なぜそうなるのかはどうやら、HLSは遅延をなくすには向いていないようです。
HLSでも遅延を減らせなくはなさそうなので、最初はHLSで頑張ってみます。
今回の受信者はAndroidを想定しています。視聴者は少数であるという想定です。

まずは、nginxのrtmpの設定で、

# HLS fragment の長さ(1個のtsファイルの動画の長さ)
hls_fragment 1s;

としてみました。

すると、遅延は25秒になりました。

続いて

#m3u8ファイルに何秒分のtsファイルを掲載するか
hls_playlist_length 4s;
#なぜか必要です 
wait_video off;



遅延が22秒!
ただし、安定性が落ちるようです。

この秒数を2とするとそもそも開けなくなりました。

次に、

hls_max_fragment 8s;

としてみます。

すると、、、
遅延を17秒までにできました!うぅ!

4秒にしてみます。

12秒までに削減できました。

2秒にすると、14秒になるので減らし過ぎもいけません。

ところが
githubのissueを見ようとした時に、誤って、リポジトリ検索したら、html5でrtmpを見るというものを見つけてしまいました。


なので、HLSでの試みはここで放棄します()


留意点
これらの低遅延の設定を施すと、cpuに負荷がかかります。core i7の 37なんとかsだかtでやったのですが、1コアだけ与えた仮想マシンで、cpu100パーセントにしばしばなりました。
vpsで構築する人には辛いかもしれません。


余談
OBSの配信停止をしてから、nginxを止めないと、OBSがクラッシュします

参考文献

2017年5月24日水曜日

Minecraft PEサーバーソフトウェア集(PocketMineと多言語サーバー)2017年5月版

こんにちは、haniokasaiです。
PocketMine-MP公式がshogicp氏のMojang入社に伴い死んでしまったため、どのサーバーソフトを使えばいいかわかんないという人は非常に多いです。
ですから、いつものように私がソフトをまとめていきたいと思います。

☆言語別にまとめます。

PHP

PocketMine派生

PocketMine-MP
開発:pmmpチーム(リーダーはhttps://github.com/dktapps
ライセンス:LGPLv3
開発状況:活発

公式を半ば乗っ取った形でスタート。必要最低限の機能を持っていて、あまり機能追加をしない。dtkappsは性格が悪いため、Genisysを終わらせた人の1人。バグは少ない。

開発:BlueLightJapan(リーダーkametan0730MC)
ライセンス:GPLv3
開発状況:活発

かめたんが率いるBlueLight.https://github.com/ken77731により、設立が提案。
政治的に安定しており、新機能追加・バージョン対応がいち早い。ほかのsrcに比べると、開発環境が自由で、おのおのが独立して新機能更新している。そのためか、バグが多い。

Steadfast2
開発:Hydreon Corporation
ライセンス:LGPL2
開発状況:それなりに活発

Lifeboat 鯖のSRC。新バージョン対応が早い。ただそこまで実用的なSRCではない。一応企業開発のため滞りは少ない。

ExtraCorePE
開発:ExtraCorePE
ライセンス:GNU Affero General Public License v3.0
開発状況:やばそう(悪い意味で)

日本人のNought57(零月)が所属。チーム内でごたごたがあって、更新はあまりよくない。一部人に人気なそう。

開発:TesseractTeam
ライセンス:GPL3
開発状況:細々と更新

Genisysベース。機能の多さと、動作の安定が両立できている。それなりに人気のSRC。この怪しげなデベロッパーhttps://github.com/AppleDevelopsはPMMP界の破壊に奮闘していた時期も。
チーム内では争いが絶えないよう。

開発:EventaxhlTeam
ライセンス:
開発状況:たまに

ロシア製SRC。Tesseractベース。更新頻度が低いが細々と続けられてはいる。ロシア語メインなので日本人にはわけわからない。コマンドでコードが実行できるらしいがevalなので危険そう。


Nukkit
開発:Nukkit
ライセンス:GPLv3
開発頻度:活発

みんな大好きNukkit。共産圏の開発者が多い。プラグインも非PMMPにしては一番多いし、私haniokasaiもそれなりに作りました。プラグイン開発も容易です。
機能追加は消極的、バグは多くない。
パフォーマンス的にJavaを生かし切れていないと指摘される。

BukkitPE
開発:BukkitPE
ライセンス:GPLv3
開発頻度:一定程度安定

あまり有名でない。ドメインやVPSが死んでるものの開発は続いているよう。レッドストーンが使えます。

死んでる
voxelwind

C#
MiNET
開発:NiclasOlofsson
ライセンス:Mozilla Public License 2.0
開発頻度:なぜか活発

ある意味、一番息の長いサーバーソフト。機能はほぼなく、すべてプラグインで補う必要がある。プラグインは作りやすいが、機能がなさすぎる。コードは一番洗練されていると感じる。噂によると、コードをmojangからもらっているそう。

D言語
sel-server
開発:Kripth
ライセンス:LGPLv3
開発頻度:活発

次世代のサーバーソフト。更新は異様に活発だが、企業が関与しているのだろうか?
ハブとノードで分散できるのが最大の特徴。
残念ながらD言語がわからないので詳細がわからずテストもできず。

停止
Swift
SwiftMine
開発:
ライセンス:Apacheライセンス
開発状況:停滞
C++
BenchMine


まとめ
サーバーソフトは生まれては消えを繰り替えしているのですが、なんとか消え失せたりはしていません。PCに比べて活発さはないのですが、公式のサーバーソフトがない故、特色のあるMCPEサーバーは多くあります。死んでいて紹介していないものもありますけど、多くを網羅できていると思うので、是非参考にしてみてください。

2017年5月5日金曜日

MCPEのパケット解析結果を見れるサイト!

こんにちは、haniokasaiです。
すごそうなサイトを見つけたので紹介します。
D言語で書かれた、MCPEサーバープロジェクト、https://github.com/sel-projectで、パケット解析をしていることに気づきました。
Githubでサーフィンしていたら、たまたまphpやjavaなど多数の言語のMCPEのライブラリを見つけて、その投稿者のホームページをみたら、詳細な解析結果が載っていました。

https://sel-utils.github.io/



















上から、Minecraft PC、MCPE,Raknet,(sel-serverの)hubとnode通信パケット、(sel-serverの)外部からwebsocketで操作するパケットが書かれています。

たとえば、https://sel-utils.github.io/pocket/112.htmlを見てみると、1つ1つのパケットの型、id、サーバーかクライアントが処理するかが書かれています。
これさえ読み解ければ、パケット解析をしなくとも、パケットが読めるというわけです。

しばらくはブログ更新できそうですので、その読み方を解説できればなぁと思います。

2017年5月4日木曜日

appwchr氏のMCPEのマルチプレイアプリで遊んでみた!

こんにちは、はにおかさいです。
精神状態がやばいけれども、それがある意味安堵できる状況でもあるという状態です。

mixiappwchr氏がマルチパーティというアプリを作ったようなので、レビュー書きます。
彼はもともとおしゃまるプロジェクトの開発者でしたが、おしゃまるがなんやかんやで終わってしまいました。でもマイクラで何かをしたかったそうで、今回のマルチプレイのアプリを作ったようです

Android端末が2台ありますので、試してみました。

まず、マイクラPEとマルチパーティーをインストールします。

次に、開きます

許可を開始を押します。(オレンジ色のボタンは長押ししないと反応しないのでしょうか。)


心優しいappwchr氏は変なことをしないと思うので、許可。


許可。

これも許可してください。

設定はこれで終了です!


ーーマルチプレイのワールドを開く側ーー

「パーティー」を作るには、パーティー名を決めて、右下のオレンジボタンを押してください。


名前を決めて、「開始」ボタンを長押しします。
根気強く工夫して押さないとなぜか反応しません。

このあと、マイクラPEのアプリが立ち上がるので、マルチプレイしたいワールドを開いてください。


ーーマルチプレイに参加する側ーー
設定後、アプリを立ち上げます。


先ほどのパーティー名と同じパーティーを押します。




パーティーに参加の参加ボタンを長押しします。


遊ぶを押します。


LANゲームにパーティーを開いた人の名前の部屋があるはずなので、それを押して、参加します。

読み込みを待つと、、


マルチに入れました!


感想
mob等をふ化させて、動きを確認しましたが、今回のこのアプリはおしゃまると違って、サーバーを通さないで通信するので快適にできました。
コマンドはうまく使うことができません。
欠点としては、パーティーに入る際、許可がいらないので、知らない人がどんどんきちゃうことです。テスト中も関係ない人が入ってきて困惑しました。
まだまだ、開発途中ですので、そこは改善してほしいです。。。
1年ほど前、まだ自分に割と友達がいたころにこのアプリがあったら、結構使ってたことでしょうね....
どんどんこれからもMCPEの記事を書けるのであれば、書きたいと思っています。









宇都宮で餃子食べてきた!

どうも、はにおかさいです。
GWどこにも行かないのも寂しいので、宇都宮で餃子食べてきたました。

数時間かけて、宇都宮に行ったのですが、思った以上に栄えてまして驚きました。

まずは、宇都宮 みんみん ステーションバル店に。
11:8ごろ(GWの水)に行ったのですが、一応並ばずには入れました。
注文してから15分後、商品が届きました。

水餃子と焼き餃子を注文、安かったのですが味もそこそこでした。
店には遠出をしていて途中で寄ってる人が多いようです。新幹線もありますからね。


つぎは、同じ駅ナカ(あとで建物が同じことに気づきました())の青源に行きました。
(11:30ごろから)15分ほど並び、店に入って、注文。また10分ほどたったら、オーダーしたものが来ました。

ネギみその焼き餃子
程よい濃さのみそで、ねぎも味噌が染みてて、今回食べた餃子の中では一番気に入りました。


水餃子。みそに浸かってて、味が染みています。スープは酸味が効いてて、餃子にあいますが、飲むには少し酸っぱい気がします。(スープも飲めると書いてあるので飲むことも想定されてるでしょう。)

宇都宮駅から15分ほど歩いて、来らっせ本店に着いた(13時ごろ)のですが、数
十人が既に並んでいて、とても並ぶ気になれなかったのであきらめました。

そっから、オリオン通りに行きました。昔の商店街みたいなところでしたが、正直見どころは少ないです。

歩いていたら、餃子ナンピザなるものを発見!ヒルズカフェ(HillsCafe)という店でした。

店内は、一階がお土産ショップ、2階がレストランです。レストランはファストフードのコーナー的なものを想定して行ったのですが、レストラン色が強かったです。

味はいいのですが、 具が少ない 上に載ってる餃子の焼いた皮がもはやただのせんべい 冷めてる ナンという割には、薄すぎる生地 隣の客がキ〇ガイでからまれた(店関係ないww) 
でいい気分しませんでした。ラー油をかけると、餃子っぽくなっておいしいです。
店はかなり空いてました(二時半ごろ)

また、ぶらぶらしたら、宇都宮餃子館を発見しました。


店内に入るのに、10分(3時ごろ)、店内では2,30分待たされました()


川越シェフも来たことがあるようw


湯葉入り餃子。高いですけど、おいしい。具はほんのり湯葉感がしました。
わさびをつけて食べます。
皮は一番おいしかったです。ちょうどいい歯ごたえ。。。

帰り、駅前の「餃天堂」に行こうとしたのですが、15:30にもかかわらず、1時間以上ほど並んでいそうだったのであきらめて帰りました、、、。
食べたかった。。。。

まとめ
味としては、ねぎみそ焼き餃子。餃子の皮は宇都宮餃子館の餃子がよかった。
んー。全体的に店が混んでます。ゴールデンウイークだったからでしょうか。
正直、宇都宮の名所というものはなさそうなので、行くとしたら餃子食べ歩きがメインになりそうです。
後悔としては、オリオン通り近くの焼きそば屋に行きたかったことです。
店が一見さん厳しい感じだったので入れませんでした。。。
焼きそばが250円。かなり安い。おいしいのかなぁ。
1日中歩き回ってへとへとです。文章のグラマーもなんか変かもしれません。
初食レポ記事なので、だいぶ編集が雑ですけど、ご容赦くださいませ。

2017年4月30日日曜日

[PocketMine] Pharファイルをwebで作る!解凍する!

こんにちは、haniokasaiです。
pharをいちいちdevtoolsで作ったり、展開したりするのが面倒な方に便利なツールを用意しました。
pmt.haniokasai.com

機能は4つ。

ZipからPharに変換

PharからZipに変換する

var_dump() ビュアー

PocketMineのCrash Dump解析

上2つは需要ありそうなので、使い方を解説したいと思います。

ZipからPharに変換

zipを選択して、検査が必要であればチェックを入れ、pharの作成を押すだけで完了できます。
devtoolsでやると、いちいちmakepluginでプラグイン名を入れる必要はありますが、pmtでやればそのような事は不要です。


PharからZipに変換する
    
ファイル選択ー>変換だけでおしまいです。解凍禁止コードを無視して開くこともできますが、(両親ではなく)良心に従って、適切に使ってください。


まとめ
近頃は、たいぶPMMP界が停滞しているように思えます。ですから、新しいデベロッパーが簡単にプラグインを作れるようになれば、界隈が活性化するのではと思います。
自分の記事を読んで、開発に関して知識を深められたらうれしいです。


2017年4月27日木曜日

phpのバイナリをramdiskとhdd上で動かして速度比較してみた

こんにちは、haniokasaiです。比較的精神が落ち着いています。
サーバーで、ramdisk使ってるのですがあまり速くない気がして、そもそもramdiskはファイル読み書き以外にも効果があるのか検証したいと思いました。

チェック環境
Core i7 3770s
ram 16GB(4.1 GB/s)
hdd 300gb(100MB/s)


ハッシュ値計算
まずは、ハッシュ値計算。明らかにcpuしか使わないとは思うのですが試してみました。

<?php
$time_start = microtime(true);
// ここに測定したいPHPの処理を記述
//http://qiita.com/ao_love/items/a2d8b8566d0426195002
$i=1;
while($i <= 10000){
echo hash(sha512, 'hoge hoge');
echo PHP_EOL;
$i++;
}
$time = microtime(true) - $time_start;
echo $time . " seconds\r\n";
?>

ramdisk
2.385381937027 seconds
2.3838350772858 seconds
2.381500005722 seconds
2.385363817215 seconds
2.3823990821838 seconds

hdd
2.386225938797 seconds
2.3824648857117 seconds
2.3904531002045 seconds
2.385146856308 seconds
2.3851881027222 seconds

変わらないですね()

変数に代入+擬似乱数速度

<?php
$time_start = microtime(true);
// ここに測定したいPHPの処理を記述
//http://qiita.com/ao_love/items/a2d8b8566d0426195002
$i=1;
while($i <= 100000){
$a[$i] = mt_rand();
echo $a[$i];
echo PHP_EOL;
$i++;
}
$time = microtime(true) - $time_start;
echo $time . " seconds\r\n";
?>
#test2.php
disk
2.1107099056244 seconds
2.1114587783813 seconds
2.1099500656128 seconds
2.1052420139313 seconds
2.085608959198 seconds

ramdisk
2.1087579727173 seconds
2.1096110343933 seconds
2.1064808368683 seconds
2.1081149578094 seconds
2.111673116684 seconds

やはり同じような値ですね。。。
(単位は秒)
##データはハードディスクにおいて
#bin:ramdisk phar:ramdisk 
0.19
0.19
0.171

#bin:disk phar:ramdisk 
0.184
0.211
0.228

#src:disk phar:disk
0.192
0.202
0.191

#bin:ram phar:disk
0.164
0.191
0.169

#ramdiskにファイルを置いて
#bin:ram phar:disk
0.193
0.197

#bin:ramdisk phar:ramdisk 
0.179
0.18
0.181
0.219

#bin:disk phar:disk
0.195
0.183
0.213
0.176
0.169

まとめ
 差はほぼ生まれないという結果が出ました。やはり読み書きを多くするプログラムでないとramdiskを生かすことはできなさそうです。

nginxでライブストリーミング!nginx-rtmp-module

生配信サーバーを構築してみたかったのですが、nginxのエクステンションでできることがわかって構築しました。 サーバーは これ で構築できました。 macbook air obs-(wifi 100mbps)>ubuntuサーバー-(wifi)>macb...