Closed csenet closed 2 years ago
カメラサーバーのサンプルコードに関して https://github.com/easytarget/esp32-cam-webserver このコードを書き込んだところ正常に動作した。
RTSPのStreamを変換してWebRTC(SkyWay)側にCastしてあげるための変換サーバーを構築する必要がある
@sys-fork こちらのタスクをお願いできませんか? 部室の方にESP-EYEのボードが置いてあります。 内容としては、RTSPのStreamを受信してWebRTCにCastしてあげるようなサーバーを実装するという感じです。 WebRTCの通信周りは昨年のコードであるvideoCast周りが参考になりそうです。
わかりました.わからないところは調べたり人に聞きつつになると思います.
@ruu413 昨年度使用したSkyWayのアカウント情報わかりますでしょうか?いつものアカウントでログインしてもダメだったので。
SkyWay の方はまだ触っていないので私もわかりません...
ESP32-CAM_RTSP を ESP-EYE に書き込んで実行してみた.Wi-Fi にはつながっていることを確認したのですが,リポジトリの view.py (OpenCV で RTSP の配信を見るコード) でも VLC でも RTSP 配信を見ることはできず,原因を探しています.
@sys-fork なるほど。ESY-EYEでRTSPを実行している動画があったので参考までにどうぞ。 SourceCode: https://github.com/arkhipenko/esp32-cam-mjpeg YouTube: https://www.youtube.com/watch?v=XRcTUiXUxEM
SkyWayに関しては新しくKokenでアカウントを作成しました。アカウント名とパスワードはいつものやつです。 SkyWayのDocument: https://webrtc.ecl.ntt.com/documents/webrtc-gateway.html#how-to-use
@csenet esp32-cam-mjpeg を書き込んで動作させることができました.動画が少しカクつくのと,おそらくこれは RTSP では使えず,Motion JPEG (mjpeg) というもので動いていることが気になります.ESP32-CAM の標準のサンプルコードの CameraWebServer と同じ仕組みかと思います.
@sys-fork 検証ありがとうございます。なるほど、mjpegというformatで動作しているんですね。 例えばそのmjpegをJSでcaptureしてSkyWayに流すといったようなことは可能でしょうか? 映像をSkyWayに流し込む部分ですが、SkyWay Gatewayを使うという手法 or HTML+JSで実装するという方法の2つがあると思うのですが、おそらく後者の方が手軽にできそうなので少し実装を試すなどしていただけませんか? 参考: https://qiita.com/suo-takefumi/items/2ec115841c22fa863e3f https://developer.mozilla.org/ja/docs/Web/API/HTMLCanvasElement/captureStream おそらくmjpegをcanvasに描画してあげて、それをcaptureしてstreamとしてskywayに流すという方法が雑ではありますが一番シンプルかもしれません
canvas タグに描画することで stream として SkyWay に流せるという意味ですか. https://webrtc.ecl.ntt.com/documents/javascript-sdk.html#_2-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E6%88%90 あとこれは別のこととして質問なのですが,SkyWay Gateway ってローカルで動いているサーバーみたいなイメージでよろしいんでしょうか...
@sys-fork canvasタグに描画されるとそれをcaptureしてstreamとしてSkyWayに流すことができるという意味であっています。 SkyWay GatewayはWebRTCでしゃべれるスペックがない機器でも、WebRTCを使えるようにするための中継をしてくれるようなサーバーという感じですかね
ESP-EYE に書き込むコードと,mjpeg 配信を受け取って SkyWay に流すサーバ(と言っても HTML + JS だけ)のコードはリポジトリのどこに追加すればいいですか?
@sys-fork ありがとうございます。特段用意してないので、skywayに流すコードの方は/frontend/momo_sender
ディレクトリの中に適当なファイル名で追加お願いします。
また、ESP-EYEに書き込むコードの方は新しくルートにhardwareというディレクトリを作成して、その中にプロジェクの配置をお願いします。
develop
ブランチへのPRを出してreviewerに私を指定してもらえれば、ディレクトリ構成含めコードレビューします。
@sys-fork こちらでも動作しない原因を探してみようと思うので、ある程度コードがまとまったら適当なブランチにPushして教えてもらえると助かります。
@csenet 対応が遅くなってしまい申し訳ありません.いくつか質問があります.
develop
ブランチが見当たらなかったので,skyway-develop
というブランチを新たに作成する形で問題ありませんか?/frontend/momo_sender
ディレクトリに送信側と受信側のコードを両方含める形でよいですか?@sys-fork
/frontend/camera_sender
とかを作ってもらって送受信側両方のコードを配置してもらった方が良いかもしれません。BSD 3-Clause “New” or “Revised” License
ライセンスなので以下のラインセンス表記をすれば問題なさそうです。
Copyright (c) 2015-2020, Anatoli Arkhipenko.
All rights reserved.
skyway-develop
ブランチに push しておいたので確認をお願いします.
/hardware/esp32-cam-mjpeg
の下の(ライセンス表記のものを除く)ファイルを同一階層に置いたままコンパイルして書き込んでください(SSID とパスワードの書き込みをお願いします)/frontend/camera_server/sender.html
の IP アドレスを書き換えてください/frontend/camera_server/
にて python -m http.server 8080
(Python3 の場合) などを実行してローカルでサーバーを立てて localhost:8080/sender.html
や localhost:8080/receiver.html
から確認できますsender.html
の画面を下にスクロールすると receiver.html
に表示されている Peer ID を入力する要素があるので,入力し,発信ボタンを押してくださいreceiver.html
の方の画面に映像が表示されることが期待されるのですが,表示されず,ブラウザのコンソール等を見てもエラーがないため困っています@sys-fork ありがとうございます。こちらの方でも確認してみます。
@sys-fork 完全に理解しました。おそらく、表示されていない原因はCORSですね。
なんか、captureStreamをするときにcanvasに描画されたsrcにCORSのヘッダがないとセキュリティ的な問題で勝手に弾かれるっぽい。(エラーすら表示されないから原因を探るのが非常にめんどくさかった)
ESP-EYE側のコードを変更して、Access-Control-Allow-Origin
ヘッダを追加してあげれば大丈夫そう。
@csenet ありがとうございます(おつかれさまです).対応します.
/hardware/esp32-cam-mjpeg/esp32_cam_mjpeg.ino
では,HTTP ヘッダに Access-Control-Allow-Origin: *
と書かれているので,CORS エラーは発生しないはずなんですよね...(不可解です)
@sys-fork クライアント側でも変更が必要なようです。crossOrigin = 'anonymous';
を追加したらうまくいきました。
何がしたいか?
車体カメラの映像を配信するためにWebRTCで配信を用いて配信を行えるようにする。
何をするか?
ESP-EYEのサンプルプログラムを使うとESP内部のサーバーから映像を確認することができる。 ここでは、配信された映像をWebRTCを介して配信できるようにする。 具体的な調査ができていないのでその周りもできればお願いしたい。