tag 标签: gstreamer

相关帖子
相关博文
  • 热度 2
    2019-10-11 11:37
    3451 次阅读|
    1 个评论
    By Toradex 胡珊逢 1). 简介 高清多媒体,甚至是 4K 视频不仅在消费领域有着旺盛的需求,在行业领域同样也获得广泛的关注。 NXP 最新的 IMX8 处理器不仅配有强劲的 CPU 和 GPU ,还对多媒体应用提供了完善的解决方案,如硬件解码支持 H.265 HEVC Main Profile 2160p60 Level 5.1 。下面我们将介绍如何从 Yocto 开始构建包含 Gstreamer 的 BSP 、使用 Toradex Easy Installer 安装系统、配置 LVDS 显示和播放多媒体文件。 本文演示所使用的 ARM 平台来自 Toradex 基于 NXP iMX8QM SoC 平台的 Apalis iMX8QM ARM 核心板。 2). Yocto/OpenEmbedded 编译 Toradex Linux BSP 从 V3.0 开始发生了很多的变化,其中最主要的就是采用基于 Poky 构建,默认的 BSP 只提供最小化的软件支持, 为此我们撰写了一篇 博文 做了详细的说明。用户需要自行构建合适其项目需求的 BSP ,同时也保持 BSP 精简。首先,可以参考 该网页 搭建基础的 Yocto/OpenEmbedded 环境。然后修改 build/conf/local.conf 文件,在结尾添加以下内容: ---------------------------------- ACCEPT_FSL_EULA = "1" IMAGE_INSTALL_append = " packagegroup-fsl-gstreamer1.0 packagegroup-fsl-gstreamer1.0-full imx-gst1.0-plugin" ---------------------------------- 保存后使用 MACHINE=apalis-imx8 bitbake console-tdx-image 命令来生成我们需要的 BSP 。根据网络和电脑配置情况,首次编译需要数个小时之久。编译完成后在 build/deploy/images/apalis-imx8 目录下会生成 Apalis-iMX8_Console-Image-Tezi_3.0bX-XXXXXXXX.ta r 文件。 3). 更新 BSP Toradex Easy Installer 为用户提供在图形化界面中更新 BSP 的方法。根据该文档配置好 PC 和开发板之间的正确连线。然后从 这里 下载适用于 Apalis iMX8QM 的 Toradex Easy Installer 文件。解压后,待 Apalis iMX8QM 进入恢复模式后执行恢复脚本。 ---------------------------------- sudo recovery-linux.sh ---------------------------------- 将 Apalis-iMX8_Console-Image-Tezi_3.0bX-XXXXXXXX.tar 解压后复制到 U 盘或者 SD 卡,并插入到底板。在 Toradex Easy Installer 界面中点击该 BSP 即可完成安装。最后选择重启模块。 4). LVDS 显示器配置 Apalis iMX8QM 上连接 1080p HDMI 显示器可以直接看到 Linux 系统。在这里我们还将介绍如何配置 LVDS 接口显示器。目前还不能直接在 U-Boot 中通过 cmdline 的方式进行显示配置,用户需要修改 device tree 文件 fsl-imx8qm-apalis.dts ,将 lvds1_panel 的 compatible 设置适合屏幕的配置。 LVDS 显示配置是直接编译在内核中,用户可以从 drivers/gpu/drm/panel 中选择现成的配置,否则需要自行添加适合屏幕参数的配置文件。 kyo_tcg121xglp_timing 在引脚和色彩配置都符合我们现有的三菱 AA104XD02 显示器,因此将 lvds1_panel 配置为 kyo,tcg121xglp 。然后重新编译 device tree 。 ---------------------------------- make dtbs ---------------------------------- 用生成的 fsl-imx8qm-apalis.dtb 替换核心板上 /media/mmcblk0p1/ 目录下的同名文件,重启生效。 ---------------------------------- root@apalis-imx8:~# sync root@apalis-imx8:~# reoobt ---------------------------------- 5). 媒体播放 BSP 中已经集成了 Gstreamer 工具和 IMX 插件,用户可以直接调用。显示分别是播放 H.265/H.264 编码分辨率为 1080p/2K/4K 的本地文件。 ./ 1080p h.264 ---------------------------------- gst-launch-1.0 filesrc location=jellyfish-20-mbps-hd-h264.mkv ! video/x-matroska ! aiurdemux ! \ queue ! h264parse ! v4l2h264dec ! imxvideoconvert_g2d ! queue ! waylandsink ---------------------------------- ./ 1080p h.265 ---------------------------------- gst-launch-1.0 filesrc location=Elecard_about_Tomsk_part3_HEVC_1080p.mp4 ! video/quicktime ! \ aiurdemux ! queue ! h265parse ! v4l2h265dec ! imxvideoconvert_g2d ! queue ! waylandsink ---------------------------------- ./ 2k h.264 ---------------------------------- gst-launch-1.0 filesrc location=Gravity-2K.mp4 ! video/quicktime ! aiurdemux ! queue ! h264parse ! \ v4l2h264dec ! imxvideoconvert_g2d ! queue ! waylandsink ---------------------------------- ./ 4k h.265 ---------------------------------- gst-launch-1.0 filesrc location=Elecard_about_Tomsk_part3_HEVC_UHD.mp4 ! video/quicktime ! aiurdemux ! \ queue ! h265parse ! v4l2h265dec ! imxvideoconvert_g2d ! queue ! waylandsink ---------------------------------- 除了本地播放外, RTSP 网络播放也是常用的功能。 RTSP 服务器可以有多种实现方式,如 VLC 就可以支持流推送。 Gst 也提供现成的工具实现 RTSP 服务,如 gst-rtsp-server 。在下载的时候最好选用和 iMX8 BSP 中 Gstreamer 一致的版本。下载后执行 autogen.sh ,然后直接 make 编译即可。在 example 目录中会生成一个名为 test-uri 的可执行文件。用下面命令推送视频流。 ---------------------------------- ./test-uri file:///opt/jellyfish-20-mbps-hd-h264.mkv 在 PC 的 8554 端口会开启 RTSP 服务。 ---------------------------------- rtsp://127.0.0.1:8554/test ---------------------------------- IMX8 上运行下面命令 ---------------------------------- gst-launch-1.0 rtspsrc location=rtsp://ip_of_pc:8554/test name=source1 ! queue ! rtph264depay ! \ queue ! h264parse ! v4l2h264dec ! imxvideoconvert_g2d ! queue ! waylandsink ---------------------------------- 6). 总结 IMX8QM 可以轻松的实现对视频文件的硬件编解码,而不占用过多的 CPU 资源,从而保证用户应用顺畅运行。除了视频播放,我们接下来还会介绍 IMX8 更多的应用。
  • 热度 2
    2019-2-27 16:36
    2853 次阅读|
    0 个评论
    作者:Toradex秦海   1. 简介   随着嵌入式处理器性能的提升,嵌入式设备在安全,机器视觉等方面的应用也越来越广发,本文就基于NXP iMX6 ARM处理器演示多种摄像头的连接应用,iMX6处理器支持多种摄像头接口连接,比如Parallel Camera Interface,MIPI/CSI-2 串行摄像头接口,USB接口,网络接口等。   本文所演示的ARM平台来自于Toradex基于NXP iMX6Q ARM处理器的Apalis iMX6Q ARM嵌入式平台。   2. 准备   a). Apalis iMX6Q ARM核心版配合Ixora载板,连接调试串口UART1(载板X22)到开发主机方便调试,连接HDMI显示器用于摄像头输出显示。更多关于Apalis iMX6配合Ixora载板的说明请参考Datasheet和开发上手指南。   b). 本文测试所使用的摄像头如下:   ./ Toradex OV5640 MIPI/CSI-2 摄像头模块,连接到载板X28   ./ 海康模拟摄像头,通过Toradex ACA模块连接到载板X14   ./ FHD USB 摄像头,连接到载板X8 USB接口   ./ 海康萤石 CS-C3C-1FR网络摄像头,通过网线连接到载板X11网口   c). Apalis iMX6Q 安装Toradex 最新Linux BSP V2.8b5,系统中已经包含了本文测试所需要的Gstreamer相关组件,详细安装方法请参考这里。   ./ 关于OV5640 摄像头Linux下配置使用说明请参考这里,本文不再赘述。   ./ 关于通过ACA模块连接模拟摄像头的配置使用说明请参考这里,本文不再赘述。   3. FHD USB摄像头测试   a). 先单独进行FHD USB摄像头模块测试,所使用的Camera Sensor为Aptina MI5100 (注:已经被OnSemi收购,对应指标产品请到OnSemi网站搜索),连接到Apalis iMX6会自动配置UVC驱动,无需另行配置。   b). 首先使用 V4L2命令查看摄像头支持的格式,如下所示,此摄像头可以支持MJPG格式和RAW格式输出,不过对于800x600以上的高分辨率输出,RAW模式只能以非常低的帧率输出,因此对于本文测试的1080P输出就要使用MJPG格式输出了。   -----------------------   root@apalis-imx6:~# v4l2-ctl --device=/dev/video3 --list-formats-ext   ioctl: VIDIOC_ENUM_FMT   Index : 0   Type : Video Capture   Pixel Format: 'MJPG' (compressed)   Name : Motion-JPEG   Size: Discrete 1600x1200   Interval: Discrete 0.067s (15.000 fps)   Size: Discrete 2592x1944   Interval: Discrete 0.067s (15.000 fps)   Size: Discrete 2048x1536   Interval: Discrete 0.067s (15.000 fps)   Size: Discrete 1920x1080   Interval: Discrete 0.033s (30.000 fps)   Size: Discrete 1280x1024   Interval: Discrete 0.067s (15.000 fps)   Size: Discrete 1280x720   Interval: Discrete 0.033s (30.000 fps)   Size: Discrete 1024x768   Interval: Discrete 0.033s (30.000 fps)   Size: Discrete 800x600   Interval: Discrete 0.033s (30.000 fps)   Size: Discrete 640x480   Interval: Discrete 0.033s (30.000 fps)   Size: Discrete 1600x1200   Interval: Discrete 0.067s (15.000 fps)   Index: 1   Type: Video Capture   Pixel Format: 'YUYV'   Name: YUYV 4:2:2   Size: Discrete 1600x1200   Interval: Discrete 0.200s (5.000 fps)   Size: Discrete 2592x1944   Interval: Discrete 0.333s (3.000 fps)   Size: Discrete 2048x1536   Interval: Discrete 0.250s (4.000 fps)   Size: Discrete 1920x1080   Interval: Discrete 0.200s (5.000 fps)   Size: Discrete 1280x1024   Interval: Discrete 0.111s (9.000 fps)   Size: Discrete 1280x720   Interval: Discrete 0.200s (5.000 fps)   Size: Discrete 1024x768   Interval: Discrete 0.100s (10.000 fps)   Size: Discrete 800x600   Interval: Discrete 0.050s (20.000 fps)   Size: Discrete 640x480   Interval: Discrete 0.033s (30.000 fps)   Size: Discrete 1600x1200   Interval: Discrete 0.200s (5.000 fps)   -----------------------   c). 测试基本的摄像头capture并全屏显示   -----------------------   // RAW 格式   $ gst-launch-1.0 imxv4l2src device=/dev/video3 ! 'video/x-raw, framerate=5/1, width=(int)1920, height=(int)1080, format=(string)YUY2' ! imxv4l2sink   CPU占用率:~40% x 1core of 4cores   // MJPG 格式   $ gst-launch-1.0 v4l2src device=/dev/video3 ! 'image/jpeg,width=1920,height=1080,framerate=30/1' ! vpudec output-format=4 ! imxipuvideotransform ! imxg2dvideosink sync=false   CPU占用率:~50% x 1core of 4cores   -----------------------   为了尽可能降低CPU的占用率,我们尽可能的使用iMX gstreamer专用的元件,可以调用VPU/GPU等硬件资源来加速,查询所有iMX相关原件可以通过下面命令   $ gst-inspect-1.0 |grep imx   d). 针对视频监控的场景往往需要在捕获的摄像头视频流上面打上时间戳,在播放的同时也保存成为文件,下面就测试这个应用场景。   ./ 这里我们使用基于imx硬件加速的imxg2dclockoverlay 元件来实现打时间戳   ./ 打时间戳后单独进行摄像头视频流播放操作   -----------------------   $ gst-launch-1.0 v4l2src device=/dev/video3 ! 'image/jpeg,width=1920,height=1080,framerate=30/1' ! vpudec output-format=4 ! imxipuvideotransform ! imxg2dclockoverlay time-format="%Y/%m/%d %H:%M:%S" ! imxg2dvideosink sync=false   CPU占用率:~49% x 1core of 4cores   -----------------------   ./ 打时间戳后单独进行摄像头视频流保存成文件操作   -----------------------   $ gst-launch-1.0 -vvv v4l2src device=/dev/video3 ! 'image/jpeg,width=1920,height=1080,framerate=30/1' ! vpudec output-format=4 ! imxipuvideotransform ! imxg2dclockoverlay time-format="%Y/%m/%d %H:%M:%S" ! imxipuvideotransform ! 'video/x-raw,width=1920,height=1080,framerate=30/1' ! imxvpuenc_h264 bitrate=8000 ! filesink location=test.mp4   CPU占用率:~30% x 1core of 4cores   -----------------------   ./ 打时间戳后同时进行摄像头视频流保存成文件和播放操作   -----------------------   $ gst-launch-1.0 -vvv v4l2src device=/dev/video3 ! 'image/jpeg,width=1920,height=1080,framerate=30/1' ! vpudec output-format=4 ! imxipuvideotransform ! imxg2dclockoverlay time-format="%Y/%m/%d %H:%M:%S" ! tee name=splitter ! queue ! imxipuvideotransform ! 'video/x-raw,width=1920,height=1080,framerate=30/1' ! imxvpuenc_h264 bitrate=8000 ! filesink location=test.mp4 splitter. ! queue ! imxg2dvideosink sync=false   CPU占用率:~53% x 1core of 4cores   -----------------------   ./ 录制下来的 test.mp4文件可以通过下面pipeline进行回放   -----------------------   gst-launch-1.0 filesrc location=/home/root/test.mp4 typefind=true ! h264parse ! vpudec ! imxv4l2sink   -----------------------   4. 海康网络摄像头测试   a). 首先通过海康萤石管理软件配置摄像头网络配置为固定IP - 10.20.1.99/255.255.255.0   b). 然后将Apalis iMX6 eth0 网络配置为固定IP - 10.20.1.98/255.255.255.0,然后和摄像头确保能够ping通。   c). 通过下面pipeline通过rtsp捕获摄像头适配流并播放,admin对应的password在每个摄像头标签上面有提供。   -----------------------   $ gst-launch-1.0 rtspsrc location=rtsp://admin:password@10.20.1.99:554/h264/ch1/main/av_stream latency=10 ! queue ! rtph264depay ! vpudec ! imxg2dvideosink   CPU占用率:~18% x 1core of 4cores   -----------------------   当然,也同样可以将捕获的视频流保存成本地文件,这里就不赘述了。   5. 四路摄像头同时播放示例   a). 基于上面两个章节的测试后,我们现在来进行四路摄像头同时播放显示测试,当然此时显示窗口就不能全屏了,而是要对应调整大小和位置。   b). 首先测试在屏幕左上角显示Full HD USB摄像头输出   -----------------------   $ gst-launch-1.0 v4l2src device=/dev/video3 ! 'image/jpeg,width=1920,height=1080,framerate=30/1' ! vpudec output-format=4 ! imxipuvideotransform ! imxg2dclockoverlay time-format="%Y-%m-%d %H:%M:%S" halignment=2 valignment=1 ! imxg2dvideosink sync=false window-width=960 window-height=480   -----------------------   c). 然后测试在屏幕左下角显示网络摄像头输出   -----------------------   $ gst-launch-1.0 rtspsrc location=rtsp://admin:XIYFYO@10.20.1.99:554/h264/ch1/main/av_stream latency=10 ! queue ! rtph264depay ! vpudec ! imxg2dvideosink window-width=960 window-height=480 window-y-coord=480   -----------------------   d). 然后测试在屏幕右上角显示OV5640 MIPI/CSI-2摄像头输出   -----------------------   $ gst-launch-1.0 imxv4l2src device=/dev/video2 ! capsfilter caps="video/x-raw, width=1920, height=1080, framerate=30/1" ! imxipuvideotransform ! imxg2dclockoverlay time-format="%Y-%m-%d %H:%M:%S" halignment=2 valignment=1 ! imxg2dvideosink sync=false window-width=960 window-height=480 window-x-coord=960   -----------------------   e). 然后测试在屏幕右下角显示模拟摄像头输出   -----------------------   $ gst-launch-1.0 -v imxv4l2videosrc ! imxipuvideotransform ! imxg2dclockoverlay time-format="%Y-%m-%d %H:%M:%S" halignment=2 valignment=1 ! imxg2dvideosink window-width=960 window-height=480 window-x-coord=960 window-y-coord=480   -----------------------   f). 最后测试上面四路摄像头同时输出   本文用如下测试脚本进行测试,当然也可以将上面pipeline都在一个gst-launch里面运行,不过可能需要适当增加queue。   -----------------------   CPU占用率:~50% x 3core of 4cores   -----------------------   显示效果如下图,另外需要注意由于这个测试除了占用比较大的CPU资源,也大量使用了VPU,GPU等硬件资源,因此需要考虑对Apalis iMX6进行良好散热才能保证运行稳定。   6. 总结   如上述示例,iMX6处理器已经可以支持丰富的摄像头资源,为了保证工作高效和稳定,在可能的情况下,尽量采用IMX专用的gstreamer元件。
  • 热度 21
    2016-5-7 09:23
    1589 次阅读|
    0 个评论
    By Toradex 秦海 1). 简介 随着ARM平台性能的日益强大和嵌入式设备的发展,对于多媒体处理如音视频播放,摄像头,流媒体处理等需求也日益增多,本文就通过几个基于嵌入式Linux下多媒体应用的示例来简单展示下使用Gstreamer框架进行多媒体处理的方法. Gstreamer是一个基于Pipeline的多媒体框架,基于GObject,以C语言写成,目前是嵌入式Linux最为常用的处理多媒体应用框架. Element是Gstreamer最重要和基本的对象类,通过Plugin的形式提供,多个Elements可以组合为bin,并进一步聚合形成一个Pipeline完成一个多媒体应用处理. 2). 硬件准备  本文测试所使用平台为Toradex Colibri i.MX6 ARM计算机核心板模块, 基于NXP i.MX6 SoC, 配合Colibri开发板. ./ 摄像头作为多媒体输入源使用Logitech 720P USB摄像头 3). 软件准备 OS为Toradex官方Ycoto project兼容嵌入式Linux发布 V2.5 beta3. ./ Gstreamer-0.10, 系统自带 ./ 安装gstreamer相关插件包 ---------------- root@colibri-imx6:~# opkg update root@colibri-imx6:~# opkg install gst-plugins-base-meta gst-plugins-good-meta root@colibri-imx6:~# wget http://feeds.angstrom-distribution.org/feeds/v2015.06/ipk/glibc/armv7ahf-vfp-neon/base/libavcodec54_9.16-r0.9_armv7ahf-vfp-neon.ipk root@colibri-imx6:~# wget http://feeds.angstrom-distribution.org/feeds/v2015.06/ipk/glibc/armv7ahf-vfp-neon/base/libswscale2_9.16-r0.9_armv7ahf-vfp-neon.ipk root@colibri-imx6:~# wget http://feeds.angstrom-distribution.org/feeds/v2015.06/ipk/glibc/armv7ahf-vfp-neon/base/libavutil52_9.16-r0.9_armv7ahf-vfp-neon.ipk root@colibri-imx6:~# wget http://feeds.angstrom-distribution.org/feeds/v2015.06/ipk/glibc/armv7ahf-vfp-neon/base/libavformat54_9.16-r0.9_armv7ahf-vfp-neon.ipk root@colibri-imx6:~# opkg install libavutil52_9.16-r0.9_armv7ahf-vfp-neon.ipk root@colibri-imx6:~# opkg install libavcodec54_9.16-r0.9_armv7ahf-vfp-neon.ipk root@colibri-imx6:~# opkg install libswscale2_9.16-r0.9_armv7ahf-vfp-neon.ipk root@colibri-imx6:~# opkg install libavformat54_9.16-r0.9_armv7ahf-vfp-neon.ipk root@colibri-imx6:~# opkg install gst-ffmpeg ----------------   4). 测试gstreamer Gstreamer提供了两个非常方便的工具gst-launch和gst-inspect,在真正将Gstreamer pipeline集成到你的程序里面前,可以使用这两个工具在命令行下面进行pipeline的准备和测试,本文也主要基于这种模式进行演示,而详细的关于Gstreamer在程序中使用方法请参考这里. gst-inspect可以用来查看当前系统已经安装的plugin或者具体查看某个element的属性来判定pipeline中elements互联兼容性,详细说明请见这里. gst-launch 用于编译和运行一个pipeline,可以方便的对pipeline进行不同组合尝试并测试,如下面用来显示一个视频测试图案. ---------------- root@colibri-imx6:~# gst-launch videotestsrc ! 'video/x-raw-rgb, width=(int)640,height=(int)480' ! ximagesink ---------------- 5). 应用示例 a). 播放摄像头 使用v4l2src元件采集摄像头视频,视频格式为YUY2/帧率30/分辨率640x480; 使用imxv4l2sink元件利用GPU加速播放采集的视频; 如果使用ximagesink元件来播放则没有硬件加速. ---------------- root@colibri-imx6:~# gst-launch v4l2src device=/dev/video0 ! 'video/x-raw-yuv, framerate=30/1, width=(int)640, height=(int)480, format=(fourcc)YUY2' ! imxv4l2sink disp-width=640 disp-height=480 ---------------- 目标板CPU占用率: 37.5% b). 采集摄像头保存为文件 同样使用v4l2src元件采集摄像头视频; ffmpegcolorspace元件转换颜色格式为I420; vpuenc元件调用硬件VPU进行H.264编码; matroskamux元件进行mkv mux; filesink元件输出到文件 ---------------- root@colibri-imx6:~# gst-launch -v v4l2src device=/dev/video0 ! ffmpegcolorspace ! 'video/x-raw-yuv, framerate=30/1, width=(int)640, height=(int)480, format=(fourcc)I420' ! queue max-size-buffers=2 ! vpuenc codec=6 ! matroskamux ! filesink location=output.mkv ---------------- 目标板CPU占用率: 40% c). 回放视频文件 使用filesrc元件读取视频文件; aiurdemux元件进行demux; vpudec元件通过硬件VPU进行H.264解码; imxv4l2sink元件播放. ---------------- root@colibri-imx6:~# gst-launch filesrc location=/home/root/output.mkv typefind=true ! aiurdemux ! queue ! vpudec ! imxv4l2sink disp-width=640 disp-height=480 ---------------- 目标板CPU占用率: 3.5% d). RTP摄像头流媒体到远程主机 使用v4l2src元件采集摄像头; ffmpegcolorspace转换颜色格式; vpuenc元件调用硬件VPU进行H.264编码;rtph264pay元件进行h264流rtp封装; udpsink元件进行udp传输. ---------------- //Ubuntu主机IP: 10.20.1.116 //Colibri i.MX6目标板IP: 10.20.1.122 /* Colibri i.MX6 */ gst-launch -v v4l2src device=/dev/video0 ! ffmpegcolorspace! 'video/x-raw-yuv, framerate=30/1, width=(int)640, height=(int)480, format=(fourcc)I420' ! vpuenc codec=6 ! rtph264pay ! udpsink host=10.20.1.116 port=5000 /* Ubuntu 主机 */ //Ubuntu 14.04, 安装gstreamer-ffmpeg wget http://ppa.launchpad.net/mc3man/gstffmpeg-keep/ubuntu/pool/main/g/gstreamer0.10-ffmpeg/gstreamer0.10-ffmpeg_0.10.13-5ubuntu1~trusty2.1_amd64.deb sudo dpkg -i gstreamer0.10-ffmpeg_0.10.13-5ubuntu1~trusty2.1_amd64.deb //播放流媒体, caps设置从目标板获得 gst-launch-0.10 udpsrc port=5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z0JAHqaAoD2QAA\\=\\=\\,aM44gAA\\=\", payload=(int)96, ssrc=(uint)1172839120, clock-base=(uint)784846202, seqnum-base=(uint)58343" ! rtph264depay ! ffdec_h264 ! ximagesink ---------------- 目标板CPU占用率: 35%   6). Gstreamer1.0应用示例 Colibri i.MX6 最新Linux发布版本V2.6beta1已经支持gstreamer1.0,升级方法请见这里 ./ 软件准备 安装相关插件包 ---------------- opkg update opkg install gstreamer1.0-plugins-base-meta opkg install gstreamer1.0-plugins-good-meta opkg remove --force-depends libgstimxcompositor0 //目前版本中需要移除否则无法使用gstreamer ---------------- ./ 应用示例 a). 播放摄像头 ---------------- root@colibri-imx6:~# gst-launch-1.0 imxv4l2src device=/dev/video0 ! 'video/x-raw, framerate=30/1, width=(int)640, height=(int)480, format=(string)YUY2' ! imxv4l2sink overlay-width=640 overlay-height=480 ---------------- 目标板CPU占用率: 30% b). 采集摄像头保存为文件 ---------------- root@colibri-imx6:~# gst-launch-1.0 imxv4l2src device=/dev/video0 ! videoconvert ! 'video/x-raw, framerate=30/1, width=(int)640, height=(int)480, format=(string)I420' ! queue max-size-buffers=2 ! vpuenc_h264 ! matroskamux ! filesink location=output.mkv ---------------- 目标板CPU占用率: 16% c). 回放视频文件 ---------------- root@colibri-imx6:~# gst-launch-1.0 filesrc location=/home/root/output.mkv typefind=true ! matroskademux ! queue ! vpudec ! imxv4l2sink overlay-width=640 overlay-height=480 ---------------- 目标板CPU占用率: 4%   d). RTP摄像头流媒体到远程主机 ---------------- //Ubuntu主机IP: 10.20.1.116 //Colibri i.MX6目标板IP: 10.20.1.122 /* Colibri i.MX6 */ gst-launch-1.0 imxv4l2src device=/dev/video0 ! videoconvert ! 'video/x-raw, framerate=30/1, width=(int)640, height=(int)480, format=(string)I420' ! queue max-size-buffers=2 ! vpuenc_h264 ! rtph264pay ! udpsink host=10.20.1.116 port=5000 /* Ubuntu 主机 */ //Ubuntu 14.04, 安装libav (同0.10 ffmpeg) sudo apt-get install gstreamer1.0-libav //播放流媒体 gst-launch-1.0 udpsrc port=5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000,encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! avdec_h264 ! videoconvert ! ximagesink ---------------- 目标板CPU占用率: 13%   e). 摄像头连接到远程主机tcp视频流到目标版再rtp回远程主机播放 ---------------- //Ubuntu主机IP: 10.20.1.116 //Colibri i.MX6目标板IP: 10.20.1.122 /* Ubuntu 主机 */ //采集摄像头并建立tcp server gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! 'video/x-raw, framerate=30/1, width=(int)640, height=(int)480, format=(string)I420' ! jpegenc ! tcpserversink host=10.20.1.116 port=5000 /* Colibri i.MX6 */ //从tcp server获取摄像头视频流,并进行H.264压缩后rtp回远程主机 gst-launch-1.0 tcpclientsrc host=10.20.1.116 port=5000 ! jpegdec ! queue max-size-buffers=2 ! vpuenc_h264 ! rtph264pay ! udpsink host=10.20.1.116 port=5001 /* Ubuntu 主机 */ //播放rtp视频流 gst-launch-1.0 udpsrc port=5001 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000,encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! avdec_h264 ! videoconvert ! ximagesink ---------------- 目标板CPU占用率: 31% 7). 总结 由上面示例可见Gstreamer是一个非常强大且配置灵活的多媒体处理框架,并且配合相应的plugin,也可以充分调用硬件GPU/VPU加速,使其能够在嵌入式设备上面利用有限的资源高效的实现广泛的多媒体应用.
  • 热度 25
    2016-5-5 17:15
    1950 次阅读|
    0 个评论
    By Toradex 秦海 1).  简介 随着ARM平台性能的日益强大和嵌入式设备的发展,对于多媒体处理如音视频播放,摄像头,流媒体处理等需求也日益增多,本文就通过几个基于嵌入式Linux下多媒体应用的示例来简单展示下使用Gstreamer框架进行多媒体处理的方法. Gstreamer 是一个基于Pipeline的多媒体框架,基于GObject,以C语言写成,目前是嵌入式Linux最为常用的处理多媒体应用框架. Element是Gstreamer最重要和基本的对象类,通过Plugin的形式提供,多个Elements可以组合为bin,并进一步聚合形成一个Pipeline完成一个多媒体应用处理. 2).  硬件准备 ./ 本文测试所使用平台为Toradex  Colibri i.MX6  ARM计算机核心板模块, 基于NXP i.MX6 SoC, 配合 Colibri开发板 . ./ 摄像头作为多媒体输入源使用Logitech 720P USB摄像头 3).  软件准备 ./ OS为Toradex官方Ycoto project兼容嵌入式 Linux发布  V2.5 beta3. ./ Gstreamer-0.10, 系统自带 ./ 安装gstreamer相关插件包 ---------------- root@colibri-imx6:~# opkg update root@colibri-imx6:~# opkg install gst-plugins-base-meta gst-plugins-good-meta   root@colibri-imx6:~# wget http://feeds.angstrom-distribution.org/feeds/v2015.06/ipk/glibc/armv7ahf-vfp-neon/base/libavcodec54_9.16-r0.9_armv7ahf-vfp-neon.ipk root@colibri-imx6:~# wget http://feeds.angstrom-distribution.org/feeds/v2015.06/ipk/glibc/armv7ahf-vfp-neon/base/libswscale2_9.16-r0.9_armv7ahf-vfp-neon.ipk root@colibri-imx6:~# wget http://feeds.angstrom-distribution.org/feeds/v2015.06/ipk/glibc/armv7ahf-vfp-neon/base/libavutil52_9.16-r0.9_armv7ahf-vfp-neon.ipk root@colibri-imx6:~# wget http://feeds.angstrom-distribution.org/feeds/v2015.06/ipk/glibc/armv7ahf-vfp-neon/base/libavformat54_9.16-r0.9_armv7ahf-vfp-neon.ipk   root@colibri-imx6:~# opkg install libavutil52_9.16-r0.9_armv7ahf-vfp-neon.ipk root@colibri-imx6:~# opkg install libavcodec54_9.16-r0.9_armv7ahf-vfp-neon.ipk root@colibri-imx6:~# opkg install libswscale2_9.16-r0.9_armv7ahf-vfp-neon.ipk root@colibri-imx6:~# opkg install libavformat54_9.16-r0.9_armv7ahf-vfp-neon.ipk   root@colibri-imx6:~# opkg install gst-ffmpeg ---------------- 4).  测试 gstreamer Gstreamer提供了两个非常方便的工具gst-launch和gst-inspect,在真正将Gstreamer pipeline集成到你的程序里面前,可以使用这两个工具在命令行下面进行pipeline的准备和测试,本文也主要基于这种模式进行演示,而详细的关于Gstreamer在程序中使用方法请参考 这里 . gst-inspect可以用来查看当前系统已经安装的plugin或者具体查看某个element的属性来判定pipeline中elements互联兼容性,详细说明请见 这里 . gst-launch 用于编译和运行一个pipeline,可以方便的对pipeline进行不同组合尝试并测试,如下面用来显示一个视频测试图案. ---------------- root@colibri-imx6:~# gst-launch videotestsrc ! 'video/x-raw-rgb, width=(int)640,height=(int)480' ! ximagesink ----------------     5).  应用示例 a).  播放摄像头   使用v4l2src元件采集摄像头视频,视频格式为YUY2/帧率30/分辨率640x480; 使用imxv4l2sink元件利用GPU加速播放采集的视频; 如果使用ximagesink元件来播放则没有硬件加速. ---------------- root@colibri-imx6:~# gst-launch v4l2src device=/dev/video0 ! 'video/x-raw-yuv, framerate=30/1, width=(int)640, height=(int)480, format=(fourcc)YUY2' ! imxv4l2sink disp-width=640 disp-height=480 ---------------- 目标板CPU占用率: 37.5%   b).  采集摄像头保存为文件 同样使用v4l2src元件采集摄像头视频; ffmpegcolorspace元件转换颜色格式为I420; vpuenc元件调用硬件VPU进行H.264编码; matroskamux元件进行mkv mux;  filesink元件输出到文件 ---------------- root@colibri-imx6:~# gst-launch -v v4l2src device=/dev/video0 ! ffmpegcolorspace ! 'video/x-raw-yuv, framerate=30/1, width=(int)640, height=(int)480, format=(fourcc)I420' ! queue max-size-buffers=2 ! vpuenc codec=6 ! matroskamux ! filesink location=output.mkv ---------------- 目标板CPU占用率: 40%   c).  回放视频文件 使用filesrc元件读取视频文件; aiurdemux元件进行demux; vpudec元件通过硬件VPU进行H.264解码; imxv4l2sink元件播放. ---------------- root@colibri-imx6:~# gst-launch filesrc location=/home/root/output.mkv typefind=true ! aiurdemux ! queue ! vpudec ! imxv4l2sink disp-width=640 disp-height=480 ---------------- 目标板CPU占用率: 3.5%   d). RTP 摄像头流媒体到远程主机 使用v4l2src元件采集摄像头; ffmpegcolorspace转换颜色格式; vpuenc元件调用硬件VPU进行H.264编码;rtph264pay元件进行h264流rtp封装; udpsink元件进行udp传输. ---------------- //Ubuntu主机IP: 10.20.1.116 //Colibri i.MX6目标板IP: 10.20.1.122   /* Colibri i.MX6 */ gst-launch -v v4l2src device=/dev/video0 ! ffmpegcolorspace! 'video/x-raw-yuv, framerate=30/1, width=(int)640, height=(int)480, format=(fourcc)I420' ! vpuenc codec=6 ! rtph264pay ! udpsink host=10.20.1.116 port=5000   /* Ubuntu 主机 */ //Ubuntu 14.04, 安装gstreamer-ffmpeg wget http://ppa.launchpad.net/mc3man/gstffmpeg-keep/ubuntu/pool/main/g/gstreamer0.10-ffmpeg/gstreamer0.10-ffmpeg_0.10.13-5ubuntu1~trusty2.1_amd64.deb sudo dpkg -i gstreamer0.10-ffmpeg_0.10.13-5ubuntu1~trusty2.1_amd64.deb //播放流媒体, caps设置从目标板获得 gst-launch-0.10 udpsrc port=5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z0JAHqaAoD2QAA\\=\\=\\,aM44gAA\\=\", payload=(int)96, ssrc=(uint)1172839120, clock-base=(uint)784846202, seqnum-base=(uint)58343" ! rtph264depay ! ffdec_h264 ! ximagesink ---------------- 目标板CPU占用率: 35%   6). Gstreamer1.0 应用示例 Colibri i.MX6 最新Linux发布版本V2.6beta1已经支持gstreamer1.0,升级方法请见这里 ./ 软件准备 安装相关插件包 ---------------- opkg update opkg install gstreamer1.0-plugins-base-meta opkg install gstreamer1.0-plugins-good-meta opkg remove --force-depends libgstimxcompositor0 //目前版本中需要移除否则无法使用gstreamer ---------------- ./ 应用示例 a).  播放摄像头 ---------------- root@colibri-imx6:~# gst-launch-1.0 imxv4l2src device=/dev/video0 ! 'video/x-raw, framerate=30/1, width=(int)640, height=(int)480, format=(string)YUY2' ! imxv4l2sink overlay-width=640 overlay-height=480 ---------------- 目标板CPU占用率: 30%   b).   采集摄像头保存为文件 ---------------- root@colibri-imx6:~# gst-launch-1.0 imxv4l2src device=/dev/video0 ! videoconvert ! 'video/x-raw, framerate=30/1, width=(int)640, height=(int)480, format=(string)I420' ! queue max-size-buffers=2 ! vpuenc_h264 ! matroskamux ! filesink location=output.mkv ---------------- 目标板CPU占用率: 16%   c).  回放视频文件 ---------------- root@colibri-imx6:~# gst-launch-1.0 filesrc location=/home/root/output.mkv typefind=true ! matroskademux ! queue ! vpudec ! imxv4l2sink overlay-width=640 overlay-height=480 ---------------- 目标板CPU占用率: 4%   d). RTP 摄像头流媒体到远程主机 ---------------- //Ubuntu主机IP: 10.20.1.116 //Colibri i.MX6目标板IP: 10.20.1.122   /* Colibri i.MX6 */ gst-launch-1.0 imxv4l2src device=/dev/video0 ! videoconvert ! 'video/x-raw, framerate=30/1, width=(int)640, height=(int)480, format=(string)I420' ! queue max-size-buffers=2 ! vpuenc_h264 ! rtph264pay ! udpsink host=10.20.1.116 port=5000 /* Ubuntu 主机 */ //Ubuntu 14.04, 安装libav (同0.10 ffmpeg) sudo apt-get install gstreamer1.0-libav   //播放流媒体 gst-launch-1.0 udpsrc port=5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000,encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! avdec_h264 ! videoconvert ! ximagesink ---------------- 目标板CPU占用率: 13%   e).  摄像头连接到远程主机tcp 视频流到目标版再rtp 回远程主机播放 ---------------- //Ubuntu主机IP: 10.20.1.116 //Colibri i.MX6目标板IP: 10.20.1.122   /* Ubuntu 主机 */ //采集摄像头并建立tcp server gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! 'video/x-raw, framerate=30/1, width=(int)640, height=(int)480, format=(string)I420' ! jpegenc ! tcpserversink host=10.20.1.116 port=5000   /* Colibri i.MX6 */ //从tcp server获取摄像头视频流,并进行H.264压缩后rtp回远程主机 gst-launch-1.0 tcpclientsrc host=10.20.1.116 port=5000 ! jpegdec ! queue max-size-buffers=2 ! vpuenc_h264 ! rtph264pay ! udpsink host=10.20.1.116 port=5001   /* Ubuntu 主机 */ //播放rtp视频流 gst-launch-1.0 udpsrc port=5001 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000,encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! avdec_h264 ! videoconvert ! ximagesink ---------------- 目标板CPU占用率: 31%   7).  总结 由上面示例可见Gstreamer是一个非常强大且配置灵活的多媒体处理框架,并且配合相应的plugin,也可以充分调用硬件GPU/VPU加速,使其能够在嵌入式设备上面利用有限的资源高效的实现广泛的多媒体应用.
  • 热度 21
    2016-2-20 00:13
    1420 次阅读|
    0 个评论
    简介 本文主要基于ARM嵌入式模块系统展示在嵌入式Linux中使用摄像头示例,所采用的模块为 Toradex VF61 ,是一款性价比极高但不包含硬件视频编解码加速的模块,核心处理器为NXP/Freescale Vybrid,Cortex-A5和M4异构双核架构。 1). 目前越来越多的嵌入式系统采用摄像头应用,其中主要有下面几种方式 远程监控:如闭路电视系统,操作人员通过摄像头远程监控某个特定区域,小到一个小区,达到市政公共场所,都可能有这样的应用。 监控视频录制:另外一些监控系统不一定有操作人员一直监控,则会通过录制监控视频的方式在需要的时候调出相关视频进行查阅。 嵌入式视觉系统:嵌入式视觉系统会对视频图片进行处理并提取更多复杂信息,如雷达和城市智能交通应用。 视频传感器:如临床诊断设备会对采集的视频图像进行分析来诊断,智能购物设备通过采集视频图像分析使用者特征来定向推广销售等等。 2). 环境配置 ./ ARM嵌入式模块系统: Toradex VF61 以及 Colibri Eva board,详细的配置使用手册请见 这里 ./ 摄像头 Logitech HD 720p USB摄像头 D-Link DCS-930L IP 摄像头 ./ 软件: Toradex 标准Embedded Linux发布版本V2.4(已预装),详细介绍请见 这里 GStreamer框架,广泛应用于各种多媒体应用开发,可以实现如视频编辑,媒体流以及媒体播放等多媒体应用,同时配合各种插件(包含输入输出单元,过滤器,编解码器等),GStreamer可以支持多种不同媒体库如MP3,FFmpeg等。所需安装包如下: $ opkg update $ opkg install gst-plugins-base-meta gst-plugins-good-meta gst-ffmpeg 查看目前已经安装的插件和单元 $ gst-inspect   GStreamer 元件 (element) 和管道 (Pipeline) 简介 根据《GStreamer Application Development Manual》章节3所述,元件是GStreamer最重要的对象类,它可以被读取,解码以及显示。管道为多个元件互联一起形成的元件链,可以用于一些特定的任务,如视频播放或捕捉。默认情况下GStreamer 包含大量的元件集以便于开发各种各样的多媒体应用。本文中我们会使用一些管道去展示一些元件的使用。 下图是一个基本的用于Ogg播放的管道示例,使用一个分流器和两个分支,一个处理音频,另一个处理视频。可以看到一些元件只有src 衬垫 (pad),另一些只有sink衬垫或者两者都有。 在连接一个管道前,我们同样需要通过 ”gst-inspect” 命令查看所需的插件是否兼容,如下示例查看ffmpegcolorspace 插件。 $ gst-inspect ffmpegcolorspace 基本信息描述 ----------------------------------------------------------- Factory Details:   Long name: FFMPEG Colorspace converter   Class: Filter/Converter/Video   Description: Converts video from one colorspace to another   Author(s): GStreamer maintainers gstreamer-devel@lists.sourceforge.net ----------------------------------------------------------- Src 和 sink 功能描述 ----------------------------------------------------------- SRC template: 'src'     Availability: Always     Capabilities:       video/x-raw-yuv       video/x-raw-rgb       video/x-raw-gray   SINK template: 'sink'     Availability: Always     Capabilities:       video/x-raw-yuv       video/x-raw-rgb       video/x-raw-gray ----------------------------------------------------------- 另如v4l2src元件,它只含有src衬垫功能,所以可以source一个视频流到另一个元件;再有ximagesink元件,它含有rgb格式sink衬垫功能。关于这部分更多详细介绍请关注 这里 。   显示一个视频测试图案 使用下面管道来显示一个视频测试图案 $ gst-launch videotestsrc ! autovideosink 其中autovideosink元件自动检测视频输出,videotestsrc元件可利用”pattern”属性生成多种格式的测试视频,如下面为雪花图案测试视频 $ gst-launch videotestsrc pattern=snow ! autovideosink   USB 摄像头 1). 从USB 摄像头显示视频 摄像头接入系统后,会在/dev目录下面显示对应的设备videox,x可以是0,1,2等等,取决于接入的摄像头数量。 请使用下面管道来全屏显示对应的摄像头视频 $ gst-launch v4l2src device=/dev/videox ! ffmpegcolorspace ! ximagesink // Video4Linux2插件是一个用于捕捉和播放视频的API和驱动框架,它支持多种USB摄像头以及其他设备;元件v4l2src属于Video4Linux2插件,用于读取Video4Linux2设备的视频帧,这里即为USB摄像头。Ffmpegcolorspace元件是一个用于转换多种颜色格式的过滤器,摄像头设备视频数据通常使用YUV颜色格式,而显示器通常使用RGB颜色格式。Ximagesink元件是一个X桌面标准的videosink元件。 在当前情况下,我们可以通过”top”命令看到目前CPU占有率为77.9% 另外,也可以通过设置一些参数来设定显示效果如尺寸,帧率等,如下面示例限定显示尺寸为320x240,此时CPU占有率下降为28.2% $ gst-launch v4l2src device=/dev/videox ! 'video/x-raw-yuv,width=320,height=240,framerate=30/1' ! ffmpegcolorspace ! ximagesink 2). 同时显示两路USB 摄像头 使用下面通道来同时显示两路摄像头,这里我们使用Logitech HD 720P摄像头和另外一种普通的MJPEG摄像头,在这种情况下CPU占用率为64.8%。 $ gst-launch v4l2src device=/dev/videox ! 'video/x-raw-yuv,width=320,height=240,framerate=30/1' ! ffmpegcolorspace ! ximagesink v4l2src device=/dev/video1 'video/x-raw-yuv,width=320,height=240,framerate=30/1' ! ffmpegcolorspace ! ximagesink 3). 录制USB 摄像头视频 使用下面管道来录制MP4格式摄像头视频 $ gst-launch --eos-on-shutdown v4l2src device=/dev/videox ! ffenc_mjpeg ! ffmux_mp4 ! filesink location=video.mp4 //--eos-on-shutdown参数用于正确关闭文件。ffenc_mjpeg元件是MJPEG格式编码器。ffmux_mp4是MP4格式合成器。filesink元件声明来自v4l2的源数据会被存储为文件而不是显示于ximagesink元件,另外也可以任意指定文件存储位置。 在这种情况下录制摄像头视频CPU占有率8%左右。 4). 视频播放 使用下面管道来播放上面录制的视频 $ gst-launch filesrc location=video.mp4 ! qtdemux name=demux demux.video_00 ! queue ! ffdec_mjpeg ! ffmpegcolorspace ! ximagesink //filesrc元件声明视频源数据来自于一个文件而不是视频设备如摄像头。ffdec_mjpeg元件为MJPEG格式解码器。 在这种情况下,由于所录制视频为摄像头最高分辨率,因此CPU占有率为95%左右。 5). 通过HTTP 播放视频 使用下面管道播放特定URL视频 $ gst-launch souphttpsrc location=http://upload.wikimedia.org/wikipedia/commons/4/4b/MS_Diana_genom_Bergs_slussar_16_maj_2014.webm ! matroskademux name=demux demux.video_00 ! queue ! ffdec_vp8 ! ffmpegcolorspace ! ximagesink // souphttpsrc元件用于通过HTTP接收网络数据。和播放本地视频不同,一个存放视频文件的网络地址制定给了location参数。ffdec_vp8元件是webm格式解码器。 在这种情况下,CPU占用率为40%左右。 6). 通过TCP 串流摄像头视频 这里配置串流VF61摄像头视频到另外一台运行Ubuntu Linux主机 VF61 IP = 192.168.0.8 Ubuntu IP = 192.168.0.7 在VF61上面运行下面管道 $ gst-launch v4l2src device=/dev/video1 ! video/x-raw-yuv,width=320,height=240 ! ffmpegcolorspace ! ffenc_mjpeg ! tcpserversink host=192.168.0.7 port=5000 然后在Ubuntu上面运行下面管道来查看视频流 $ gst-launch tcpclientsrc host=192.168.0.8 port=5000 ! jpegdec ! autovideosink 这里使用Logitech HD 720P摄像头,CPU占有率为65%左右。   在 VF61 上面使用 D-Link IP 摄像头 1). 显示摄像头视频 这里使用D-Link DSC-930L 摄像头,并设置视频流为average quality JPEG格式,320x240分辨率,帧率为15/1’,IP = 192.168.0.200 使用下面管道来显示摄像头视频 $ gst-launch -v souphttpsrc location='http://192.168.0.200/video.cgi' is-live=true ! multipartdemux ! decodebin2 ! ffmpegcolorspace ! ximagesink 2). 视频录制 使用下面管道来录制视频 $ gst-launch --eos-on-shutdown –v souphttpsrc location='http://192.168.0.200/video.cgi' is-live=true ! multipartdemux ! decodebin2 ! ffmpegcolorspace ! ffenc_mjpeg ! ffmux_mp4 ! filesink location=stream.mp4 在这种情况下,CPU占有率为40% 左右。 3). 通过TCP 串流视频到另一个IP 地址 这里配置串流IP摄像头视频到VF61,然后再到另外一台运行Ubuntu Linux主机 Ubuntu IP = 192.168.0.12 在VF61上面运行下面管道 $ gst-launch --eos-on-shutdown –v souphttpsrc location='http://192.168.0.200/video.cgi' is-live=true ! multipartdemux ! decodebin2 ! ffmpegcolorspace ! ffenc_mjpeg ! Tcpserversink host=192.168.0.12 port 5000 然后在Ubuntu上面运行下面管道来查看视频流 $ gst-launch tcpclientsrc host=192.168.0.8 port=5000 ! jpegdec ! autovideosink 在这种情况下,VF61 CPU占用率为95% 左右。 总结 本文着重展示了通过GStreamer 元件,管道在Embedded Linux设备上面应用USB或IP摄像头,相关的更多管理使用示例还可以从网络上面找到很多,可以结合本文一起来充分理解相关应用。 本文所做示例下VF61 CPU和MEM占用率比较请见下图,可见NXP/Freescale Vybrid VF61 处理器尽管没有独立的硬件视频处理单元也基本上可以胜任基本的摄像头视频应用,结合其非常有竞争力的成本,使其成为性价比非常高的产品。但是如果对视频处理有更高的要求如嵌入式视觉系统,则建议考虑处理能力更强劲并含有独立GPU的基于NXP/Freescale i.MX6处理器的产品,如Toradex Colibri/Apalis i.MX6 模块。