昨今のブラウザではPicture-in-Picture APIを使いPinP表示する事が簡単にできますが、現状対応しているコンテンツは動画のみです。
基本的にvideo
要素に表示されている内容のみがPinP表示されるわけですが、canvas
要素を用いcaptureStream()
を行えば自由なコンテンツをPinP表示する事が可能になります。
たとえば画像をPinP表示する例を示します。
以下の様な特定の画像を表示しつつ、ボタンをクリックするとPinP表示をトグルできるHTMLとJSを用意します。
注目する箇所は以下です。
- 画像を
drawImage()
でcanvas
要素に表示
- それを
captureStream()
でvideo
要素のメディアソースとして指定
- ボタンクリックで
video
要素をPinP表示
canvasにて表現できるものであれば比較的容易にPinP表示もできる事が分かります。
アイデア次第でPinPの世界も広がりそうです。
参考: https://www.w3.org/TR/picture-in-picture/
参考: https://googlechrome.github.io/samples/picture-in-picture/audio-playlist
参考: https://sbfl.net/blog/2021/04/30/javascript-html-picture-in-picture/