質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
PWA(Progressive Web Apps)

PWA(Progressive Web Apps)は、アプリのようなWebサイトを指します。仕様が異なる様々なデバイスで表示でき、インストールも不要。さらに訪問し続けることでユーザーについて学び、強力なPWAとなります。

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

1回答

2289閲覧

PWAでカメラ機能を実装したいです。

hide122

総合スコア0

PWA(Progressive Web Apps)

PWA(Progressive Web Apps)は、アプリのようなWebサイトを指します。仕様が異なる様々なデバイスで表示でき、インストールも不要。さらに訪問し続けることでユーザーについて学び、強力なPWAとなります。

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2023/06/22 05:01

編集2023/06/22 05:07

実現したいこと

PWAでカメラ機能を実装したいです。
ご助言いただけたら幸いです。よろしくお願いいたします。

前提

nextjsでreact-webcamとnext-pwaを導入してアプリを開発しています。
stack overflowでも同一の質問がありましたが、まだ未回答の状況になっています。

発生している問題・エラーメッセージ

React-Webcam を使用したカメラ ビューのレンダリングはiPhoneのブラウザでは機能するのに、pwa としてダウンロードした後は機能しないです。

該当のソースコード

jsx

1const videoConstraints = { 2 width: 1280, 3 height: 720, 4 facingMode: "user" 5}; 6 7const WebcamCapture = () => { 8 const webcamRef = React.useRef(null); 9 const capture = React.useCallback( 10 () => { 11 const imageSrc = webcamRef.current.getScreenshot(); 12 }, 13 [webcamRef] 14 ); 15 return ( 16 <> 17 <Webcam 18 audio={false} 19 height={720} 20 ref={webcamRef} 21 screenshotFormat="image/jpeg" 22 width={1280} 23 videoConstraints={videoConstraints} 24 /> 25 <button onClick={capture}>Capture photo</button> 26 </> 27 ); 28};```

試したこと

service workerのキャッシュが原因かと思い、next-pwaのオプション変更やsw.jsを書き換えてみたましたが、自分の知識不足もあるせいかうまく機能しませんでした。

補足情報(FW/ツールのバージョンなど)

httpsではないとカメラ機能は使えないため、ngrokを使って開発検証を行なっています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

この回答はGPT-4による自動生成回答です

PWAでカメラ機能を実装する際には、getUserMedia APIを使用してカメラへのアクセスを許可する必要があります。また、PWAではHTTPS接続が必須です。

以下のコードは、getUserMedia APIを使用してカメラにアクセスし、ビデオストリームを表示する例です。

jsx

1import React, { useRef, useEffect } from 'react'; 2 3const VideoStream = () => { 4 const videoRef = useRef(null); 5 6 useEffect(() => { 7 if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { 8 navigator.mediaDevices 9 .getUserMedia({ video: true }) 10 .then((stream) => { 11 if (videoRef.current) { 12 videoRef.current.srcObject = stream; 13 } 14 }) 15 .catch((err) => { 16 console.error('Error accessing camera:', err); 17 }); 18 } else { 19 console.error('getUserMedia not supported'); 20 } 21 22 return () => { 23 if (videoRef.current && videoRef.current.srcObject) { 24 videoRef.current.srcObject.getTracks().forEach((track) => { 25 track.stop(); 26 }); 27 } 28 }; 29 }, []); 30 31 return <video ref={videoRef} autoPlay playsInline />; 32}; 33 34export default VideoStream;

このコードを使用して、PWAでカメラ機能を実装できるはずです。ただし、iOSデバイスでは、PWAでカメラアクセスが制限されていることがあります。その場合、代替手段として、input type="file"を使用してカメラから画像を取得する方法があります。

jsx

1import React, { useState } from 'react'; 2 3const ImageCapture = () => { 4 const [imageSrc, setImageSrc] = useState(null); 5 6 const handleCapture = (event) => { 7 const file = event.target.files[0]; 8 const reader = new FileReader(); 9 10 reader.onloadend = () => { 11 setImageSrc(reader.result); 12 }; 13 14 if (file) { 15 reader.readAsDataURL(file); 16 } 17 }; 18 19 return ( 20 <> 21 <input type="file" accept="image/*" capture="camera" onChange={handleCapture} /> 22 {imageSrc && <img src={imageSrc} alt="Captured" />} 23 </> 24 ); 25}; 26 27export default ImageCapture;

この方法では、カメラから画像を取得し、画面に表示することができます。ただし、ビデオストリームを表示することはできません。

投稿2023/06/22 05:03

teratail-ai

Powered by GPT-4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hide122

2023/06/22 05:13

補足情報に追記させていただきましたが、httpsでの通信は行なっています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問