FFmpeg入门详解之124:Qt5 FFmpeg单路网络摄像头采集预览
Posted 福优学苑@音视频+流媒体
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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二次开发及直播美颜原理及应用--梅会东--清华大学出版社
===================================
FFmpeg入门详解之9:Audacity音频工具
Audacity简介
Audacity是一款支持Linux、MacOS以及Windows等多种平台的快速多轨音频编辑、录制工具,支持WAV, AIFF, Ogg和MP3格式音乐文件,提供编辑、混音功能并提供预置效果、插件和无限次反悔操作。
Audacity下载地址:https://pc.qq.com/detail/0/detail_640.html
ffmpeg命令行: 将mp3转换为pcm格式,
ffmpeg -i guang.mp3 -ss 0 -t 30 -acodec pcm_s32le -f s32le -ac 2 -ar 44100 gh_pcm32le_44100.pcm
- -acodec pcm_s32le:输出pcm格式,采用signed 32编码,字节序为小尾端(大尾端为be);
- -ar 44100: 采样率44100
- -ac 2: 声道数2
Audacity导入PCM格式的文件并播放
- 第一步:文件--》导入--》原始数据
- 第二步:设置PCM参数,播放,即可。
Audacity功能介绍
1.多语用户界面(切换时必须重新打开)
2.导入与导出 WAV、MP3、Ogg Vorbis或者其他的声音文件格式
3.支持MP4、MOV、WMA、M4A 、AC3档。
4.录音与放音
5.对声音做剪切、复制、粘贴(可撤消无限次数)
6.多音轨混音
7.数字效果与插件
8.波封编辑
9.杂音消除
10.支持多声道模式,采样率最高可至96 kHz,每个取样点可以以24 bits表示
11.支持Nyquist编程语言,让您自行撰写效果器
12.对声音档进行切割
Audacity使用方法
1、点击并打开Audacity,进入Audacity工作界面,
2、在“文件”菜单栏中,打开自己想要剪辑的音乐,此处打开的是mp3文件“小小”,如图所示:
3、点击Audacity菜单栏的播放按钮进行音乐试听,确定好要剪辑的音频时间范围
4、拖动鼠标左键,选中想要剪辑的音频部分
5、在菜单栏最左侧,点击“文件”
6、在“文件”菜单栏跳出的下拉菜单中,选择“导出选择的音频”,如下图。
需要指出的是在下拉菜单中有“导出音频”和“导出选择的音频”,我们选择和点击后者
7、点击了“导出选择的音频”后,在对话框中更改剪辑了之后音频的文件名,如图所示:
8、点击右下角的“保存”即可
9、保存后会跳出对话框,编辑好相关信息,点击确定
10、自动生成剪辑后的音频文件,
以上是关于FFmpeg入门详解之124:Qt5 FFmpeg单路网络摄像头采集预览的主要内容,如果未能解决你的问题,请参考以下文章
FFmpeg入门详解之104:Win10快速安装OpenSSL(不用编译源码)
FFmpeg入门详解之121:颜色空间转换RGB和YUV的原理与实战