IOT智能家居-音视频技术应用
由互联网转向物联网的今天,智能家居将逐渐成为热门行业之一,人人都是用手机控制家里的智能设备,完成无限功能的操作,实现科技生活的便捷,人不在家也能知道家里各种场景,人不在家也能智能家里的安全情况,人不在家也能给亲朋好友开门,让小偷的警告时时监控到吓退小偷,智能手机能够操控家里的一切,人在回家的路上就可以先开空调,智能家居有着无限潜能挖掘。
智能家居领域中音视频技术的应用非常之广泛,例如:猫眼、视频监控等,大量的使用音视频技术,其中音频采集、视频采集、音频编码、视频编码、音频解码、视频解码、音频传输、视频传输用的最多。那么今天给大家分享智能家居领域音视频技术中的视频编码技术深度剖析
注意:我们使用的FFmpeg开源库,FFmpeg本身支持x264编码,但是我们需要将x264一起打包编译到FFmpeg开发动态库中,这样才可以正常使用x264,因为默认情况下这个功能是关闭的。
技术一:音视频传输-简单流程?
第一步:采集音视频帧数据
第二步:进行音视频编码操作
1、视频编码->H264视频压缩数据
2、音频编码->FDKAAC音频压缩数据
备注:音视频编码器都可以自己选择
第三步:启动Onvif
启动Onvif后,在这个网段中,让其他设备来发现Onvif智能设备
第四步:激活音视频
1、查询服务端可用方法(OPTION)
1.1 客户端请求(OPTION request)
作用:询问服务器有哪些方法可用
"OPTIONS rtsp://192.168.1.122/TestSession RTSP/1.0"
"CSeq: 2"
"User-Agent: LibVLC/1.1.9 (LIVE555 Streaming Media v2011.01.06)"
1.2 服务器回应(OPTION response)
作用:回复的所有方法在Public字段
"RTSP/1.0 200 OK"
"CSeq: 2"
{"Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE"}
注意:
最后这个也很重要,最后一个消息头需要有两个CR LF
2、得到媒体描述信息(DESCRIBE)
2.1 客户端请求(DESCRIBE request)
作用:要求得到媒体描述信息
"DESCRIBE rtsp://192.168.1.122/TestSession RTSP/1.0"
"CSeq: 3"
"User-Agent: LibVLC/1.1.9 (LIVE555 Streaming Media v2011.01.06)"
"Accept: application/sdp"
2.2 服务器回应(DESCRIBE response)
作用:回应媒体描述信息,一般是sdp信息
"RTSP/1.0 200 OK"
"CSeq: 3" //和请求的序号要对应
{"Server: RTSP Service"
"Content-Base: rtsp://192.168.1.122/TestSession"
"Content-Type: application/sdp" //表示回应的是sdp信息
"Content-Length: 367"
}
然后再发送生成的sdp信息,sdp信息也可以和上面的字符串组合一起发送
3、建立RTSP会话(SETUP)
3.1 客户端请求(SETUP request)
作用:通过Transport头字段列出可接受的传输选项,建立会话
"SETUP rtsp://192.168.1.122/TestSession/trackID=1 RTSP/1.0"
"CSeq: 4"
"User-Agent: LibVLC/1.1.9 (LIVE555 Streaming Media v2011.01.06)"
"Transport: RTP/AVP;unicast;client_port=2274-2275"
3.2 服务器回应(SETUP response)
作用:建立会话,通过Transport头字段返回选择的具体传输选项,并返回建立的。
Session ID。
"RTSP/1.0 200 OK"
"CSeq: 4"
"Session: 68422540987712"
"Transport:RTPAVP;unicast;source=192.168.1.122;server_port=8000-8001;client_port=2274-2275;ssrc=3969838262"
4、请求开始传送数据(PLAY)
4.1 客户端请求(PLAY request)
作用:请求服务器开始发送数据
"PLAY rtsp://192.168.1.122/TestSession RTSP/1.0"
"CSeq: 5"
"User-Agent: LibVLC/1.1.9 (LIVE555 Streaming Media v2011.01.06)"
"Session: 68422540987712"
"Range: npt=0.000-"
4.2 服务器回应(PLAY response)
作用:回应该请求的信息
"RTSP/1.0 200 OK"
"CSeq: 5"
"Session: 68422540987712"
"RTP-Info: url=rtsp://192.168.1.122/TestSession/trackID=1"
5、数据传输
服务器->客户端:发送流媒体数据, 通过RTP协议传输数据
6、关闭会话,退出(TEARDOWN)
6.1 客户端请求(TEARDOWN request)
作用:请求关闭会话
"TEARDOWN rtsp://192.168.1.122/TestSession RTSP/1.0"
"CSeq: 6"
"User-Agent: LibVLC/1.1.9 (LIVE555 Streaming Media v2011.01.06)"
"Session: 68422540987712"
6.2 服务器回应(TEARDOWN response)
"RTSP/1.0 200 OK"
"CSeq: 6"
"Session: 68422540987712"
"Connection: Close"
技术二:视频编码->H264视频压缩数据?
步骤一:编译x264静态库
1、首先:查看库配置信息
解压x264压缩包,进入x264文件目录中执行如下命令查看配置
命令:./configure —help
2、其次:编写脚本
步骤二:编译FFmpeg支持x264动态库
备注:脚本代码如下
步骤三:FFmpeg视频编码流程?
步骤四:FFmpeg视频编码实现?
1、首先:配置FFmpeg环境
第一步:新建NDK项目
第二步:导入.so动态库到AS中
第三步:在CMakeLists.txt文件中配置.so动态库,同时链接动态库
第四步:在build.gradle文件中配置FFmpeg支持手机CPU架构类型
第五步:编译测试
2、其次:代码实现与分析
小编在这也推荐一下自己QQ群:468115610,学习氛围还行,共同学习探讨,三人行必有我师,一起为自己更好的2018!