6818视频传输开发记录
本篇记录在 GEC6818(ARM)开发板上,使用免驱 USB 摄像头 + WiFi,搭建实时视频流服务器的过程。
# 下载 mjpg-streamer
git clone https://github.com/jacksonliam/mjpg-streamer.git
# 下载 libjpeg-turbo 图像库
wget https://downloads.sourceforge.net/project/libjpeg-turbo/2.1.5/libjpeg-turbo-2.1.5.tar.gz
tar xzvf libjpeg-turbo-2.1.5.tar.gz
cd libjpeg-turbo-2.1.5
mkdir _install build_arm
cd build_arm
cmake .. \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=arm \
-DCMAKE_C_COMPILER=arm-linux-gcc \
-DCMAKE_INSTALL_PREFIX=../_install \
-DENABLE_STATIC=OFF \
-DENABLE_SHARED=ON \
-DWITH_JPEG8=OFF # 必须关闭,生成 libjpeg.so.62
make -j4
make install
编译完成后检查库文件:
cd ../_install/lib
ls -l
进入目录
cd ../../../mjpg-streamer/mjpg-streamer-experimental/
修改:plugins/input_uvc/CMakeLists.txt :
check_include_files(linux/videodev2.h HAVE_LINUX_VIDEODEV2_H)
MJPG_STREAMER_PLUGIN_OPTION(input_uvc "Video 4 Linux input plugin"
ONLYIF HAVE_LINUX_VIDEODEV2_H)
if (PLUGIN_INPUT_UVC)
add_definitions(-DLINUX -D_GNU_SOURCE)
# --- 修改开始 ---
# 1. 强制指定你的 JPEG 库路径 (请确保这个路径和你编译 libjpeg-turbo 时的路径一致)
SET(JPEG_ROOT "/mnt/d/XXXXXXXXXX/libjpeg-turbo-2.1.5/_install")
# 2. 添加头文件路径
include_directories(${JPEG_ROOT}/include)
# 3. 添加库文件路径
link_directories(${JPEG_ROOT}/lib)
# 4. 强制指定库文件名字 (直接找 libjpeg.so 或 libjpeg.a)
SET(JPEG_LIB "jpeg")
# --- 修改结束 ---
find_library(V4L2_LIB v4l2)
# 删除
# find_library(JPEG_LIB jpeg)
if (V4L2_LIB)
add_definitions(-DUSE_LIBV4L2)
endif (V4L2_LIB)
# 删除
# if (NOT JPEG_LIB)
# add_definitions(-DNO_LIBJPEG)
# endif (NOT JPEG_LIB)
MJPG_STREAMER_PLUGIN_COMPILE(input_uvc dynctrl.c
input_uvc.c
jpeg_utils.c
v4l2uvc.c)
if (V4L2_LIB)
target_link_libraries(input_uvc ${V4L2_LIB})
endif (V4L2_LIB)
if (JPEG_LIB)
target_link_libraries(input_uvc ${JPEG_LIB})
endif (JPEG_LIB)
endif()
开始编译:
make CC=arm-linux-gcc
# 回到项目根目录,创建tftp文件夹
mkdir mjpg_tftpboot
# 复制主程序
cp mjpg-streamer/mjpg-streamer-experimental/_build/mjpg_streamer mjpg_tftpboot/
# 复制插件
cp mjpg-streamer/mjpg-streamer-experimental/_build/plugins/input_uvc/input_uvc.so mjpg_tftpboot/
cp mjpg-streamer/mjpg-streamer-experimental/_build/plugins/output_http/output_http.so mjpg_tftpboot/
# 复制库文件(只复制实体文件!)
cp libjpeg-turbo-2.1.5/_install/lib/libjpeg.so.62.3.0 mjpg_tftpboot/
# 打包网页文件
cd mjpg-streamer
tar -czvf www.tar.gz www/
cp www.tar.gz ../../mjpg_tftpboot/
# 【弃用,不需要这一步】备用jpge库,从这里下载
https://packages.debian.org/bullseye/armhf/libjpeg62-turbo/download?spm=5176.28103460.0.0.96a07551Yl93v1
dpkg -x libjpeg62-turbo_2.0.6-4_armhf.deb ./jpeg_extract
mkdir -p /root/mjpg-streamer/www
cd /root/mjpg-streamer
# 传输PC端编写好的文件到开发板
tftp -g -r mjpg_streamer PC端IP
tftp -g -r input_uvc.so PC端IP
tftp -g -r output_http.so PC端IP
tftp -g -r www.tar.gz PC端IP
tftp -g -r libjpeg.so.62.3.0 PC端IP
tar -xzvf www.tar.gz
ln -s libjpeg.so.62.3.0 libjpeg.so.62
ln -s libjpeg.so.62 libjpeg.so
start_monitor.sh#!/bin/sh
# GEC6818 MJPG-Streamer Monitor Script
# Description: Starts MJPG-Streamer with USB Camera
# Author: GEC6818 Development Team
# Configuration
CAMERA_DEV="/dev/video7"
RESOLUTION="640x480"
FRAME_RATE="30"
HTTP_PORT="8080"
WWW_DIR="/root/mjpg-streamer/www"
# Check if camera device exists
if [ ! -c $CAMERA_DEV ]; then
echo "Error: Camera device $CAMERA_DEV not found!"
exit 1
fi
# Check if mjpg_streamer exists
if [ ! -f "/root/mjpg-streamer/mjpg_streamer" ]; then
echo "Error: mjpg_streamer not found!"
exit 1
fi
# Start MJPG-Streamer
echo "Starting GEC6818 Monitor System..."
echo "----------------------------------------"
echo "Camera: $CAMERA_DEV"
echo "Resolution: $RESOLUTION @ $FRAME_RATE FPS"
echo "HTTP Port: $HTTP_PORT"
echo "----------------------------------------"
cd /root/mjpg-streamer
export LD_LIBRARY_PATH=/root/mjpg-streamer:$LD_LIBRARY_PATH
./mjpg_streamer \
-i "./input_uvc.so -d $CAMERA_DEV -r $RESOLUTION -f $FRAME_RATE" \
-o "./output_http.so -w $WWW_DIR -p $HTTP_PORT"i
chmod +x ./*
chmod 755 libjpeg.so.62.3.0
./start_monitor.sh
浏览器打开
http://开发板IP:8080