如何通过网络服务器从Raspberry Pi摄像机模块流式传输H.264视频?


50

所以我今天得到了Raspberry Camera,并且静止图像工作正常。

捕获JPEG格式的图像:

raspistill -o image.jpg

捕获H.264格式的5秒钟视频:

raspivid -o video.h264

我不想安装任何其他应用程序,因为我想利用随时可用的HTML5。由于Chrome / Safari具有用于H.264的内置解码器,所以我只想将浏览器指向该URL并观看流。

我该如何实现?


2
我也在做这个。我认为您需要为nginx或类似的东西添加MP4支持。如果我有突破,将通知您。
recantha

@recantha您在流视频方面有什么新突破吗?
Piotr Kula 2014年

3
我发现的最佳解决方案是基于Silvan Melchoir的RaspiMJPEG。看看我的博客,其中包含指向Raspberry Pi Foundation的论坛的链接,该论坛介绍了所有内容。(recantha.co.uk/blog/?p=11176
recantha

2
是的,能够流式传输到各种设备看起来很棒。你得到什么FPS和滞后?我确实设法使uv4l与VLC和OSD很好地兼容。一个非常简短的演示。很快就会变得更好。经过数小时的反复试验,在深夜制成。youtu.be/LO10Ytlauag
Piotr Kula

@ppumkin我如何在RaspiMJPEG运行时通过python脚本进行录制?它可以开始录制视频,但是以.h264格式录制,如何在按下start_recording时运行python脚本?
Coderaemon

Answers:


32

使用HLS流式传输

苹果公司专有的实时视频流传输方法。它被称为HTTP Live Streaming(HLS),仅受Apple技术支持。Google(Chromium / YouTube)使用了自己的dash mpeg实施,其他所有人都感到困惑或使用了封装在MP4中的H.264

优点

  • 可以将LAN上的高清1080p流传输到任何支持.m3u8播放列表的设备
  • 使用HTML5语义(但不是标准化格式)
  • 可以使用第三方高级软件(如jwplayer 6)中的某些支持

缺点

  • 至少有5秒的延迟(在此应用程序中,但是使用从iPhone到AppleTv的镜像,它们可以达到50毫秒-500毫秒)。因此,对于需要即时反应的远程控制应用程序(例如,机器人或直升机)来说,这不是很好。
  • 如果您想获得可能会闪烁的更广泛的浏览器支持,则必须购买第三方软件。

m3u8

  • .m3u8只是M3U格式的UTF-8版本。(.m3u文件可以具有多种编码。)有人声称,将.m3u8重命名为.m3u可以在所有HTML5浏览器上正常工作。我尝试了此方法,但对我没有用。

流式传输的概念是记录至少5秒钟长的短文件段(在此示例中-可能有新方法可以加快速度),并保存到正确的文件中。播放列表文件将使用新文件名进行更新,并且客户端始终会轮询该播放列表并下载最新文件。有一些机制可以在客户端上无缝合并视频。这就是为什么其他开发商不希望实现这个,因为它需要一大把的精力和不符合标准的HTML5遵守(即使是实时流没有适当的HTML5标准?? EHH,叹息)。

正在安装

您需要编译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可在瞬间使能的网络服务器。(是的,它比笨重的Apache更好)
  • 创建一个目录,例如,驻留在您的www文件夹中, /usr/share/nginx/www/

制作一个名为Bash的Bash脚本文件video.sh,将chmod +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的较长编译时间,我曾尝试将Qemu与Wheeze配合使用但在登录时遇到了一些障碍,因此不得不尝试使用Arch映像。这工作了。还通过VirtualBo 尝试在Ubuntu映像上进行Sqeeze
luboP 2013年

2
有没有一种方法可以自动删除旧细分?一段时间后,SD卡已满。我也希望删除它们,以便可以在tmpfs上运行它而不破坏SD卡。
2013年

2
@Dimmme如果将其添加-segment_wrap 10为ffmpeg的参数,它将最多使用10个段文件。
gregers 2014年

有没有人得到这个工作?文件已创建,但似乎丢失了SPS / PPS信息,因此视频无法在iOS Safari或VLC中播放。segments/指向段文件时,stream.m3u8也未包括在内,因此我删除了segments文件夹。我误会了吗?
gregers 2014年

您需要通过PSIPS过滤器二进制文件通过流传输流。raspicam的最新版本应该可以执行此操作。.但是由于某些原因,如果没有PSIPS,我将无法使它工作
Piotr Kula

23

UV4L妈妈

感谢@mpromonet的评论,以对Linux-Projects V4L2驱动程序进行更新,该驱动程序现在非常高效地实现了MMAL-但它仍在进行中。

请按照以下说明安装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了……)

MJPEG

默认情况下,它mjpeg以1080p分辨率使用,并且非常缓慢。我将其调整为800x600帧大小,并使用iSpy之类的东西来处理视频。为了安全起见,在清晰的视频中我得到约10 fps。它比此驱动程序之前的640x480 3 fps更好。它可以在具有Safari,Android Chrome和几乎所有其他功能的iPhone上使用。

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

这也意味着现在motion(我仍然需要测试和比较)应该可以工作得更好。确保将配置设置为使用v4l2_palette 8v4l2_palette 2

H.264

现在,此问题已针对“流”进行了修复,我们无需花太多精力即可通过VLC媒体播放器观看H.264视频。流是原始H.264,因此,如果需要在其他地方工作,则需要对其进行解复用或转码/封装。bitrate=xxxxxx如果通过Wi-Fi流式传输,则应在配置文件中进行调整。

在VLC媒体播放器中,您必须告诉它要使用H.264多路分配器。因此,如果您使用的是GUI,请确保添加参数:demux=264。从命令行,vlc http.../video.h264 --demux h264。否则,即使相机LED灯已打开,您也只会看到黑屏。

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

瞧!高清流大约有500毫秒的延迟(可进行微调,降至200毫秒)。绝对比使用旧方法容易得多。质量和FPS很棒,但是如果不转码到MP4或WebM,就不能将其嵌入HTML5中。我希望这将得以实现,因为它将真正使它成为一台出色的独立服务器。

RTSP / RTMP / RTP

不支持/实现

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

HLS

不支持/实现


没有video4linux可用的驱动程序。这意味着我们无法使用ffserver通过/dev/video0USB网络摄像头或类似网络流来传输数据。

这就是为什么很难找到适合HTML5浏览器的实时流式传输的原因。


现在有video4linux正式的V4L2驱动程序bcm2835-v4l2和用户空间V4L2驱动程序[ linux-projects.org/modules/sections/…– mpromonet
2014年

是真正的v4l驱动程序,还是仅仅是raspivid周围的包装提供了出色的性能?
Piotr Kula 2014年

1
官方驱动程序使用MMAL接口,请参见源代码[ github.com/raspberrypi/linux/blob/rpi-3.12.y/drivers/media/…。性能似乎是正确的。
mpromonet 2014年

我已经玩了三天了。mjpeg编码的最终清晰度更加稳定,并且可以可靠地在iPhone,Android或iSpy上查看800x600 @ 10fps。h264非常适合1080p 30fps,我们可以在vlc中使用该--demux h264标志进行查看。我们仍然需要对此代码进行转码,以便在移动设备上使用或以mp4 / webm的形式嵌入网页。但是,这确实是朝着高效和高质量迈进的伟大一步。不要与“其他” UV4L非Linux项目驱动程序混淆。
Piotr Kula 2014年

请注意,在H264方法中添加:demux = 264是用于vlc服务器,而不是vlc客户端。因此,在树莓派上开始流式传输以使其与智能手机中的vlc兼容的命令行是:/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
Jaime M.

10

使用MJPEG进行流式传输

U4VL

带有内置HTTP(S)服务器的内核接口。

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

Raspberry Pi Cam Web界面

silvanmelchior的一个不错的项目,它部署了像dvr这样的多目标流服务器的Web服务器。需要更多信息

https://github.com/silvanmelchior/RPi_Cam_Web_Interface

传统方法

几乎所有浏览器(包括Internet Explorer 6)都支持使用mjpg进行流传输。H.264之前使用的许多相机都使用了硬件mjpg,本质上是将jpeg文件尽可能快地转储到文件夹中,而mjpg将文件读入缓冲区并删除他们。某些设备可能会达到25 fps,即使您的连接不良,也至少会获得1 fps。

由于JPEG文件太大而无法在Internet上流式传输,并且H.264是一种更快,质量更好的协议,因此高清摄像机不再支持mjpg。

由于我们无法自然地使用摄像头模块广播H.264,因此这似乎是可行的后备...

它几乎是即时的,但不要期望其速度超过1.5 fps。这归结为raspistill极度漫长!将延时功能设置为100毫秒(应为我们提供10 fps)不起作用,因为raspistill它会阻塞并且本身存在严重的性能问题。

  1. 更改/tmp以使用RAM来提高速度/etc/default/tmpfs-更改RAMTMP=yes(这是增加fps的一种尝试,但是raspistill不能保持其自身。)
  2. 重启
  3. apt-get安装git
  4. apt-get安装libjpeg8-dev
  5. apt-get安装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除外,然后再次制作。我在这里有很多问题。
  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 fps更快或更慢。我使用了720p和1080p,只有图像质量变好,但是fps在局域网上没有区别。我想较小的设置将有助于WAN / 3G或其他无线电传输。

raspistill将图像写入单个文件。这可能是一个瓶颈。它写入文件,mjpg strreamer读取并删除该文件,导致I / O阻塞,因此raspistill无法写入该文件。

我唯一能想到的就是使用raspivid传递到FFmpeg中,它将为我们创建JPEG文件-我需要尝试一下,这可能比usign raspistill快得多。我设法以令人震惊的质量获得了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 。由于某些原因,从raspistill写入JPEG文件的速度非常慢。叹。


感谢您分享知识
user566245

10

从2017年(或更早)开始raspivid,不再是首选方法,Pi开发人员建议人们改用V4L2。

因此,此方法允许您使用V4L2(而不是V4L2)通过RTP传输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 ext导致视频以最快的速度播放,因此它将实时运行,而不是以固定的帧率运行,并且如果Pi捕获帧的速度比Pi快,则会滞后。这种方法仍然有些滞后,但并不比其他raspivid方法差。

(提示:如果您插入支持IGMP的路由器或交换机,请确保224.0.0.0/4您的计算机上没有防火墙,否则,当路由器询问您的PC是否想要任何多播流量时,PC将永远不会响应并且您将永远不会看到任何视频。)

记录到磁盘

正如我在下面的评论中提到的录制,在此我将对此进行扩展。您可以使用如下命令将网络流记录到磁盘:

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分钟就会获得一个新文件,文件名中带有日期和时间,这意味着一周后您将开始生成已使用的文件名,从而导致最早的文件被覆盖。换句话说,您将得到前一周素材的滚动循环。对于您几乎不需要回去一周以上的安全摄像机而言,这是理想的选择。

附带说明,这会产生约500GB的文件,因此,如果您不希望文件占用太多空间,则可能需要调整比特率,分辨率或更快地覆盖文件(例如每24小时覆盖一次)。


酷-感谢您分享。您能解释一下为什么在这里需要使用多播吗?据我了解,很少使用多播-所以我想知道它在这里带来了什么?仍然-该脚本看起来不错,我相信它将有助于分配人员。感谢+1
Piotr Kula

1
多播是可选的-如果需要,您可以只替换一个普通的IP地址-但ffserver如果要多于一台机器来显示提要,则需要更改使用的命令或其他服务器系统。然后,在大约2-3个客户端(取决于视频比特率)之后,Pi的USB以太网适配器将耗尽带宽。使用多播,无需运行服务器(客户端计算机只需选择是侦听还是忽略流量),因此您可以使成千上万台计算机显示视频而不会影响Pi,而Pi只会发送单个视频流。
Malvineous

感谢您的解释-但是多播仅适用于内部网络吗?如果ISP获得多播数据包,它们通常会剥离它-因此,这就像您只能向Internet上的所有人广播一样。我想如果您有一个大型的内部网络,多方广播大量流也可能会影响您的网络?但是,是的..对于我来说,我只是将UDP传输到选定的IP ..但是无论如何我还是喜欢多播选项:D因为我以前从未这样做过,所以它将在本周末尝试这样做。:)谢谢
Piotr Kula's

1
是的,组播主要用于内部网络。它应该可以与IPv6更好地协作,但我认为仍需要ISP的合作。我之所以使用它,是因为它意味着我不必在Pi上运行服务器,并且我可以查看来自两台不同机器的流并将其记录到磁盘上,而无需更改Pi的配置或使Pi的网络带宽超载。如果您的内部网络很大,那么您可能会使用具有IGMP功能的交换机,这些交换机旨在仅在需要使影响与正常无异的情况下发送多播流量。
Malvineous

1
感谢您的解释。.现在,我可以看到使用带有小的警告的多播的许多好处,甚至不会真正影响家庭用户。我一定会试试看。有时需要指出一些简单明了的东西才有意义。并查看您的更新..录音位真的非常酷!
Piotr Kula

4

我设法使用内置模块nginx-rtmp从Raspberry Pi流到Web服务器。

为了避免麻烦ffmpeg,我建议使用Arch 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进行实时流传输对于临时广播而言可能是可以的,但对于永远在线的网络摄像头而言却不可行,因为它过于占用带宽。您将不会获得音频,如果有,它将执行同步任务。

您可以在录制视频的同时分别更有效地录制音频。然后,稍后再混合音频输入,然后将其转换为WebM,并将其作为带有HTML视频标签的静态文件放在您的httpd上。工作流程非常尴尬,尽管这是我能想到的最好的方法,它可以在浏览器之间轻松进行有效的广播。


1
您可以控制带宽和分辨率。如果它的本地局域网流供CCTV使用,那就不是问题。可能需要点播和/或分辨率低得多的Internet广播。但这是另一种方式。感谢+1
Piotr Kula

以及它应该如何工作?FFMPEG说“ RTMP_Connect0,无法连接套接字。111(连接被拒绝)”
Flash Thunder


2

皮奥特·库拉(Piotr Kula)的答案似乎正确无误,但在覆盆子拉伸方面已经过时。

有关树莓派上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端口

所以我尝试了如何配置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或elswhere上运行。因此,似乎我忘记了手册页指出的“ --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上使用服务器(用服务器的ip或主机名替换pi)

重新启动后,它无需输入其他命令即可工作。


1

UV4L现在支持通过Web向Jitsi Meet Rooms进行实时音频和视频广播。无需特殊配置。只需输入您的姓名,房间并单击“ 开始”即可


您正在使用哪个浏览器?Jitsi仅支持Chrome,Chromium,Opera和Firefox NIghtly,其中Pi上仅提供Chromium。但是Chromium给我一个webkitRTCPeerConnection is not defined错误。我通常将IceWeasel用于WebRTC,但Jitsi不支持。
modulitos's

1
PI上没有支持WebRTC的浏览器,但IceWeasel中几乎没有支持。我使用它的方式是:Pi-> Jitsi Server on Cloud->我的PC在其他地方
prinxis 2015年

1
UV4L支持无延迟的硬件编码H264实时流。
prinxis
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.