Difference between revisions of "Template:FriendlyCoreAllwinner-DVPCam"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
Line 33: Line 33:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
start.sh脚本里执行了下列2个命令:
+
start.sh runs the following two commands:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
export LD_LIBRARY_PATH="$(pwd)"
 
export LD_LIBRARY_PATH="$(pwd)"
 
./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -y 1 -r 1280x720 -f 30 -q 90 -n -fb 0" -o "./output_http.so -w ./www"
 
./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -y 1 -r 1280x720 -f 30 -q 90 -n -fb 0" -o "./output_http.so -w ./www"
 
</syntaxhighlight>
 
</syntaxhighlight>
mjpg_streamer相关参数的含义如下:<br>
+
Here are some details for mjpg_streamer's major options:<br>
-i: 选择输入插件,input_uvc.so表示从摄像头采集数据;<br>
+
-i: input device. For example "input_uvc.so" means it takes input from a camera;<br>
-o: 选择输出插件,output_http.so表示使用http协议传输数据;<br>
+
-o: output device. For example "output_http.so" means the it transmits data via http;<br>
-d: 输入插件的子参数,指定摄像头设备节点;<br>
+
-d: input device's subparameter. It defines a camera's device node;<br>
-y: 输入插件的子参数,指定摄像头采集数据的格式,1:yuyv, 2:yvyu, 3:uyvy 4:vyuy,如果不使用-y参数,则表示采集MJPEG格式;<br>
+
-y: input device's subparameter. It defines a camera's data format: 1:yuyv, 2:yvyu, 3:uyvy 4:vyuy. If this option isn't defined MJPEG will be set as the data format;<br>
 
-r: 输入插件的子参数,指定摄像头采集分辨率;<br>
 
-r: 输入插件的子参数,指定摄像头采集分辨率;<br>
 
-f: 输入插件的子参数,指定想使用的摄像头采集fps,具体是否支持依赖于驱动;<br>
 
-f: 输入插件的子参数,指定想使用的摄像头采集fps,具体是否支持依赖于驱动;<br>

Revision as of 04:31, 3 July 2018

For H3 based boards the CAM500B can work with both Linux-3.4 Kernel and Linux-4.14 Kernel.
For H5 based boards the CAM500B can work with Linux-4.14 Kernel.
The CAM500B camera module is a 5M-pixel camera with DVP interface. For more tech details about it you can refer to Matrix - CAM500B.
connect your H3 board to a CAM500B. Then boot OS, connect your board to a network, log into the board as root and run "mjpg-streamer":

$ cd /root/mjpg-streamer
$ make
$ ./start.sh

You need to change the start.sh script and make sure it uses a correct /dev/videoX node. You can check your camera's node by running the following commands:

$ apt-get install v4l-utils
$ v4l2-ctl -d /dev/video0 -D
Driver Info (not using libv4l2):
        Driver name   : sun6i-video
        Card type     : sun6i-csi
        Bus info      : platform:camera
        Driver version: 4.14.0
	...

The above messages indicate that "/dev/video0" is CAM500B's device node.The mjpg-streamer application is an open source video steam server. After it is successfully started the following messages will be popped up:

 
$ ./start.sh
 i: Using V4L2 device.: /dev/video0
 i: Desired Resolution: 1280 x 720
 i: Frames Per Second.: 30
 i: Format............: YUV
 i: JPEG Quality......: 90
 o: www-folder-path...: ./www/
 o: HTTP TCP port.....: 8080
 o: username:password.: disabled
 o: commands..........: enabled

start.sh runs the following two commands:

export LD_LIBRARY_PATH="$(pwd)"
./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -y 1 -r 1280x720 -f 30 -q 90 -n -fb 0" -o "./output_http.so -w ./www"

Here are some details for mjpg_streamer's major options:
-i: input device. For example "input_uvc.so" means it takes input from a camera;
-o: output device. For example "output_http.so" means the it transmits data via http;
-d: input device's subparameter. It defines a camera's device node;
-y: input device's subparameter. It defines a camera's data format: 1:yuyv, 2:yvyu, 3:uyvy 4:vyuy. If this option isn't defined MJPEG will be set as the data format;
-r: 输入插件的子参数,指定摄像头采集分辨率;
-f: 输入插件的子参数,指定想使用的摄像头采集fps,具体是否支持依赖于驱动;
-q: 输入插件的子参数,指定libjpeg软编码的图像质量;
-n: 输入插件的子参数, 禁止dynctrls功能;
-fb: 输入插件的子参数, 指定是否在/dev/fbX上显示采集的图像;
-w: 输出插件的子参数, 指定包含网页的目录;

In our case the board's IP address was 192.168.1.230. We typed 192.168.1.230:8080 in a browser and were able to view the images taken from the camera's. Here is what you would expect to observe:
mjpg-streamer-cam500a
The mjpg-streamer utility uses libjpeg to software-encode steam data. The Linux-4.14 based ROM currently doesn't support hardware-encoding. If you use a H3 boards with Linux-3.4 based ROM you can use the ffmpeg utility to hardware-encode stream data and this can greatly release CPU's resources and speed up encoding:

$ ffmpeg -t 30 -f v4l2 -channel 0 -video_size 1280x720 -i /dev/video0 -pix_fmt nv12 -r 30 \
        -b:v 64k -c:v cedrus264 test.mp4

By default it records a 30-second video. Typing "q" stops video recording. After recording is stopped a test.mp4 file will be generated.