Webサーバーを介してRaspberry PiカメラモジュールからH.26​​4ビデオをストリーミングするにはどうすればよいですか?


50

だから今日、ラズベリーカメラを手に入れて、静止画がうまく動作するようになりました。

JPEG形式で画像をキャプチャします。

raspistill -o image.jpg

H.264形式で5秒のビデオをキャプチャします。

raspivid -o video.h264

すぐに利用できるHTML5を活用したいので、余分なアプリケーションをインストールする必要はありません。以来クロム / Safariが組み込まれているH.264 I用デコーダちょうどURLに私のブラウザをポイントして、ストリームを見たいと思います。

どうすればこれを達成できますか?


2
私もこれに取り組んでいます。nginxなどにMP4サポートを追加する必要があると思います。突破口があるかどうかをお知らせします。
レカンタ

@recanthaストリーミングビデオに新しいブレークスルーがありましたか?
ピョートルクラ14年

3
私が見つけた最良の解決策は、Silvan MelchoirのRaspiMJPEGに基づいています。すべてを説明しているRaspberry Pi Foundationのフォーラムへのリンクを含む私のブログをご覧ください。(recantha.co.uk/blog/?p=11176
recantha

2
さまざまなデバイスにストリーミングできるのはすごいですね。どのFPSとラグが発生しますか?? 私はuv4lをVLCとOSDでかなりうまく動作させることができました。非常に短くて悪いデモ。すぐに良いものを作るでしょう。何時間もの試行錯誤の後、夜遅くに作られました。youtu.be/LO10Ytlauag
ピョートルクラ14年

@ppumkin RaspiMJPEGの実行中にPythonスクリプトを介して記録するにはどうすればよいですか?ビデオの記録開始はできますが、.h264形式で記録します。
コデレイモン

回答:


32

HLSを使用したスト​​リーミング

ライブビデオをストリーミングするApple独自の方法。HTTPライブストリーミング(HLS)と呼ばれ、Appleのテクノロジーでのみサポートされています。Google(Chromium / YouTube)はダッシュmpegと呼ばれる独自の実装を使用しており、他の人は混乱しているか、MP4にカプセル化されたH.264を使用しています。

長所

  • LAN上のHD 1080pを、.m3u8プレイリストをサポートする任意のデバイスにストリーミングできます
  • HTML5セマンティクスを使用します(ただし、標準化された形式ではありません)
  • jwplayer 6などのサードパーティプレミアムソフトウェアの一部のサポートを使用できます

短所

  • 少なくとも5秒の遅延があります(このアプリケーションでは、iPhoneからAppleTvへのミラーリングを使用して、なんとか50ミリ秒-500ミリ秒を達成します)。そのため、ロボットやヘリコプターなど、即時の反応が必要なリモート制御アプリケーションには適していません。
  • フラッシュする可能性のあるブラウザのサポートを拡大したい場合は、サードパーティのソフトウェアの支払いが必要です。

m3u8

  • .m3u8は、単にM3U形式のUTF-8バージョンです。(.m3uファイルにはさまざまなエンコーディングがあります。)一部の人々は、.m3u8から.m3uへの名前変更はすべてのHTML5ブラウザーで期待どおりに機能すると主張しています。これを試しましたが、うまくいきませんでした。

このストリーミングの背後にある概念は、少なくとも5秒の短いファイルのセグメント(この例では、高速化するための新しい方法が利用可能)が記録され、適切なファイルに保存されるということです。プレイリストファイルは新しいファイル名で更新され、クライアントは常にこのプレイリストをポーリングし、最新のファイルをダウンロードします。クライアントでビデオをシームレスにマージするために、いくつかのメカニズムが関係しています。他の開発者が、それは努力のAA多くを必要とし、(ライブストリーム??えっための適切なHTML5の標準が存在しないにもかかわらず、HTML5規格に準拠していないため、これを実装したくない理由はここにあるため息します)。

インストール中

あなたはコンパイルする必要がffmpeg- 使用していないapt-get installためにFFmpeg

これは5時間かかることができます-それは持っているセグメントのストリーミングをサポートするバージョン1.1以上とすること。これを使用してクローンを作成し、コンパイルできます。

cd /usr/src
git clone git://source.ffmpeg.org/ffmpeg.git

cd ffmpeg
./configure
make && make install
  • nginxの(エンジン-X)をインストール - nginxのは、特別に埋め込まれたクレビス用に設計されており、軽量かつ最速れるPHPは、現時点で入手可能なWebサーバーを-enabled。(はい、それはかさばるApacheよりも優れています)
  • ディレクトリを作成します。たとえば、wwwフォルダーにライブし、 /usr/share/nginx/www/

のようなBashスクリプトファイルを作成しvideo.shchmod +xそれに適用して貼り付けます。ベースフォルダーをHTTPサーバーが存在する場所に変更します。私が使用したnginx/usr/share/nginx/www/

#!/bin/bash

base="/data/live"

cd $base

raspivid -n -w 720 -h 405 -fps 25 -vf -t 86400000 -b 1800000 -ih -o - \
| ffmpeg -y \
    -i - \
    -c:v copy \
    -map 0:0 \
    -f ssegment \
    -segment_time 4 \
    -segment_format mpegts \
    -segment_list "$base/stream.m3u8" \
    -segment_list_size 720 \
    -segment_list_flags live \
    -segment_list_type m3u8 \
    "segments/%08d.ts"


trap "rm stream.m3u8 segments/*.ts" EXIT

# vim:ts=2:sw=2:sts=2:et:ft=sh

プレイリストを読み込むHTMLファイルを作成します

<html>
  <head>
    <title>PiVid</title>
  </head>
  <body>
    <video controls="controls" width="1280" height="720" autoplay="autoplay" >
      <source src="stream.m3u8" type="application/x-mpegURL" />
    </video>
  </body>
</html>

サポート

  • iPhone、ページを開きますが、QuickTimeにドロップします。品質は本当に素晴らしいです!
  • Windows Safari、ストリームは正常です。
  • MacintoshまたはWindows、QuickTime。ストリームは正常です。
  • Android 2.3.5で動作しませんでしたが、2.1.x以降でサポートされるはずでした
  • Windows、Chrome-なし
  • Windows、Internet Explorer 10 ---なし(サポートされていないビデオタイプ)
  • Windows、VLCメディアプレーヤー -なし

参照:http : //www.raspberrypi.org/phpBB3/viewtopic.php?p=351392&sid=5b9a46f5eea2c7a0887d2efdfa7edade#p351392

元のコード:https : //github.com/AndyA/psips/blob/master/examples/hls.sh


ffmpegのコンパイルの高速化に関して RPIの低い計算能力とffmpegの長いコンパイル時間を回避するために、私はQemuWheezeで使用しようとしましたが、ログインでいくつかの障害に遭遇し、Archイメージで試さなければなりませんでした。これはうまくいきました。また、VirtualBoを介してUbuntuイメージSqeezeを試みました
luboP

2
古いセグメントを自動的に削除する方法はありますか?しばらくすると、SDカードがいっぱいになります。また、これらを削除して、これをtmpfsで実行し、SDカードを台無しにしないようにしてください。
-Dimme

2
@Dimmme -segment_wrap 10ffmpegの引数として追加すると、最大10個のセグメントファイルが使用されます。
収集機

誰かがこれを機能させましたか?ファイルは作成されますが、SPS / PPS情報が欠落しているように見えるため、ビデオはiOS SafariまたはVLCで再生されません。stream.m3u8にはsegments/、セグメントファイルを指すときにも含まれていなかったため、セグメントフォルダーを削除しました。私は何かを誤解しましたか?
収集機

PSIPSフィルターバイナリにストリームをパイプする必要があります。raspicamの最新バージョンはこれを行うはずでしたが..何らかの理由で、PSIPSなしで動作させることができませんでした
Piotr Kula

23

UV4L MMAL

MMALを非常に効率的に実装するLinux-Projects V4L2ドライバーの更新について@mpromonetからのコメントに感謝します-しかし、それはまだ進行中の作業です。

以下の手順に従って、linux-projectリポジトリをインストールし、追加でUV4Lドライバーをインストールします。次に、サーバーとmjpegをインストールします。必要に応じて、他の人も試してみてください。

すべてをインストールした後、ポート8080でHTTPサーバーにアクセスできます。また、/etc/uv4l/confファイルを確認し、mjpegまたはH.264が必要な場合に設定する必要がありますが、組み込みWebを介していくつかの設定を調整できます。サーバ。

HTML 5

これは私たち全員が待ち望んでいたもの(WebRTCと呼ばれます)であり、新しいドライバーのおかげで(Raspberry Pi 2で)うまく機能します。

まず、次の手順に従ってくださいhttp://www.linux-projects.org/modules/sections/index.php?op=viewarticle&artid=14

curl http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc | sudo apt-key add -

# Add the following line to the file /etc/apt/sources.list
# deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy main

sudo apt-get update
sudo apt-get install uv4l uv4l-raspicam

sudo apt-get install uv4l-raspicam-extras

次に、Raspberry Pi 2にWebRTCをインストールします(Raspberry Pi 1の場合は、リンク先のサイトで他のオプションを確認してください)

sudo apt-get install uv4l-webrtc

すべてのドライバーを再起動して、

http://raspberry:8080/

これで、ChromeやFirefoxのような最新のブラウザーに直接、低遅延で高品質のビデオストリーミングが提供されます。(Safariかもしれませんが、WinblowsとInternet Explorerをもう実行しないので確認できません... eh)

MJPEG

デフォルトではmjpeg、1080p で使用され、非常に遅くなります。800x600のフレームサイズに調整し、iSpyなどを使用してビデオを処理しました。セキュリティのために、鮮明なビデオで約10 fpsを取得します。このドライバーの前の640x480の3 fpsよりもはるかに優れています。Safari、Android Chrome、その他ほとんどすべてのiPhoneで動作します。

http://raspberrypi:8080/stream/video.mjpeg

これはまた、今もmotionずっとうまく機能するはずだということを意味します(まだテストと比較が必要です)。使用する構成を設定するv4l2_palette 8か、v4l2_palette 2

H.264

これは現在「ストリーミング」で修正されており、VLCメディアプレーヤーを介してH.264ビデオを見るために長い時間をかける必要はありません。ストリームはsill RAW H.264であるため、別の場所で動作させる必要がある場合は、ストリームを分離するか、トランスコード/カプセル化する必要があります。bitrate=xxxxxxWi-Fi経由でストリーミングしている場合は、構成ファイルを調整する必要があります。

VLCメディアプレーヤーでは、H.264デマルチプレクサを使用することを伝える必要があります。したがって、GUIを使用している場合は、引数を必ず追加してください:demux=264。コマンドラインからvlc http.../video.h264 --demux h264。そうしないと、カメラのLEDがオンになっていても、空白の画面が表示されます。

http://raspberrypi:8080/stream/video.h264

出来上がり!約500ミリ秒の遅延を伴うHDストリーミング(200ミリ秒まで調整)。古い方法を使用するよりも間違いなく簡単です。品質とFPSは優れていますが、これをMP4またはWebMにトランスコードせずにHTML5に埋め込むことはできません。これが本当に素晴らしいスタンドアロンサーバーになるので、これが実装されることを願っています。

RTSP / RTMP / RTP

サポート/実装されていません

http://www.linux-projects.org/uv4l/tutorials/rtsp-server/

HLS

サポート/実装されていません


video4linux使用可能なドライバーはまだありません。つまり、ffserverを使用して/dev/video0、USB Webカメラを使用して、またはUSB Webカメラのようなデータをストリーミングすることはできません。

そのため、HTML5ブラウザーに適したライブストリーミングを見つけるのは非常に困難です。


今そこにあるvideo4linuxドライバは、[公式V4L2ドライバbcm2835-V4L2とユーザ空間のV4L2ドライバlinux-projects.org/modules/sections/...
mpromonetは

本当のv4lドライバーですか、それともひどいパフォーマンスを提供するraspividのラッパーですか?
ピョートルクラ14年

1
公式ドライバーはMMALインターフェイスを使用します。ソースコード[ github.com/raspberrypi/linux/blob/rpi-3.12.y/drivers/media/…を参照してください。パフォーマンスは正しいようです。
mpromonet 14年

私はこれで3日間遊んでいます。mjpegエンコードは最終的にはるかに安定しており、iPhone、Android、またはiSpyで800x600 @ 10fpsを確実に表示できます。h264は1080p 30fpsで優れており、--demux h264フラグを使用してvlcで表示できます。モバイルで使用したり、ウェブページにmp4 / webmとして埋め込むために、これをトランスコードする必要があります。しかし、それは効率と品質の面で本当に素晴らしい前進です。ゴミである「他の」UV4L non linux-projectドライバーと混同しないでください。
ピョートルクラ14年

H264メソッドに:demux = 264を追加するのは、vlcクライアントではなくvlcサーバー用です。スマートフォンでVLCでcompatibiltyを取得するにはラズベリーにストリーミングを開始するには、コマンドラインがあるので:/usr/bin/cvlc v4l2:///dev/video0 --v4l2-width 800 --v4l2-height 400 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:8080}' :demux=264
ハイメ・M.

10

MJPEGを使用したスト​​リーミング

U4VL

HTTP(S)サーバーに組み込まれたカーネルインターフェイス。

http://www.linux-projects.org/uv4l/tutorials/streaming-server/

Raspberry Pi Cam Webインターフェイス

Webサーバー、dvrのような、マルチターゲットストリーミングサーバーを展開するsilvanmelchiorによる素晴らしいプロジェクト。詳細情報が必要

https://github.com/silvanmelchior/RPi_Cam_Web_Interface

レガシー方式

mjpgでのストリーミングは、Internet Explorer 6を含むほぼすべてのブラウザーでサポートされています。H.264以前に使用されていた多くのカメラはハードウェアmjpgを使用していました。それら。一部のデバイスは最大25 fpsを達成でき、接続に問題がある場合でも少なくとも1 fpsを取得できます。

JPEGファイルはインターネット上でストリーミングするには大きすぎたため、H.264ははるかに高速で高品質のプロトコルであるため、HDカメラではmjpgのサポートが廃止されました。

カメラモジュールを自然に使用してH.264をブロードキャストする方法がないため、これは実行可能なフォールバックのようです...

ほぼ瞬時ですが、1.5 fpsを超えることは期待できません。これはraspistill非常にすっきりしています!100 fpsに設定されたタイムラプス機能を使用すると10 fpsになりますが、機能しませんraspistill。それは単に詰まってしまい、深刻なパフォーマンスの問題が発生するためです。

  1. /tmp速度のためにRAMを使用するように変更/etc/default/tmpfs-変更RAMTMP=yes(これはfpsを上げるための努力ですが、raspistillは自己を維持できません。)
  2. リブート
  3. apt-get install git
  4. apt-get install libjpeg8-dev
  5. apt-get install libv4l-dev
  6. apt-get install imagemagick
  7. cd /usr/src、mkdir mjpg-streamer、cd mjpg-streamer ...
  8. git clone https://github.com/engine12/mjpg-streamer.git
  9. make USE_LIBV4L2=true clean all
  10. オプションエラーがある場合
  11. sudo ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h
  12. sudo ln -s /usr/include/lib4l2.h /usr/include/linux/lib4l2.h
  13. makefile内で、input_fileとoutput_httpを除くすべてのプラグインをコメント化して、再度makeを実行します。ここで多くの問題がありました。
  14. バイナリmjpg_streamerとそのプラグインinput_*.sooutput_*.soにコピーし/usr/local/binます。それ以外の場合は、srcディレクトリから直接実行します。
  15. オプションの終了
  16. mkdir /tmp/stream
  17. raspistill -w 640 -h 480 -q 5 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 &
  18. LD_LIBRARY_PATH=./ ./mjpg_streamer -i "input_file.so -f /tmp/stream" -o "output_http.so -w ./www" (バイナリとプラグインがある場所でこれを実行します)
  19. 後藤 http://<IP-address>:8080
  20. いくつかのオプションがあります。昔ながらの方法で「ライブ」ストリーミングをお楽しみください...ほとんどのブラウザでサポートされています-モダン、古い、実験的。

約5時間コンパイルするのに苦労しました... ため息ですが、どの携帯電話やブラウザからでもストリームにアクセスできるので、これを使用すると思います。より良いドライバーが得られるまで待たなければならない...もう1、2年。:(

どんな品質を試しても、ストリームを使用して1 fpsより速くも遅くもなりません。私は720pと1080pを使用し、画質のみが向上しましたが、LANではfpsに違いはありません。WAN / 3Gまたはその他の無線伝送には、より小さい設定が役立つと思われます。

raspistillは画像を単一のファイルに書き込みます。これがボトルネックになる可能性があります。ファイルを書き込み、mjpg strreamerがそれを読み取り、削除してブロッキングI / Oを引き起こすため、raspistillはファイルに書き込むことができません。

私が考えることができる唯一のことは、私たちのためにJPEGファイルを作成するFFmpegにパイプされたraspividを使用することです-私はこれを試してみる必要があります。衝撃的な品質で25 fpsを得ることができ、約10秒遅れました...設定を調整すると、約3 fpsになりましたが、CPUは100%でした。ビデオストリームの処理にハードウェアは使用されていません...

raspivid -w 640 -h 480 -fps 25 -vf -t 86400000 -b 1800000 -o -  \
ffmpeg -i - \
    -f image2(?) \
    -c:v mjpeg \
    stream%d.jpg

私も読ん%dでいて、raspistillの出力ファイル名で使用できることがわかりました。それはfpsを後押しするのだろうか。また、JPGエンコードはraspistillでハードウェアアクセラレーションが行われるため、なぜこれが遅いのかを理解するのに苦労しています...

%dファイル名に使用した驚異的な2 FPSを取得しました。何らかの理由で、JPEGファイルの書き込みがraspistillからひどく遅いです。はぁ。


知識を共有していただきありがとうございます
user566245

10

2017年(またはおそらくそれ以前)の時点でraspividは推奨される方法ではなくなり、Pi開発者は代わりにV4L2を使用することを推奨しています。

したがって、このメソッドを使用すると、RTP経由でH264の代わりにV4L2を使用してH264をストリーミングできますraspivid。この方法ではドロップアウトが少なくなり、ビットレートが高くなることに気付きました。

#!/bin/sh

# Use V4L2 (preferred) instead of raspivid
# exposure_dynamic_framerate=1 (raspivid --fps 0) - reduce framerate/increase exposure in low light
# scene_mode=8 (raspivid --exposure night) - allow framerate reduction to increase exposure
v4l2-ctl -v width=1296,height=972,pixelformat=H264 \
        --set-ctrl=exposure_dynamic_framerate=1 \
        --set-ctrl=video_bitrate=5000000 \
        --set-ctrl=scene_mode=8

exec ffmpeg -f h264 -probesize 32 -r 30 -i /dev/video0 -vcodec copy -an -f rtp_mpegts udp://224.0.1.2:5004

このスクリプトはビデオをマルチキャストし、次のようなコマンドを使用してLAN上の別のマシンで表示できます。

ffplay -sync ext -an -fast -framedrop -probesize 32 -window_title "Raspberry Pi" -an udp://224.0.1.2:5004

-sync extPiがこれよりも高速にフレームをキャプチャしている場合、固定フレームレートで実行して遅れるのではなく、ビデオを可能な限り高速で再生してリアルタイムで実行します。この方法にはまだ多少の遅れがありますが、他のraspivid方法よりも悪くはありません。

(ヒント:IGMPをサポートするルーターまたはスイッチに接続している224.0.0.0/4場合は、マシン上でファイアウォールが設定されていないことを確認してください。任意のビデオ。)

ディスクへの記録

以下のコメントで録音について述べたように、ここでそれを拡張します。次のようなコマンドを使用して、ネットワークストリームをディスクに記録できます。

ffmpeg -y -i udp://224.0.1.2:5004 -c copy \
  -f segment -segment_atclocktime 1 -segment_time 900 \
  -reset_timestamps 1
  -strftime 1 /path/to/storage/pi-%wT%H%M.mkv

ファイル名の記号man strftimeの意味を確認してください%。この例では、日番号(0 =日曜日、1 =月曜日など)に続けてaを使用しT、次に時間を使用しています。15分ごとに新しいファイルを開始します。

明確にするために、この記録コマンドはリモートPC(Pi自体ではなく)で実行されることを意図していますが、おそらく(テストされていない)Piでも機能します。

ファイル名に日付と時刻を含む15分ごとに新しいファイルを取得するため、1週間後には既に使用されているファイル名の生成が開始され、最も古いファイルが上書きされます。言い換えれば、前週の映像のローリングループになってしまいます。これは、1週間以上前に戻る必要がほとんどない防犯カメラに最適です。

補足として、これは約500GB相当のファイルを生成するため、ビットレート、解像度を調整するか、ファイルをそれほど占有しない場合は、ファイルをより早く(たとえば24時間ごとに)上書きすることができます。


クール-これを共有してくれてありがとう。ここでマルチキャストの使用が必要な理由を説明できますか?私が学んだことから、マルチキャストはめったに使用されないということです-だから、ここでテーブルに何がもたらされるのだろうと思っていましたか?それでも-スクリプトは見栄えがよく、多くの人に役立つと確信しています。ありがとう+1
ピョートルクラ

1
マルチキャストはオプションです。必要に応じて通常のIPアドレスに置き換えることができますがffserver、複数のマシンにフィードを表示する場合は、使用するコマンドまたは他のサーバーシステムを変更する必要があります。その後、2〜3個のクライアント(ビデオのビットレートに依存)の後、PiのUSBイーサネットアダプターの帯域幅が不足します。マルチキャストを使用すると、サーバーを実行する必要がありません(クライアントマシンはトラフィックをリッスンするか無視するかを選択するだけです)ので、Piに影響を与えずにビデオを表示する数千台のマシンで単一のビデオストリームのみを送信できます。
悪徳

説明してくれてありがとう-しかし、マルチキャストは内部ネットワークでのみ機能しますか?ISPがマルチキャストパケットを取得した場合、通常はそれを除去するだけです。したがって、インターネットの全員にブロードキャストすることはできません。大規模な内部ネットワークを取得している場合、大量のストリームをマルチキャストすることもネットワークに影響を与える可能性がありますか?しかし、ええ..ストリームを表示するためだけに、選択したIPにUDPするだけです。しかし、とにかくマルチキャストオプションが好きです:D今週末はそれをやったことがないからといって、それを試みます。:)ありがとう
ピョートルクラ

1
はい、マルチキャストは主に内部ネットワーク用です。IPv6でうまく動作するはずですが、ISPからの協力がまだ必要だと思います。Piでサーバーを実行する必要がないことを意味し、2つの異なるマシンからのストリームを表示し、Piの構成を変更したり、Piのネットワーク帯域幅を過負荷にせずにディスクに記録したりできるため、使用します。内部ネットワークが大きい場合、通常と同じように影響を与える必要がある場合にのみマルチキャストトラフィックを送信するように設計されたIGMP対応スイッチを使用することになります。
悪徳

1
説明してくれてありがとう..マルチキャストを使用することで、ホームユーザーに実際には影響を及ぼさないような軽微な注意を払うことで多くの利点が得られるようになりました。私は間違いなくこれを試してみます。意味を理解するために指摘する必要があるのは、時にはシンプルで明白なことです。そして、あなたのアップデートを見てください。録音ビットは本当に、本当にクールです!
ピョートルクラ

4

コンパイル済みモジュールnginx-rtmpを使用して、Raspberry PiからWebサーバーにストリーミングすることができました。

手間を省くためにffmpegArch Linux Armのようなローリングディストリビューションをお勧めします。

raspivid -vf -t 0 -fps 25 -b 2000000 -o - |
ffmpeg -i - -vcodec copy -an -r 25 -f flv rtmp://x220/myapp/mystream

いくつかのメモ:

したがって、これに基づいて、Raspberry Piからのライブストリーミングは一時的なブロードキャストでは問題ないかもしれませんが、帯域幅が非常に多いため、常時オンのWebカメラではそうではないと思います。オーディオは取得できません。取得した場合、同期することがミッションとなります。

ビデオの記録と同時に、より効率的にオーディオを個別に記録できます。その後、後でオーディオフィードを多重化してWebMに変換し、HTMLビデオタグ付きの静的ファイルとしてhttpdに配置します。ワークフローは非常に厄介ですが、ブラウザ間で問題なく動作する効率的なブロードキャストのために私が考えることができる最高のものです。


1
ただし、帯域幅と解像度を制御できます。CCTVのローカルLANストリーミングが使用する場合、それは問題ではありません。インターネットを介したブロードキャストは、オンデマンドおよび/またははるかに低い解像度にする必要があります。しかし、それを行う別の方法。ありがとう+1
ピョートルクラ

そして、それはどのように機能すると想定していますか?私には…FFMPEGは「RTMP_Connect0、ソケットの接続に失敗しました。111(接続は拒否されました)」
Flash Thunder

2

UV4Lは、WebRTCおよびHTML5を使用したライブオーディオおよびビデオストリーミングをサポートするようになりました。


上記のリンクを読んでください
...-Strunz

本当にうまくいきます!
ピョートルクラ

どうやって?その例のページが壊れているへのリンク...
Cerin

私はそれらのチュートリアルをしてきたと私は彼らが動作しない確認することができます
QuintinのBalsdon

試したとおり
Pi

2

Piotr Kulaの答えは正しい軌道に乗っているように見えますが、Raspberry stretchでは時代遅れです。

Raspberry stretchのuv4lの更新された手順があります。

https://www.linux-projects.org/uv4l/installation/

# switch to superuser mode
sudo -s
# add the repository key for uv4l
curl http://www.linux-projects.org/listing/uv4l_repo/lpkey.asc | sudo apt-key add 
# add the url for the u4vl repository to apt
echo "deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/stretch stretch main" >> /etc/apt/sources.list
apt-get update
apt-get install uv4l uv4l-raspicam
apt-get install uv4l-raspicam-extras
# do not forget to install the server - see what happens if you do
# below
apt-get install uv4l-server
reboot

/etc/uv4l/uv4l-raspicam.confでuv4lオプションを変更してから、サービスを再起動できます

sudo service uv4l_raspicam restart

私の場合、(uv4l-serverをインストールするのを忘れた場合は...)箱から出してもうまくいきませんでした。次のコメントは、同様の問題のデバッグに役立つ場合があります。

サーバーが実行されていることを確認しました:

pgrep -fla uv4l
995 /usr/bin/uv4l -f -k --sched-fifo --mem-lock --config-file=/etc/uv4l/uv4l-raspicam.conf --driver raspicam --driver-config-file=/etc/uv4l/uv4l-raspicam.conf --server-option=--editable-config-file=/etc/uv4l/uv4l-raspicam.conf

そしてそれが聞いたかどうか

sudo netstat -tulpn 

しかし、リストにはuv4lのエントリはありませんでした。ポート8080の1つを期待していた

だから私はUV4Lを設定する方法からコマンドを試しましたか?

uv4l --sched-rr --mem-lock --driver raspicam \
> --width 960 --height 540 --framerate 30 \
> --encoding mjpeg --vflip --hflip
<notice> [core] Trying to loading driver 'raspicam' from built-in drivers...
<notice> [core] Loading driver 'raspicam' from external plug-in's...
<notice> [driver] Dual Raspicam & TC358743 Video4Linux2 Driver v1.9.63 built Oct  6 2018
<notice> [driver] Detected camera imx219, 3280x2464
<notice> [driver] Selected format: 960x544, encoding: mjpeg, JPEG Video Capture
<notice> [driver] Framerate max. 30 fps
<notice> [core] Device detected!
<notice> [core] Registering device node /dev/uv4l

しかし、それでもサーバーは自動的に起動しませんでした...

man uv4l

その後、私にオプションを示しました

--enable-server [=arg(=required)] (=auto)
          enable the streaming server. Possible values are: 'auto' (tenta‐
          tively start the server), 'required' (exit if failing  to  start
          the  server,  only  works if --foreground is enabled), 'off' (no
          server at all).

だから私は試しました:

pkill uv4l
sudo uv4l --sched-rr --mem-lock --driver raspicam --encoding mjpeg --enable-server=required
<notice> [core] Trying to loading driver 'raspicam' from built-in drivers...
<notice> [core] Loading driver 'raspicam' from external plug-in's...
<notice> [driver] Dual Raspicam & TC358743 Video4Linux2 Driver v1.9.63 built Oct  6 2018
<notice> [driver] Detected camera imx219, 3280x2464
<notice> [driver] Selected format: 1920x1080, encoding: mjpeg, JPEG Video Capture
<notice> [driver] Framerate max. 30 fps
<notice> [core] Device detected!
<notice> [core] Registering device node /dev/uv4l

ただし、ポート8080またはその他の場所で実行されているサーバーはありません。だから、manページに必要な「--foreground」オプションを忘れたようです:

sudo uv4l --sched-rr --mem-lock --driver raspicam --encoding mjpeg --enable-server=required --foreground
<notice> [core] Trying to loading driver 'raspicam' from built-in drivers...
<notice> [core] Loading driver 'raspicam' from external plug-in's...
<notice> [driver] Dual Raspicam & TC358743 Video4Linux2 Driver v1.9.63 built Oct  6 2018
<notice> [driver] Detected camera imx219, 3280x2464
<notice> [driver] Selected format: 1920x1080, encoding: mjpeg, JPEG Video Capture
<notice> [driver] Framerate max. 30 fps
<notice> [core] Device detected!
<notice> [core] Trying to load the the Streaming Server plug-in...
<warning> [core] libserver.so: cannot open shared object file: No such file or directory
<alert> [core] No Streaming Server detected

これが明確なヒントです!まだサーバーがないようです-それをインストールしてください:

sudo apt-get install uv4l-server

そしてさらに試みる:

sudo uv4l --sched-rr --mem-lock --driver raspicam --encoding mjpeg --enable-server=required --foreground
<notice> [core] Trying to loading driver 'raspicam' from built-in drivers...
<notice> [core] Loading driver 'raspicam' from external plug-in's...
<notice> [driver] Dual Raspicam & TC358743 Video4Linux2 Driver v1.9.63 built Oct  6 2018
<notice> [driver] Detected camera imx219, 3280x2464
<notice> [driver] Selected format: 1920x1080, encoding: mjpeg, JPEG Video Capture
<notice> [driver] Framerate max. 30 fps
<notice> [core] Device detected!
<notice> [core] Trying to load the the Streaming Server plug-in...
<notice> [server] HTTP/HTTPS Streaming & WebRTC Signalling Server v1.1.125 built on Mar  9 2019
<warning> [server] SSL is not enabled for the Streaming Server. Using unsecure HTTP.
<notice> [core] Streaming Server loaded!
<notice> [core] Registering device node /dev/uv4l
<notice> [server] Web Streaming Server listening on port 8080

サーバーはhttp:// pi:8080で利用可能になりました(piをサーバーのIPまたはホスト名に置き換えてください)

再起動後、別のコマンドを入力しなくても機能しました。


1

UV4Lは、Web上のJitsi Meet Roomsへのライブオーディオおよびビデオ放送をサポートするようになりました。特別な設定は必要ありません。あなたの名前、部屋を埋めて、スタートをクリックするのと同じくらい簡単です。


どのブラウザを使用していますか?JitsiはChrome、Chromium、Opera、Firefoxのみをサポートしますが、Piで利用できるのはChromiumのみです。しかし、ChromiumにはwebkitRTCPeerConnection is not definedエラーがあります。通常、WebRTCにはIceWeaselを使用しますが、Jitsiではサポートされていません。
modulitos

1
PIでは、IceWeaselでサポートがほとんど壊れていることを除いて、WebRTCをサポートするブラウザはありません。私がそれを使用している方法は次のとおりです。Pi->クラウド上のJitsiサーバー->他の場所で私のPC
prinxis

1
UV4Lは、ハードウェアエンコードされたH264ライブストリーミングをレイテンシなしでサポートします。
prinxis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.