Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Electronで動画プレイヤー開発
Search
Yuta Imanishi
February 25, 2021
Technology
1.4k
1
Share
Electronで動画プレイヤー開発
Think! FrontEnd by DMM #3 (
https://dmm.connpass.com/event/203178/)での登壇資料
Yuta Imanishi
February 25, 2021
More Decks by Yuta Imanishi
See All by Yuta Imanishi
動画配信の フロントエンドを支える 4年間とこれから
nisshii0313
1
590
動画配信のフロントエンドって何やってるの
nisshii0313
0
120
"動画"配信のお話
nisshii0313
0
44
Prometheusの話
nisshii0313
0
210
Other Decks in Technology
See All in Technology
Data Hubグループ 紹介資料
sansan33
PRO
0
2.9k
#jawsugyokohama 100 LT11, "My AWS Journey 2011-2026 - kwntravel"
shinichirokawano
0
340
Code Interpreter で、AIに安全に コードを書かせる。
yokomachi
0
7k
ネットワーク運用を楽にするAWS DevOps Agent活用法!! / 20260421 Masaki Okuda
shift_evolve
PRO
2
200
[最強DB講義]推薦システム | 基礎編
recsyslab
PRO
1
160
Choose your own adventure in agentic design patterns
glaforge
0
120
QGISプラグイン CMChangeDetector
naokimuroki
1
360
Claude Code を安全に使おう勉強会 / Claude Code Security Basics
masahirokawahara
3
24k
[OpsJAWS 40]リリースしたら終わり、じゃなかった。セキュリティ空白期間をAWS Security Agentで埋める
sh_fk2
3
220
AIエージェントの権限管理 2: データ基盤の Fine grained access control 編
ren8k
0
120
Do Ruby::Box dream of Modular Monolith?
joker1007
1
320
AI時代にデータ基盤が持つべきCapabilityを考える + Snowflake Data Superheroやっていき宣言 / Considering the Capabilities Data Platforms Should Have in the AI Era + Declaration of Commitment as a Snowflake Data Superhero
civitaspo
0
120
Featured
See All Featured
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
750
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
220
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
43k
Automating Front-end Workflow
addyosmani
1370
200k
GitHub's CSS Performance
jonrohan
1032
470k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
180
The Cult of Friendly URLs
andyhume
79
6.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
200
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
240
Transcript
© DMM.com Electronで動画再生プレイヤー開発 合同会社DMM.com 動画配信事業部 配信基盤グループ 今西勇太 Think ! FrontEnd
by DMM #03
© DMM.com 2 自己紹介 • 名前:今西勇太(@nisshii0313) • 所属:東京理科大学 理学部 数学科
4年 • 現在: 2021卒内定者アルバイトとして動画配信事業部でお世 話になってます • 趣味: 日常系アニメ見たり、ゲームしたり、友人とwebサービ ス作ってみたり、たまーに電子工作 などなど
© DMM.com (余談) 内定者アルバイトの働き方 休日はゼミの準備 や、個人開発をして 自由に過ごしてます こんな感じの生活を かれこれ1年近く続 けています
3 平日のスケジュール (自分の例)
© DMM.com 今日話すこと • Electronの概要 • 新機能をリリースした話 (同時複数再生機能) 今日話さないこと •
Electronでの開発の 0→1部分 (チュートリアルを見た方が早そ う) • Electronの最新情報 (公式docをキャッチアップしてみ てください) 4 はじめに
© DMM.com Electronについてざっくりと 5
© DMM.com Electronとは 6 JavaScript、HTML、CSS でデスクトップアプリを作成できるフレームワーク クロスプラットフォーム対応ができる 中身はChromiumとNode.js Chrome(Chromium)対応だけで良いので、ブラウザ間の差分で苦しまずに済む 一方でクロスプラットフォーム対応の際に、OS間の差分で割と苦しんだりする
(MacとWindowsでのアプリ起動方式の違いなどなど…)
© DMM.com どんな感じで動いているか(ざっくり) Mainプロセス Renderer プロセス Renderer プロセス Renderer プロセス
7
© DMM.com Mainプロセス Renderer プロセス Renderer プロセス Renderer プロセス どんな感じで動いているか(ざっくり)
• BrowserWindowインスタンスを作り、ウェブページを作成 • BrowserWindowインスタンスを破棄することでRendererプロ セスを終了し、ウェブページを閉じる → 全ての作成されるウェブページと、対応するRendererプロセ スを管理している (backend node.js のようなイメージ) 8
© DMM.com どんな感じで動いているか(ざっくり) Mainプロセス Renderer プロセス Renderer プロセス Renderer プロセス
• BrowserWindowインスタンスを作り、ウェブページを作成 • BrowserWindowインスタンスを破棄することでRendererプロ セスを終了し、ウェブページを閉じる → 全ての作成されるウェブページと、対応するRendererプロセ スを管理している (backend node.js のようなイメージ) 9
© DMM.com どんな感じで動いているか(ざっくり) Mainプロセス Renderer プロセス Renderer プロセス Renderer プロセス
Mainプロセスで作成されたBrowserWindowインス タンスによってウェブページが実行される → html/css/jsを使ってChromeの画面に描画す るのとやっていることはほぼ同じ プロセス間通信によって柔軟な表現が可能 10
© DMM.com ここからが本題 11
© DMM.com DMM Player V2とは Silverlight製だった先代に代わる新しい動 画再生プレイヤー 12 ダウンロードした動画をPC上で再生するこ とができる
Electron製
© DMM.com 新機能をリリースしました 13
© DMM.com 複数ウィンドウでの同時再生機能 • 有効にすると、今現在再生しているウィンドウをそのままにして、別ウィン ドウで他の動画を自由に再生できる • ファイル関連付けを行なっておけば、見たい動画を複数選択、ダブルクリ ック、一気にプレイヤーが開かれて再生開始、なんていうこともできたり する
14
© DMM.com 15
© DMM.com 要件の整理 16
© DMM.com • on時に新しくウィンドウが開かれるタイミングは • 既に開いているウィンドウから「ファイルを開く」で複数選択した場合 • 関連付けをした状態で、動画ファイルを複数選択し、ダブルクリック • off時はこれまでのプレイヤーの機能を提供して、デグレーションが無いよ
うにする • 共通して持つべきデータ(認証情報、同時再生機能等の設定情報)と、共 通させないべきデータ(音量、再生速度など)がある 17
© DMM.com 実装 18
© DMM.com 19 Mainプロセス Renderer プロセス Renderer プロセス Renderer プロセス
© DMM.com 20 Mainプロセス Renderer プロセス Renderer プロセス Renderer プロセス
再生する動画情報を、各Rendererプロセスに分配 (Browserwindowインスタンスを立ち上げる時に、プロセス 間通信経由で動画のpath情報を渡す)
© DMM.com 21 Mainプロセス Renderer プロセス Renderer プロセス Renderer プロセス
UIから変更される各種設定(ログイン認証、音量、 再生速度、同時再生のon/offなど)を、 localstorageに保存、都度参照 (音量、再生速度等以外の同期すべき設定につ いては保存時に同期)
© DMM.com 22 これで設計ができたので、後は書くだけ
© DMM.com 23 めでたしめでたし
© DMM.com 24 とはなりませんでした ...
© DMM.com 何がいけなかったのか?? 25
© DMM.com 26 Mainプロセス Renderer プロセス Renderer プロセス Renderer プロセス
UIから変更される各種設定(ログイン認証、音量、 再生速度、同時再生のon/offなど)を、 localstorageに保存、都度参照 (音量、再生速度等以外の同期すべき設定につ いては保存時に同期)
© DMM.com 27 Mainプロセス Renderer プロセス Renderer プロセス Renderer プロセス
UIから変更される各種設定(ログイン認証、音量、 再生速度、同時再生のon/offなど)を、 localstorageに保存、都度参照 (音量、再生速度等以外の同期すべき設定につ いては保存時に同期) 同時再生のon/offはlocalstorageに入れちゃだめだった…
© DMM.com 同時再生設定はlocalstorageに入れちゃだめ なぜか? • localstorageはブラウザの持ち物であり、 Chromiumが立ち上がるまで、 つまりrendererプロセスが立ち上がるまでは参照できない つまり、このままでは 少なくとも1枚ウィンドウが開かれている状況でないと、設定をonにしていて
も同時再生できない… 関連付け再生を使っているユーザーにとっては致命的😢 28
© DMM.com そこで、同時再生設定の保存先を変更 localstorageではなく、アプリケーションディレクトリ内に直に保存する (覗かれて困るようなデータではなかったため、この方法が可能) 使用ライブラリ: electron-store (保存、読み込みのプロセスを扱いやすくラップしてくれる) 29
© DMM.com これで、正真正銘「後は書くだけ」 30
© DMM.com 無事リリースまで辿り着きました 31
© DMM.com ログ分析 32
© DMM.com • リリースして終了、ではなくリリース後のユーザーの反応を可視化し、そ の後の改善につなげています • 弊チームではほぼ全員が、自分でRe:dash(基盤を用意してもらっていま す)を使ってクエリを書いて測定・可視化しています (これは”FEがSQLかけるべき”って話ではないですが、個人的には開発した機能・UI に責任を持つという意味で、書けて困ることはないと思ってます)
33
© DMM.com 同時再生機能の利用者率 34
© DMM.com • コアなユーザー向け機能ではあるかもしれないが、思ったよりも有効化し ているユーザー数が少ない… • 原因の一つであろうレスポンシブ対応について、最新版で対応中 (この動画が流れる頃にはリリースされているかもです!) • 使っていただいて、気になる点・要望・不満等あれば、お寄せいただけれ
ばありがたいです! 35
© DMM.com まとめ 36
© DMM.com まとめ • Electronではブラウザ依存しない形でのクライアントサイドでのデータ保 存ができるので、用途に応じて使い分けていくと良さそうです。 もっと良い方法があれば是非教えていただきたいです! • FEでもクエリを書いて、軽くでもリリースの効果測定ができると良いのか なって個人的には考えてます
37
© DMM.com 良ければこちらもどうぞ 38
© DMM.com 39
© DMM.com • 配信基盤グループの活動についてもっと知りたければこちら https://inside.dmm.com/archive/category/配信基盤 • Electronでのプレイヤー開発についてもっと知りたければ特にこちら 『Electron製動画再生プレイヤー「DMM Player v2」』
https://inside.dmm.com/entry/2020/02/06/evolving_content_delivery_platform _01 40
© DMM.com ご清聴ありがとうございました 41