全天カメラのライブストリーミング

全天カメラ

 現在の全天カメラは、ラズベリーパイ4とラズベリーパイ用HQカメラで静止画像を撮影した画像を公開しています。元の考えは静止画像では無く動画状態に近い画像を見たいのが始まりでした。しかし、色々とインターネットで調べてこの形で構築しています。
その後も当初からの動画状態に近い全天カメラを製作したく、再度調べて大体近い感じのシステムが出来そうなので以下製作内容を纏めました。
 動画状態に近い:カメラの性能とレンズの明るさの関係上夜間は秒単位の撮影になるため
出来上がりは流星などの流れが分かると一番良いのですが、今は製作中(格納ケースも必要)なのでどうなるでしょうか?
下記よりもっと簡単に出来るシステムもあるかも知れませんが、以下は私としての試行内容です。

1.カメラ
 カメラはCMOSカメラとなりますが、なるべく感度の良い(ソニー製だとSNR1が小さい)カメラが対象となります。現時点(2023/12/20)ではセキュリティ向けのCMOSチップが該当します。実際には使用するレンズ画像の大きさを勘案して選ぶことになります。天体撮影用(惑星用とか)にも採用されている(ZWO等)のがドライバー等が既にあるので使いやすいと考えています。尚、参考に候補的には
1)IMX482 SNR1:0.07、サイズ 1/1.8、参考例 ZWO ASI482MC、自分はこれを使用予定です。
2)IMX585 SNR1:0.11、サイズ 1/1.2、参考例 ZWO ASI585MC
3)IMX462 SNR1:0.1 、サイズ 1/2.8、参考例 QHYCCD QHY5III462C
4)IMX294 SNR1:0.13、サイズ 4/3、参考例 ZWO ASI294MC
5)IMX533 SNR1:0.14、サイズ 1インチ四方、参考例 ZWO ASI533MC
セキュリティカメラ用イメージセンサー [製品]参照、2023/12/20時点)
尚、CMOSカメラはあえて冷却式である必要は無いと思います。

2.レンズ
 レンズは全天カメラであれば魚眼レンズになるわけですが、上記CMOSカメラ向けとしてはCマウントレンズ系が主になると思います。因みに現在の全天カメラに使用しているレンズは、FishEye 2.5mm F1.6(中国製)です。インターネットで調べると他社製も出てきますが、大体が販売終了が多いです。ただフジノン製やEntaniya製からCマウント魚眼がありますが高価です。私はたまたま中古で安価なフジノン製を入手できたのでそれを使用する方向です。アメリカの販売店でお安いフジノンが有りましたが。
魚眼レンズだと通常カメラ用も多くあり、性能も当然良いようです(イメージサークルが大きいので当然そうなるかそう見えるのかも)。この辺りもトライしてみたいですが、結局CMOSカメラもチップが大きくなるので価格が上がります。多分1インチのASI533MC(SNR1:0.13)やマイクロフォーサーズのASI294MC(SNR1:0.14)辺りが妥当ではないかと思います。あまり使っていないASI294MCも所有(現在は電視ファインダー化)しているので、SIGMA 4.5mm F2.8辺りを入手出来たら製作してみたいですね。参考例としては
1)FishEye 2.5mm F1.6( CS-2.5-8MP-F) メーカー等不明、現在利用中アリエクでの購入品
   イメージサークル6.4mm、解像度8Mとの事。
2)フジノン FE185シリーズ、1型と2/3型があります。1型を使って製作中
  フォーカス調整が無いため、マウント間にシムリングを挟む等で面倒です。
3)Entaniya レンズシリーズ。魚眼系特化している感じで、M12からあります。
   ラズパイ用もあり入門的にも出来ますが、全天カメラ利用はどうでしょうか?
4)SIGMA 4.5mm F2.8、APS-C用ですが、4/3でもケラれるかも知れませんが使えるらしい。
  使ってみたいレンズです。大きな画像の方が鮮明になると思いますので。
5)その他 LAOWA等の4/3用の魚眼レンズ
使用してみないと不明ですが、多分フジノン魚眼やカメラ用魚眼は開放でなく、ある程度絞った方が良像と思われます。他魚眼も該当するかも知れませんが。

ZWO ASI482MCとフジノン魚眼レンズ。ケース取付ホルダ格納状態

この写真はASI482MCにフジノン魚眼レンズを取付けた状態ですが、撮影画像は完全円周では無く、上下がケラれた状態となります。現在の全天カメラ画像と同じうような感じです。少し醜い画像ですが、こんな感じになります。

SharpCapでの画像。画面キャプチャ。上下が切り取られてます

3.全天カメラシステム
3.1 静止画
 現在と同じような静止画での全天カメラは、ラズパイ用、Windows用とインターネットにて公開されていますので、参考になると思います。静止画と言ってもタイムラプス機能もあり、夜間のタイムラプスは生成できています。
参考までに(使用経験がある点から)
1)ラズパイ用
 a) Allsky Camera:https://github.com/thomasjacquin/allsky
  ラズパイ用カメラとZWO CMOSカメラ用です。現在公開しています全天カメラはこちらを利用
 b)indi-allsky:https://github.com/aaronwmorris/indi-allsky
  indiベースなのでZWOに限らないCMOSカメラで利用できます。
  a)と同等ですが、何となく使いやすさでa)にしています。Focus調整は拡大できやり易いです。
2)Windows用
 All Sky’ Camera Software for Windows AllSkEye:https://allskeye.com/
  Nativeドライバーで使えるCMOSカメラメーカーは限定されますが、ASCOMドライバーが可能。
 他のシステムは未調査です。

3.2 動画
 全天カメラ映像の動画レベルの配信(横浜自宅から見たいのが発端)は以前からの希望で、都度調べながら模索していました。検討していた中で課題は、「どうやって空の明るさの変化に追従して撮影するのか」でした。自分の技術レベルが拙いので、この辺りが結局自作でなく3.1での公開システムを利用している点になります。

1)Windowsでの配信前提でのZWOカメラ映像の取得&制御
 最近になり、ZWOカメラではDirectShowのアプリorミドルソフトが有ることを知りました。これを使ったらどうなるか調べることにしました。このミドルソフトには画像表示アプリがあり、単体で状況を調べることが出来ます。
そこで分かったことは、アプリからプロパティにて自動露出から自動ホワイトバランス他が出来るようだと分かりました。そこでフリーの配信ソフトOBS(OBS Studio)を使いどうなるか調べてみました。結果はZWOのDirectShowにてカメラにもアクセスできプロパティの変更も可能で、先ずは動画配信としての第一段階(ZWO社CMOSカメラ映像の取得と制御)がクリア出来ると分かりました。

配信アプリ(OBS)の「映像を構成」からカメラプロパティ設定


2)ZWOカメラ映像の配信
  ここからが配信としてのシステム構築開始です。
 OBSでの動画の送信には2通りあるようで、
 a) 配信タブでの送信
  これはどちらかと言うとYoutube等の動画配信サービス主体への動画送信ですが、カスタムとして独自の配信サイトへの動画送信があります。
 b)録画タブでのURL指定での保存(送信です)
  これは配信とほぼ同様のようですが、どうもFFmpegの機能で行っているように見えます。実質はa)と同じと感じます。a)はOBS単体機能でb)はFFmpeg機能と言う事でしょうか?分かりませんが。
a)の機能で最初行なって、b)機能も使えば同時に2配信も可能なのかもしれません。
ただ、b)機能では配信情報(情報のコンテナ形式等)を各種タイプで出来る(FFmpegだから)ようです。a)はURLでのプロトコル限定の感じがします。

今回はa)の配信ベース+カスタムで対応を考えました。配信プロトコルはRTMP。これはフラッシュで使っていたプロトコルです。クライアント対応はアップルのサポート終了で使えませんが、サーバー間とかではプロトコルとして未だ多く使われているようです。
このプロトコルRTMPを使用したのは、RTP(UDPを使った垂れ流し)類似(間違ってるかも知れませんが)で行いたいと考えていたからです。まあ、会社務め時代(電話システム屋時代)にSIP(ネットでの電話接続プロトコルです。今使われているか分かりませんが。これの前は共通線信号方式SS7でした)を扱っていて、音声や動画を送るのはRTPと言った考えが身についているからかも知れませんが。

配信タブでRTMP等設定。ストリームキーは相手サーバー側と合わせて

これで画像の配信側は設定できますが、これをクライアント側でどのように見るかが次の課題です。
又、実際には配信する際の転送レートやサイズの調整も別途考える必要があります。CPUやネットの容量を圧迫しますので。

3)クライアントで動画を見るために
 上記までの配信では、動画配信制御を扱えるクライアントアプリ(VLCとか)だと簡単に見ることが出来ると思います。しかし、この形態ではなく、Webブラウザで簡単に見られる形式したいと考えておりました。要は RTMPーHTTP変換をするサーバーを導入することになります。

また色々と調べると、HTTP側が幾通りかあるようで今は HLS(HTTP Live Streaming)やMPEG-DASH(Dynamic Adaptive Streaming over HTTP)が主流のようです。これらの方法は動画を分割した動画ファイル(TSファイルらしい)にして、それをクライアントが整合性良く(構成情報も取り込む)ダウンロードして再生のような感じらしい。まあ、ストリーミング動画をそのまま再生ではないよう。
この2主流とは別に、nginxサーバーに「Nginx-http-flv-module」というモジュールがあり、これはRTMPのストリームをそのままHTTPに乗せた感じみたいらしい。
通常なら、主流のHLSで実装した方が良いのでしょうけど、ここは先ずは異端に後者を採用する事にしました。まあ、RTPをHTTPに乗せた感じ(UDPとTCPで変ですが)なので、良いなと感じましたので。
nginx-http-flv-module解説ブログ:Nginxを使って素の状態のブラウザで視聴可低遅延ライブストリーミングをしてみる(Nginx-http-flv-module)

これらを参考にUbuntu22.04.03LTS上に簡単に試行しました。
モジュールは他は特にないので動的リンクで無く、nginx組み込みで作成しました。configure最後の「–add-module=./../nginx-http-flv-module」の部分です。

nginx構築時のconfigure(nginx -Vより取得)
configure arguments: –prefix=/etc/nginx –sbin-path=/usr/sbin/nginx –modules-path=/usr/lib/nginx/modules –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –pid-path=/var/run/nginx.pid –lock-path=/var/run/nginx.lock –http-client-body-temp-path=/var/cache/nginx/client_temp –http-proxy-temp-path=/var/cache/nginx/proxy_temp –http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp –http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp –http-scgi-temp-path=/var/cache/nginx/scgi_temp –user=nginx –group=nginx –with-compat –with-file-aio –with-threads –with-http_addition_module –with-http_auth_request_module –with-http_dav_module –with-http_flv_module –with-http_gunzip_module –with-http_gzip_static_module –with-http_mp4_module –with-http_random_index_module –with-http_realip_module –with-http_secure_link_module –with-http_slice_module –with-http_ssl_module –with-http_stub_status_module –with-http_sub_module –with-http_v2_module –with-mail –with-mail_ssl_module –with-stream –with-stream_realip_module –with-stream_ssl_module –with-stream_ssl_preread_module –with-cc-opt=’-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.20.2/debian/debuild-base/nginx-1.20.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC’ –with-ld-opt=’-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,–as-needed -pie’ –add-module=./../nginx-http-flv-module

このモジュールの他に、クライアント側で再生するためのjsファイル(flv.js)がhtmlと同じフォルダに必要との事。実際のnginxとモジュールの構築はここでは提示しませんので、関係ブログ等参照願います。

因みにiPad Safariだと再生するのですが、iPhone Safariだと再生が出来ていない状態です。共にSafariのJavaScriptは有効なのですが。iphoneはChromeも駄目なので、何か設定が更に必要なのかも知れません。しかし、モジュール本家ではChromeを使えとあるんですが?
PCのChromeやEdgeではOKです。

未だ試行したての状態ですので、今後HTTP側は変更するかもしれません。何せiphoneで動かないとと思いますので。又、最終的に現状とあまり変わらない(露出時間が10秒とか、現在は20秒)のであれば、動画配信とは言えないので公開はしないかもしれません。

2023/12/20 追記
 このストリーミングでは少し前を再度見たい(流星の流れをもう一度とか)場合、戻れないという事に気が付きました。兎に角垂れ流しに近いですからそうだと思います。矢張り少し前を再度再生を考えると良い選択でないので、hlsでの配信方式に変えようかと算段しております。hlsはApple社規格だからiPhoneとかも親和性が良いですから。hlsだとUbuntuは標準PKG(libnginx-mod-rtmp)に入っているので、構築も不要。

コメント

タイトルとURLをコピーしました