天天看点

OneNET视频能力体验----使用USB摄像头推流

本例程使用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目录结构:

  • doc : SDK相关文档
  • include : SDK API相关头文件
    • ont SDK通用API、错误码等
    • edp EDP协议特有API
    • mqtt MQTT协议特有API
  • platforms : 平台相关的接口(include/platform.h)实现
    • posix 支持Posix系统的平台相关接口实现
    • win Windows系统的平台相关接口实现
  • sample : 各协议的示例
    • edp EDP协议的示例
    • mqtt MQTT协议的示例
  • src 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视频云。

OneNET视频能力体验----使用USB摄像头推流

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开发者中心,打开该产品,点击设备管理,再点击播放即可

OneNET视频能力体验----使用USB摄像头推流

7、实验效果

可以在OneNET开发者中心实时看到USB摄像头的视频显示

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

继续阅读