rk3399之视频显示_一

4 篇文章 3 订阅
4 篇文章 2 订阅

        rk3399是aarch64架构,性能还是比较强劲的。本篇开始介绍3399的视频解码显示及AI(需3399pro或3399 + 1808)分析的做法。只涉及应用层面,不涉及AI训练模型等。

        做过音视频或者在学习过程中的朋友应该都知道一款很著名的开源软件,ffmpeg。我们的项目也是基于此二次开发的。3399有专门的硬解码mpp,同样显示也可以opengl,这样才能发挥3399最大的硬件能力。但为了项目更好的开发及通用,本篇以mpp+qt的方案开展。实际上3399自带的qt库中,内部还是会调用opengl显示,只不过没有直接调用效率更高而已。

        进入正题,首先我们要学会的是ffmpeg库及一些常见的接口调用。

        int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options);

        打开视频流/文件流的接口,此接口在网络状态不是很好的情况下,打开摄像头可能会阻塞。所以需要对第四个参数进行相关设置。一般打开rtsp流的参数如下:

        

首先设定rtsp以tcp的形式打开,并且超时时间为500毫秒,以及数据交互的缓存大小(byte为单位)。

        int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);

        此接口获取流的一些详细参数,比如流类型,宽高,SPS/PPS等(在已知参数的情况下,不调此函数会加载的更快)。

        以上函数调用结束后,就可以进行流的读取了。

        int av_read_frame(AVFormatContext *s, AVPacket *pkt);

        此接口用于读取流的具体数据了,如果读取流的类型为h264的话,那么pkt里存储的是一个个的NALU单元。

        注意此接口在网络不通畅的情况下,也有可能进行阻塞。这个时候怎么办呢?查看AVFormatContext结构体,可以发现里面有一个成员表述如下:

        

 

        demuxing:解封装与muxing相对,一般是将文件中的数据转为内存数据

        muxing:封装,将码流转为不同流媒体格式,比如从h264到flv ts等

        这两个过程是比较轻量的,不涉及编解码。cpu消耗也比较低。我们这里是读取摄像头的码流,属于demuxing过程。按照注释来说,总结如下:

        demuxing过程,回调生效,用户必须在调用avformat_open_input函数之前进行设置。当处于阻塞过程时,回调函数返回1,将会中断阻塞过程。

        *callback(void*)为回调函数型构,opaque为用户自定义数据指针。

        红色是需要注意的地方,不要在调用avformat_open_input之后再设置回调函数,这是不会生效的。切记。

        本篇简单介绍了摄像头码流的拉取,得到了一个个的packet,下篇将逐步介绍怎么利用packet去进行解码录像等操作。

        关于视频相关demo或者需求请联系微信号HardAndBetter,或者进qq群586166104讨论。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值