前提・実現したいこと
ラズパイに接続したパイカメラで撮影している映像を、MJPG-STREAMERを使ってローカルPCのブラウザ画面からストリーミングできるようなプログラムを組んでいます。サイズを320x240にした場合、映像は問題なく表示できるのですが、ブラウザ画面にしめる画角サイズが小さいため、たとえば倍の640x480にサイズを変更してみるとONボタンをクリックしても映像が表示されません。サイズに関係する箇所だけ修正しているのですが、サイズを修正することにより、ほかのプログラムに干渉している可能性などあるでしょうか?考えられる原因などアドバイスいただけましたらありがたいです。よろしくお願いいたします。
(8/15追記)シェルスクリプトから直接コマンド入力して動作確認しました。試したことの欄に追記しました。
発生している問題・エラーメッセージ
ブラウザのコンソール画面にはエラーはとくに表示されません。
(8/15追記)シェルスクリプトから直接コマンド入力した際に
”Unable to start capture: Operation not permitte”というようなメッセージが表示されました。
pi@raspberrypi:~/mjpg-streamer-experimental $ mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -d /dev/video0 -y -r 640x480 -f 15" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8000 -w ./www" MJPG Streamer Version.: 2.0 i: Using V4L2 device.: /dev/video0 i: Desired Resolution: 640 x 480 i: Frames Per Second.: 15 i: Format............: YUYV i: JPEG Quality......: 80 i: TV-Norm...........: DEFAULT UVCIOC_CTRL_ADD - Error at Pan (relative): Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Tilt (relative): Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Pan Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Tilt Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Pan/tilt Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Focus (absolute): Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Pan (relative): Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Tilt (relative): Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Pan Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Tilt Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Pan/tilt Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Focus (absolute): Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at LED1 Mode: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at LED1 Frequency: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Disable video processing: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Raw bits per pixel: Inappropriate ioctl for device (25) o: www-folder-path......: ./www/ o: HTTP TCP port........: 8000 o: HTTP Listen Address..: (null) o: username:password....: disabled o: commands.............: enabled Unable to start capture: Operation not permitted i: Can't enable video in first time i: cleaning up resources allocated by input thread
該当のソースコード
sh
1#!/bin/sh 2cd /home/pi/mjpg-streamer-experimental 3mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -yuv -d /dev/video0 -y -r 320x240 -f 10" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8080 -w ./www" -b 4
HTML
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>(sample) MJPG-streamer -> CANVAS Tag</title> 6</head> 7<body> 8 <form action="/" method="POST"> 9 <input type="submit" name="camera_action" value="ON"> 10 <input type="submit" name="camera_action" value="OFF"> 11 </form> 12 13 14<canvas id="canvas" width="320" height="240"></canvas> 15<script> 16const canvas = document.getElementById('canvas'); 17const context = canvas.getContext('2d'); 18 19function render() { 20 const image = new Image(); 21 image.onload = function(){ 22 canvas.getContext("2d").drawImage(image, 0, 0, 320, 240); 23 // 線を描画 24 25 } 26 // ↓ MJPG-streamerの静止画像をロード 27 image.src = "http://192.168.2.1:8080/?action=snapshot"; 28 requestAnimationFrame(render); 29} 30render(); 31</script> 32</body> 33</html>
Python
1# -*- coding: utf-8 -*- 2from flask import Flask, render_template, request 3import subprocess 4import os 5 6script_path = os.path.dirname(os.path.abspath(__file__)) 7 8app = Flask(__name__) 9 10@app.route('/', methods=['GET']) 11def get(): 12 return render_template('index.html') 13 14 15@app.route('/', methods=['POST']) 16def index(): 17 camera_action = request.form.get('camera_action') 18 if camera_action == 'ON': 19 subprocess.call(['/home/pi/mjpeg_streamer_python/mjpgstreamer.sh']) 20 else: 21 subprocess.call(['/home/pi/mjpeg_streamer_python/camera_stop.sh']) 22 return render_template('index.html') 23 24if __name__ == '__main__': 25 app.run("0.0.0.0")
試したこと
シェルから直接コマンド入力して確認してみたところ、やはり640x480に変更したときはストリーミングされませんでした。その際、シェルスクリプトに320x480のときにはでていなかったメッセージが表示されていたので、上記のエラーコードに追記します。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー