FFmpeg入门详解之124:Qt5 FFmpeg单路网络摄像头采集预览

Qt5+FFmpeg单路网络摄像头采集预览

源码工程:S26_Test4

 

RTSP协议简介

RTSP(Real Time Streaming Protocol),RFC2326

RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的IETF RFC标准。该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。

RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。

HTTP与RTSP相比,HTTP请求由客户机发出,服务器作出响应;使用RTSP时,客户机和服务器都可以发出请求,即RTSP可以是双向的。

编辑

RTSP是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通讯协定并不在其定义的范围内,服务器端可以自行选择使用TCP或UDP来传送串流内容,它的语法和运作跟HTTP 1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。而前面提到的允许同时多个串流需求控制(Multicast),除了可以降低服务器端的网络用量,更进而支持多方视讯会议(Video Conference)。

因为与HTTP1.1的运作方式相似,所以代理服务器〈Proxy〉的快取功能〈Cache〉也同样适用于RTSP,并因RTSP具有重新导向功能,可视实际负载情况来转换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。

 

实时流媒体会话协议,

SDP(会话描述协议)Session Description Protocol

RTP(实时传输协议)Realtime Transfer Protocol:音视频流

是用来控制声音或影像的多媒体串流协议,RTSP 提供了一个可扩展框架,使实时数据,如音频与视频的受控、点播成为可能。

媒体数据使用rtp,rtcp协议。

一般使用udp 作为传输层。

适合IPTV场景。

 

数据源包括现场数据与存储在文件中的数据。

该协议目的在于控制多个数据(音视流或视频流)发送连接,为发送选择通道,如UDP、多播UDP与TCP提供途径,并为选择基于RTP上发送机制提供方法传输时所用的网络通讯协定并不在其定义的范围内,服务器端可以自行选择使用TCP或UDP来传送串流内容,比较能容忍网络延迟.

 

 

TCP/IP 协议体系中的一个应用层协议,该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。

RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。

HTTP与RTSP相比,HTTP传送HTML,而RTSP传送的是多媒体数据。

 

RTSP是基于文本的协议,采用ISO10646字符集,使用UTF-8编码方案。

行以CRLF中断(\r\n:10,13:0x0A,0x0D),包括消息类型、消息头、消息体和消息长。但接收者本身可将CR和LF解释成行终止符。基于文本的协议使其以自描述方式增加可选参数更容易,接口中采用SDP作为描述语言。

RTSP是应用级协议,控制实时数据的发送。

RTSP提供了一个可扩展框架,使实时数据,如音频与视频的受控点播成为可能。数据源包括现场数据与存储在剪辑中数据。该协议目的在于控制多个数据发送连接,为选择发送通道,如UDP、组播UDP与TCP,提供途径,并为选择基于RTP上发送机制提供方法。

 

 

RTSP建立并控制一个或几个时间同步的连续流媒体。尽管连续媒体流与控制流交换是可能的,通常它本身并不发送连续流。换言之,RTSP充当多媒体服务器的网络远程控制。

RTSP连接没有绑定到传输层连接,如TCP。在RTSP连接期间,RTSP用户可打开或关闭多个对服务器的可传输连接以发出RTSP请求。

此外,可使用无连接传输协议,如UDP。

RTSP流控制的流可能用到RTP,但RTSP操作并不依赖用于携带连续媒体的传输机制。 

 

协议支持的操作如下:

RTSP协议支持

(1)从媒体服务器上检索媒体:用户可通过HTTP或其它方法提交一个演示描述。如演示是组播,演示式就包含用于连续媒体的组播地址和端口。如演示仅通过单播发送给用户,用户为了安全应提供目的地址。

(2)媒体服务器邀请进入会议:媒体服务器可被邀请参加正进行的会议,或回放媒体,或记录其中一部分,或全部。这种模式在分布式教育应用上很有用,会议中几方可轮流按远程控制按钮。

(3)将媒体加到现成讲座中:如服务器告诉用户可获得附加媒体内容,对现场讲座显得尤其有用。如HTTP/1.1中类似,RTSP请求可由代理、通道与缓存处理。

 

 

 

 

 

 

网络摄像头IPC(海康、大华)

 

rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream

 

username: 用户名。例如admin。

password: 密码。例如12345。

ip: 为设备IP。例如 192.168.1.103。

port: 端口号默认为554,若为默认可不填写。

codec:h264、MPEG-4、mpeg4。

channel: 通道号,起始为1。例如通道1,则为ch1。

subtype: 码流类型,主码流为main,辅码流为sub(主码流清晰用于本地,子码流用于网络传输)。

 

For example:

rtsp://admin:123456@192.168.1.103:554/h264/ch1/main/av_stream

 

用vlc中打开媒体->打开网络串流->输入上面地址即可显示摄像头

 

 

 

 

 

 

 

VLC模拟网络摄像头

 

测试工具:VLC

数据源:  文件或本地摄像头

测试功能:RTSP直播点播

 

播放地址:rtsp://127.0.0.1:8554/rtspa001

服务端:推流

客户端:拉流

 

 

rtsp://127.0.0.1:8554/aabb

 

模拟出:IPC,网络摄像头(RTSP)

 

 

 

Qt5+FFmpeg监控网络摄像头的代码实战

源码工程:S26_Test4

 

授人以鱼不如授人以渔

 

100行核心代码:视频监控

 

 

界面设计:

 

学习方法:[[宏观, 微观]]

 

代码流程(FFmpeg + Qt5):

1、初始化

2、打开网络摄像头流

3、分析流信息(video)

4、While(1){.............解封装、解码..............}

5、颜色空间转换:yuv--->rgb,sws_scale(...)

6、Qt界面显示

7、独立线程

 

数据结构与api:

AVFormatContext

AVInputFormat

AVOutputFormat

URLxxx:协议层

AVCodecContext

AVCodec

AVFrame

AVPacket

 

Init:: avformat_network_init

avformat_open_input(...)

avformat_find_stream_info(...)

avcodec_alloc_context3(...)

avcodec_find_decoder(...)

avcodec_open2(...)

 

编码:avcodec_send_frame(...), avcodec_receive_packet(..)

解码:avcodec_send_packet(...), avcodec_receive_frame(...)

 

 

 

具体步骤:

1、创建工程

2、设计界面

3、Pro:工程配置文件:头文件、库文件

4、封装Camera类:

5、独立线程

6、主界面:集成网络摄像头

 

 

 

 

 

 

 

 

程序猿的使命到底是什么?

 

 

 

 

 

玩命的挖坑,然后,不要命的填坑

 

请挑错:

上节课,噼里啪啦,啪啦噼里(胳膊、腿、大脑、眼睛、:: 零部件)

我们写了那么多代码,能保证一点问题都没有吗?

基本上是不可能的。

怎么办呢?

慢慢修复、慢慢优化、封装成优良的库(经得起考验)。

 

坑1:

..\S26_Test4\widget.h:28: Error: Not a signal or slot declaration

 

坑2:

QThread: Destroyed while thread is still running

 

坑3:

不能在 开始按钮的函数中,直接删除,ffmpeg转码核心对象()

m_pTheFmpg

 

坑4:

运行时的dll,需要放到exe同路径下,或设置path环境变量

 

坑5:

解码成功了,但是界面上没有图像

原因:没有绑定 信号对应的 槽函数

connect(.....)

 

坑6:

当点击 停止按钮的时候,,

QThread: Destroyed while thread is still running

原因:需要等一会

 

 

 

10.多路H265视频监控项目实战

 

界面设计

参考工程:S26_Test5_FFmpegMonitor_UI

注意:请不要直接商用,还有一些bug。

编辑

 

课程推荐:

qt5(c++)小白实战之初级篇

 

编辑

 

qt5零基础理论与实战之中级篇

 

编辑

 

 

 

 

 

 

 

FFmpeg摄像头监控的代码封装

 

FFmpegLiveCamera

 

 

坑:10:03:13: 程序异常结束。

 

原因:缺少运行时dll(ffmpeg)

 

 

 

 

 

 

 

 

 

独立线程

 

随机切换

 

 

边采集边预览边录制的代码封装

 

T3FFmpegH2645Encoder

 

T3FFmpegH2645Encoder2:课程录制

 

 

 

 

 

回放功能

 

海量视频存储、检索、。。。。。

 

 

坑:

QString s + int变量(0), \0, 

 

 

大家好,我的第一本书正式出版了,可以在京东各大店铺抢购哦。

《FFmpeg入门详解--音视频原理及应用:梅会东:清华大学出版社》

京东自营链接:https://item.jd.com/13377793.html
京东其它链接:https://search.jd.com/Search?keyword=FFmpeg%E5%85%A5%E9%97%A8%E8%AF%A6%E8%A7%A3--%E9%9F%B3%E8%A7%86%E9%A2%91%E5%8E%9F%E7%90%86%E5%8F%8A%E5%BA%94%E7%94%A8&enc=utf-8&suggest=1.his.0.0&wq=&pvid=24e80535073b4e1f98e30a3e6963fe81
 

编辑

编辑

编辑 编辑

 

 

出书过程非常艰辛,来回校正了好几遍,后续还有FFmpeg系列的其它图书。

第一本:FFmpeg入门详解--音视频原理及应用--梅会东--清华大学出版社

第二本:FFmpeg入门详解--流媒体直播原理及应用--梅会东--清华大学出版社

第三本:FFmpeg入门详解--命令行及音视频特效原理及应用--梅会东--清华大学出版社

第四本:FFmpeg入门详解--SDK二次开发及直播美颜原理及应用--梅会东--清华大学出版社

posted @ 2023-02-23 13:57  teachermei  阅读(227)  评论(0编辑  收藏  举报