なるべく費用を抑えて一眼レフのWebカメラでビデオ会議(Zoom)に参加する方法

ビデオ会議用のカメラを探していたところ、LogicoolのWebcamは3万円以上する、しかも在庫がないという状態だったので、同じような予算で一眼レフを実現できないかと模索。

ググってみると一眼レフをWebcamとして使うというサイトが沢山があるが、そもそもカメラ(高級!)を持っている人がそれをWebカメラとして使うといったものが多く低予算ではできるのかと調べてみました。Cannonは最近Webカメラ用途のソフトウェアを出しているらしいが、対応機種が高級カメラなので厳しい)

手っ取り早く実現するには下記が必要であることがわかった。

  • 一眼レフのデジタルカメラ (HDMI out がclean出力可能)
  • ビデオキャプチャーのデバイス
  • 明るいレンズ(f1.4ぐらいあればよさそう)

HDMI outがCleanとは、映像のみ出力できること。昔の機種では、レンズの状態の情報なども同時に出力されてしまうとか。OBSというソフトでCropもできるようだが、できればそのプロセスを踏みたくない。

カメラ

安さ重視なのでなるべく型番が古くて、かつHDMI cleanな製品を探すとSonyのα5100がよさそうだとわかった。Amazonの中古で購入。ボディのみ。25,800円

電源

ビデオ会議中にバッテリー切れで中断できないので、電源アダブタを買う。Sony純正は高いので互換製品(at your own risk)をAmazonで。2999円

レンズ

とにかく明るいレンズ。昔使ってたカメラもf1.4で綺麗な写真がとれたので。オートフォーカスは高いのでマニュアル。ビデオ会議だとあまり前後に動かないのでマニュアルで十分と判断。将来はオートフォーカス欲しいけど。。で、中華レンズが安いことがわかった。 メルカリで購入。7000円(新品でも9000円の安さ! f1.2!)

HDMIキャプチャカード

これも中国製品で安いのがある。調べると1000円ぐらいだったみたいだが、リモート需要か3000円しました。

キャプチャカードとカメラの接続に使うケーブル。カメラ側はマイクロタイプDオスで繋ぐ。

接続

特にドライバも入れる必要なくZoomで利用できた。16:9で出力して、Zoom側のカメラの設定のHDの項目にチェックを入れれば良い。

結果

ボケがでる!段違いに高画質。ドヤ感半端ない。結局4万かかったけど、、明るいカメラも同時購入したと思えば問題なし。

Cloudfront経由でS3にID/Pass認証(Basic Authentication)をかける(CORSの場合は、かけない)方法

まる二日間格闘して設定が完了した。かなりの試行錯誤したので備忘録としてまとめてみる。

Goal

  • s3上のファイルにパスワードをかけて直接ファイルをダウンロードできなくする。
  • Webサービスにログインしているユーザは、ファイルをダウンロードできる。

結論

結論から先に書くと、下記のような感じ。前提として、https + Basic authenticationを信頼する(http + basic authはダメ)。

  • Clientにcrossorigin="anonymous"をセットし、http requestにorignを含ませる。
  • Cloudfront+LambdaでBasic Authでフィルタリングする。Originを含む場合はパスワード必要としない。
  • S3とCloudfrontではCORS関係のヘッダをパススルーする。

クライアント(Web browser/HTML)の設定

今回は動画ファイルのダウンロード・再生のUIだったので、下記のようにcrossoriginを設定する。

ちなみに<source src=””>だとうまくoriginが送信されなかった。

S3のCORSの設定

いつも悩むCORSの設定。AllowedOriginでソースを限定しておくと安心。

AWS Lambdaの設定

Requestヘッダにoriginがある場合は、Basic Authは適用せずそのままレスポンスを返す行を追加した。これによし、サーバからのアクセスは許可させる。

ハマりポイントは、リージョン。S3が東京にあってもバージニアにしないといけない。しかし、ログのCloudwatchは東京リージョンにある。

Cloudfrontの設定

  • Basic Authなのでhttpsオンリー
  • CORSにOPTIONSが必要なときがあるらしいので追加
  • whitelistでCORS関連を配信
  • TTLはゼロでテスト
  • 下記では省いたが、DNSなどを設定した。デフォルトのCloudfrontのホスト名ではなく自ドメインでアクセスできるように。
  • ViewリクエストにLambdaのARNを追加。ハマりポイントは、Lambdaのバージョンによって、最後の数字が変わること。Lamdaをpublishしたあとは変更の必要あり。

S3のパーミッション変更

ここまででCloudfront経由でのアクセスはできるはず。S3に外部からアクセスさせなくするために下記を確認。

  • Block all public accessのチェックを外す
  • Block public access to buckets and objects granted through new public bucket or access point policies -> On
  • Block public and cross-account access to buckets and objects through any public bucket or access point policies  -> On
  • Access Control Listにeveryone等権限がないか確認

S3-Cloudfront間の設定

CloudfrontのOriginのタブからOriginを編集する。

  • Restrict Bucket Accessにチェック
  • Original Access Identityで必要ならば新しいものを作成
  • Grand read permissions on Bucketで”Yes, Update Bucket Polity”をチェック

まとめ

上記でうまくいくはず。デバッグはChromeのdevelopper toolのNetwork tabでHTTP request を確認、consoleエラーがないか確認、lambdaのconsole.logで確認とデータの中身を追っていく必要がある。

 

2020 Goals

40歳にもなると一年があっという間なので今年のゴールを設定しておく。

  • Todo Listを毎日使う
  • 本を月に2冊読む・聞く
  • 毎日運動する
  • 毎週一つブログでアウトプットする

Todo Listを毎日使う

Todo Listを使うと非常に生産性の高くなるのだが、すぐに使わなくなってしまう。今年は毎日使うことを目標にする。ツールは、Todoist + Toggl(pomodoro)に決めた。

本を月に2冊読む・聞く

通勤が徒歩になり、本を読まなくなった。英語のAudio bookは続かなかったので今年は日本語で挑戦する。2週間に1冊が目標。

毎日運動する

半年ほど毎日軽いジョギングorウォーキングを行っているのでこれを継続する

毎週一つブログでアウトプットする

日々思うことがあるのに何もアウトプットしていないとダラダラとしてしまう。毎週なにか書き留めておこうと思う。

Released iOS/iPadOS app, Wazari Browser, to make use of external keyboard


I just released iOS/iPadOS browser. This browser has the following functions.

  • Customizable shortcuts to operate browser. e.g. Change tabs without touching screen.
  • Panes to split views vertiacally or horizontally.
  • Hit-A-Hint – without touching, click links to move pages.
  • Customizable modifiers. e.g. swap capslock with ctrl key.
  • Customizable default search engine – DuckDuckGo or Google
  • Exclude web sites not to use keymapping. Some dynamic web site doesn’t use Input type=text or textarea, which Wazari keymapping doesn’t work. But you can exclude these website so you can still type on it.
  • Histories to go back easily
  • (Optional and Paying serivce) Integrated to Wazaterm so you can terminal.

Wazari browser is my first open source project and also a sub project of Wazaterm.

Download from App store


I use react-native(iOS only) to build this to catch up recent React/React Native. I will post what technique that I used for this with the following posts.

Mov to mp4/gif with ffmpeg

For the sake of my memory.

mov to mp4

mov to animation gif

macOSでkey repeatが動かない時の対処法

実際はkeyrepeatは作動している。(例えば、$などはブラウザ上でキーリピートするし、Terminalでは問題なく動く)
この現象のときは、下記をターミナルを開いて打つ。

そして、再起動。

Railsで特定のバージョンのmigrationをロールバックする方法

git branchを行ったり来たりしていてしっかり管理しないとlocalでゴミテーブルができるのでしっかりdownさせる。

db:migrate:statusでマイグレーションの状態を確認。

最初の数列をコピペしてそのファイルだけ戻す。

その後必要ならSQLでmigrationエントリを消す

Sidekiqでdelayを使う。しかし、クラスメソッドを使いダイナミックなQueue名を使わない

DelayedJobと比べると使い方が少し違うので注意が必要。

Extentionを読み込むとdelayが使える

config/initializers/sidekq.rbに下記を追加(存在しない場合は作成)。これで毎回performを書かなくて良い。

これで、User.delay.my_methodが使える!

https://github.com/mperham/sidekiq/wiki/Delayed-extensions

インスタンスメソッドを使わない

インスタンスメソッドでも一見動いたので大丈夫かと思ったが実際運用してみるとだめだった。クラスメソッドでWrapして使いましょう。よく見ると太字でだめと書かれている。

I strongly recommend avoiding delaying methods on instances. This stores object state in Redis which can get out of date, causing stale data problems.

ランタイム時に動的なQueue名を指定しない

それ用のライブラリが別途あるのでそれを使用。スタティックなQueue使いにくい。。ユーザ毎にキューを用意したい。。

https://stackoverflow.com/questions/20133346/how-can-i-create-sidekiq-queues-with-variable-names-at-runtime

[LXD/LXC] lxd imageのexportとimport方法

LXDのversionは3.03

LXD export

作成してあるコンテナのイメージではなくて初期起動時にダウンロードしてくるOSイメージをexportするにはlxc launchで指定するイメージ名を引数にいれてexportする。

LXD import

version3.03ではtar.xzとsquashfsが作成されるのでこれを2つとも指定し、importする。aliasで名前をイメージ名を指定できる。:(コロン)は使えないので注意。

launchまでの速度比較

同じfingerprintのイメージをimageリストに持てないので、ubuntu16と18で比較してますが、、だいたい同じになると思います。

イメージダウンロード後にLaunch

約3分半。

importしてlaunch

52秒ぐらいで2分半は早く起動できることを確認!

RedashのLet’s encryptによるhttps化

Business IntelligenceのRedashはデータから経営判断するとても良いツールです。
SQLさえ書ければ、難しいプログラミング知識も必要のないのでテックに強いスタッフにSQLを勉強してもらえれば使ってもらえます。

AWSのAMIイメージも用意されてるのですぐに導入できます。しかし、TLS/SSL化されてないので大事なデータを傍受されてしまう危険性があります。
そこで、https化ですが、少し手間取ったので記録しておきます。

AMIを中身を見るとわかるのですが、DockerでRedash周りのプロセスが動いています。なので、方針として、ホスト側にlet’s encryptを入れる。Let’s encryptのキーがあるディレクトリをdockerからマウント。ホストでcertbotのリフレッシュで期限切れになるのを防ぐという感じです。

1. ホスト側にcertbot導入

方法はいろいろあると思いますが、AWSのRoute53を利用して作成しました。

参考:https://qiita.com/komazarari/items/88c1ed18765fb7cab6c1

https://certbot.eff.org/lets-encrypt/ubuntubionic-other通りにcertbotをインストールして、

pipでcertbot-dns-route53アドオンをインストール

AWSのsecretkey/apikeyをセットして、下記で/etc/letsencrypt以下にファイルを作成。systemd経由で期限切れの確認が走っているみたい。

2. Redash nginxのconfig作成

参考:https://gist.github.com/arikfr/64c9ff8d2f2b703d4e44fe9e45a7730e

redashのインストール場所に行って、ディレクトリとファイルを作成。

nginx.confは下記のようにした。

3. Redashのdocker composeファイルの編集

/opt/redash/docker-compose.ymlを開いて、

その後、リスタート。

systemdのpost-hook設定

直接certbot.serviceファイルを触るのはあまり良いプラクティスでなさそうだが、、

で開いて下記を追加(/usr/local/bin/certbotに変更。でないとバージョンのエラーで失敗していた)

sysytemdのコンフィグをリロードすればOK.

Scroll to top