本例程使用V4L2技术,采集USB摄像头数据,并在Ubuntu虚拟机中使用OneNET视频SDK,直接推流到OneNET视频云。
其中USB采集部分是用的这位同学的代码,
http://blog.csdn.net/li_wen01/article/details/71548079
在采集完毕之后再使用OneNET SDK推流,因为暂时优化得不好,先不发代码,需要的同学可以先去他博客下载采集代码。
SDK下载地址:https://github.com/cm-heclouds/video_sdk
1、基础知识
1.1 V4L2
v4L2全名是video for linux 2 ,是一个用于视频采集输出的一个编程框架,它支持许多USB摄像头,电视调谐器和相关设备,使其输出标准化,本章中我们会用到该框架采集USB摄像头。
1.2 H.264
H.264: H.264/AVC项目的目的是为了创建一个比以前的视频压缩标准,在更低的比特率的情况下依然能够提供良好视频质量的标准(如,一半或者更少于MPEG-2,H.263,或者MPEG-4 Part2 )。同时,还要不会太大的增加设计的复杂性。
优势:
1)网络亲和性,即可适用于各种传输网络
2)高的视频压缩比,当初提出的指标是比 H.263,MPEG-4,约为它们的 2 倍,现在都已基 实现;
我们使用了x264来进行编码,这是一个我们会在linux环境下用到的库。
x264 is a free software library and application for encoding video streams into the H.264/MPEG-4 AVC compression format, and is released under the terms of the GNU GPL.
注意:h.264是编码格式,libx264是编码库,也就是工具。
1.3 rtmp
RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。
注意:rtmp是是是传输协议,而RTMPdump(libRTMP)则是一个为RTMP数据流处理而生的工具包
1.4 OneNET sdk
OneNET视频能力是基于中移物联网OneNET平台构建的视频设备接入能力,为用户提供开放接入,远程设备控制,视频推流和云端分发等底层核心能力,并提供二次开发套件,方便用户定制开发自身行业应用。
设备接入,反向控制:支持MQTT协议接入
设备推流:支持RTMP推流
云端分发:支持RTMP, HLS分发
设备端推流:提供c-sdk,提供设备接入,推流等接口,可进行平台移植
播放端:支持三方常见播放器jwplayer、vlc、video.js
SDK目录结构:
2、开发环境
2.1 Linux环境
需要装x.264库,RTMPlib库,cmake编译工具
方法1:
直接使用apt-get工具,来获取需要的库
sudo apt-get insatll libx264
sudo apt-get install cmake
…
在编译过程中,如果提示缺少什么库,就直接apt-get install 就行了
方法2(推荐):(如果apt-get的cmake有问题的话,推荐使用此方法来装cmake)
直接去官网获取对应的源码,然后
./configure
make && make install
注意:x264需要生成静态库
2.2 OneNET环境
请参考OneNET开发文档创建产品和设备
https://open.iot.10086.cn/doc/art388.html#68
创建完后获得其产品ID,设备ID,设备注册码。
3、实验描述及工程文件清单
3.1实验描述
该实验使用USB摄像头作为视频采集端,并使用linux v4l2来驱动该摄像头,在获取到YUV422数据后,将其进行h264格式封装,最后使用rtmp推流到OneNET视频云。
3.2实验流程
1、在OneNET开发者中心创建RTMP设备,参考本文2.2章
2、在ubuntu中安装开发环境,包括libx264,cmake等等,实际环境中缺少什么就再安装,参考本文2.1章
3、进入ubuntu系统,打开命令行窗口,进入开发目录,直接输入命令 sh videosamplebuild.sh,即可开始生成项目文件。
4、进入开发目录,输入以下两个命令,在输入这两个命令后,能够在OneNET开发者中心设备管理栏中看到该设备上线(会有一个小绿点提示)
cd bin/
./sample_ov5640
5、进入OneNET开发者中心,打开该产品,点击设备管理,再点击播放即可
7、实验效果
可以在OneNET开发者中心实时看到USB摄像头的视频显示
注意:如果在第三步cmake编译通不过的话,建议重装cmake,
3.1 程序逻辑流程:
ont_video_live_stream_play
open_camera
init_camera
start_capture
RTMP_CreatePulish
RTMP_InitVideoParams
RTMP_SendScreenCapture
SendScreenCapture
read_frame
stop_capture
close_camera_device
RTMP_DeletePublish