如何使用“Motion”从我的 IP 摄像机访问 H264 流?

如何使用“Motion”从我的 IP 摄像机访问 H264 流?

什么是运动?Motion 是一个守护程序,它允许 Linux 用户根据运动检测或时间设置录制网络摄像头和 IP 摄像头的图片。可以找到有关如何设置稳定版本的教程这里。 这里是Motion 开发者网站和文档

我的设置:我用的是便宜的海康威视2032IP摄像机,设置为IP 192.168.1.199。其主流(H264)为:

rtsp://192.168.1.199:554/ISAPI/streaming/channels/101?auth=YWRtaW46MTIzNDU=

(在 VLC 中运行良好)

据我所知,Motion 的当前稳定版本 (3.2.12) 不幸不支持 H264。但最新的开发人员版本具有一些集成功能,并且有一个针对它进行优化的分支。

虽然构建的安装非常复杂,但我尝试在下面的帖子中收集分步说明中收到的提示:

编辑: 在这个阶段,我已经下载了 MrDave 推荐给我的 Git 版本,我认为我已经拥有了所有依赖项。按照我收集的说明中的步骤操作后,它最终可以在 1080x720 分辨率下运行。

使用 1920x1080 时,我无法将文件保存到图像文件夹:

nuc@nuc:/usr/local/etc$ motion
[0] [NTC] [ALL] conf_load: Processing thread 0 - config file /usr/local/etc/motion.conf
[0] [ALR] [ALL] conf_cmdparse: Unknown config option "sdl_threadnr"
[0] [NTC] [ALL] motion_startup: Motion trunkREVUNKNOWN Started
[0] [NTC] [ALL] motion_startup: Logging to syslog
[0] [NTC] [ALL] motion_startup: Using log type (ALL) log level (NTC)
[0] [NTC] [ENC] ffmpeg_init: ffmpeg LIBAVCODEC_BUILD 3562596 LIBAVFORMAT_BUILD 3555176
[0] [NTC] [ALL] main: Thread 1 is from /usr/local/etc/motion.conf
[0] [NTC] [ALL] main: Thread 1 is device: rtsp://192.168.1.199:554/ISAPI/streaming/channels/101?auth=YWRtaW46MTIzNDU= input -1
[0] [NTC] [ALL] main: Stream port 8081
[0] [NTC] [ALL] main: Waiting for threads to finish, pid: 9028
[1] [NTC] [ALL] motion_init: Thread 1 started , motion detection Enabled
[1] [ALR] [NET] netcam_start: Network Camera thread starting... for url (rtsp://192.168.1.199:554/ISAPI/streaming/channels/101?auth=YWRtaW46MTIzNDU=)
[0] [NTC] [STR] httpd_run: motion-httpd testing : IPV4 addr: 127.0.0.1 port: 8080
[0] [NTC] [STR] httpd_run: motion-httpd Bound : IPV4 addr: 127.0.0.1 port: 8080
[0] [NTC] [STR] httpd_run: motion-httpd/trunkREVUNKNOWN running, accepting connections
[0] [NTC] [STR] httpd_run: motion-httpd: waiting for data on 127.0.0.1 port TCP 8080
[1] [NTC] [NET] netcam_rtsp_open_context: Using tcp transport
[1] [NTC] [NET] netcam_connect_rtsp: Camera connected
[1] [NTC] [ALL] image_ring_resize: Resizing pre_capture buffer to 1 items
[1] [ALR] [NET] netcam_handler_loop: Camera handler thread [2] started
[1] [NTC] [STR] http_bindsock: motion-stream testing : IPV4 addr: 127.0.0.1 port: 8081
[1] [NTC] [STR] http_bindsock: motion-stream Bound : IPV4 addr: 127.0.0.1 port: 8081
[1] [NTC] [ALL] motion_init: Started motion-stream server in port 8081 auth Disabled
Memoryaccesserror (core image written).

如果我尝试打开,全分辨率的 avi 和 jpg 是空的或不可用。

答案1

为了获得 rtsp 和 H264 支持,您需要从源代码构建应用程序。源代码的主要版本位于https://github.com/sackmotion。但是,此源代码有许多分支,它们实现了各种功能,包括 RTSP/H264。如果您查看 git 中的图表/网络选项卡,您可以查看这些版本并确定哪个最适合您的情况。如果您不熟悉从源代码构建,可以在以下分支中找到编译和构建运动的基本说明https://github.com/Mr-Dave/motion在 INSTALL 文件中。这些说明已通过 12.04 验证,但可能需要进行轻微修改才能用于 14.04。

请注意,对于您引用的相机,您引用的命令行可能不正确。我观察到此相机的格式是rtsp://user:pwd@ipaddress:554/streaming/channels/1(对于主要流)或rtsp://user:pwd@ipaddress:554/streaming/channels/2对于次要流。在设置运动中的相机之前,您应该使用 VLC 或 avplay 验证连接字符串。一旦确认它可以在任何一个应用程序中工作,您就可以将连接字符串直接复制到文件中motion.conf作为网络摄像头网址。

最后,如果您想节省此摄像机的 CPU 资源,最好设置运动来监视较小的 SD 辅助流,并使用配置选项在发生运动时触发外部录制应用程序以原始格式录制主高清流。

答案2

我逐步总结了 MrDaves 对 Ubuntu 14.04 和 15.04 的说明:

Motion 需要安装许多库我们可以安装 Motion。:

首先,我们必须安装Motion 所需的软件包

sudo apt-get install autoconf automake build-essential libtool libjpeg8-dev libzip-dev

第二,我们必须安装LIBAV 库

sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev libav-tools libswscale-dev

重要提示:仅当您尚未安装 LIBAV 库时才需要此可选的第三步(第二步):然后我们必须安装FFMPEG 库来源:

https://www.ffmpeg.org/download.html并获取 Ubuntu 的最新源代码(通过 Git):

sudo apt-get install git
cd ~
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg

并从源代码构建它(我还没有找到任何简单的说明)。

步骤 3 的更简单替代方案: 如上所述这里一罐使用 apt-get:

sudo add-apt-repository ppa:jon-severinsson/ffmpeg
sudo apt-get update
sudo apt-get install ffmpeg
sudo apt-get install frei0r-plugins

经过这一切,最后可以安装运动通过 Git:

sudo apt-get install git
cd ~
git clone https://github.com/your_favorite_fork

(Motion 似乎以一种相当竞争的方式开发,有许多分支,所以你必须通过查看来检查哪个版本最适合你在 Git 上的开发树中

example: git clone https://github.com/Ken-M/motion

切换到 homedrive 的运动文件夹:

cd motion

配置基本设置:

使用LIBAV路线的命令(第二步)是:

./configure

并且没有 LIBAV:

./configure --with-ffmpeg=$HOME/ffmpeg --with-ffmpeg-headers=$HOME/ffmpeg/include

现在输入:

make
sudo make install

进入conf文件的目录并重命名conf文件:

cd /usr/local/etc
sudo mv motion-dist.conf motion.conf

最后开始运动:

motion

相关内容