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入门详解之124:Qt5 FFmpeg单路网络摄像头采集预览相关推荐

  1. FFmpeg入门详解之119:FFmpeg的SDK编程回顾总结并操练

    3.FFmpeg的SDK编程回顾总结并操练 参考课程:"FFmpeg4.3--系列5--SDK二次开发详解与实战" FFmpeg主要框架 FFmpeg骨架:"八大金刚&q ...

  2. FFmpeg入门详解之75:FFmpeg转码器Java版之系统分析与设计

    1.引言 1.1编写目的 本系统旨在提供一套简单.通用的音视频转码系统,将目前集成的第三方音视频服务替换,打造FYXY专属品牌的音视频服务,为公司添砖加瓦,提高核心竞争力. 1.2项目背景 融媒体是新 ...

  3. FFmpeg入门详解之82:FFmpeg转码器Java版之ava编码

    创建数据库:db_webavtc 创建数据表:avcategory(素材类别) id int primary key, pid int , cname varchar(255), cmemo varc ...

  4. FFmpeg入门详解之43:FFmpeg解封装的原理与实战

    FFMpeg 解封装 本例子实现的是将音视频分离,例如将封装格式为 FLV.MKV.MP4.AVI 等封装格式的文件,将音频.视频分离开来. 大致的解封装流程: 1.首先要对解复用器进行初始化. 2. ...

  5. FFmpeg入门详解之14:FFmpeg简介

    FFmpeg简介 ffmpeg是一个跨平台的音视频处理库,为了跨平台那么就需要编译出适用于各个平台的ffmpeg库. 一般在windows平台下会进行windows开发和安卓开发,所以本文的目的就是在 ...

  6. FFmpeg入门详解之103:FFmpeg Nginx VLC打造M3U8直播点播

    FFmpeg+Nginx+VLC打造M3U8点播 Nginx:  web服务器(win10,本地nginx) FFmpeg: m3u8切片(4.3.1) VLC: 点播客户端 切片命令行: ffmpe ...

  7. FFmpeg入门详解之122:Qt5 FFmpeg本地摄像头采集预览实战

    6.Qt5+FFmpeg本地摄像头采集预览实战 源码工程:S26_Test2 FFmpeg命令行处理摄像头 ffmpeg -list_devices true -f dshow -i dummy 命令 ...

  8. FFmpeg入门详解之116:rtsp live555摄像头直播

    rtsp+live555摄像头直播 Live555直播流程简介与演示 第一步,读取摄像头数据 第二步,x264编码 第三步,扩展live555 第四步,vlc或ffplay播放 ffplay -sta ...

  9. FFmpeg入门详解之83:流媒体与直播技术

    流媒体 流媒体又叫流式媒体,它是指商家用一个视频传送服务器(比如:vlc)把节目(比如:ande10.mp4)当成数据包发出,传送到网络上.用户通过解压设备对这些数据进行解压后,节目就会像发送前那样显 ...

最新文章

  1. 给定一个字符串s,返回去掉子串mi后的字符串。
  2. 【Vista中系统准备工具存在隐患,自动清除用户资料】
  3. 35. 脱壳篇-UPX和WinUpack压缩壳的使用和脱法
  4. MYSQL模式匹配:REGEXP和like用法
  5. phpcms的一些问题 乱码,安装
  6. 群发功能java_利用java实现邮箱群发功能
  7. 三维视觉基础之世界坐标系、相机坐标系、图像坐标系和像素坐标系之间的转换关系
  8. 朝鲜黑掉韩国政府版 Word
  9. 软件设计师(中级)历年真题与知识点总结(更新中...)
  10. 定时锁屏 android,Android定时锁屏功能实现(AlarmManager定时部分)
  11. CnOpenData中国工业企业股东信息数据
  12. C语言简易程序设计————7、输出特殊图案
  13. win7 关机速度比较快
  14. 对称性在第一型曲线积分中的应用
  15. 程序员代码下的许豪杰
  16. KeyShot Pro 9 v9.0 安装教程(含下载文件)
  17. linux期末vi简答题,Linux操作系统期末练习题lym
  18. 双像空间前方交会方法(一)---点投影系数方法
  19. 魔性,用 Python 实现火爆全网的「蚂蚁呀嘿」视频特效!
  20. 基于交汇的多机器人协作单目SLAM

热门文章

  1. 矩阵分析:广义逆矩阵,{1}逆,MP逆,D逆
  2. java 正则表达式匹配冒号_java 获取冒号后面的参数(正则)实现代码
  3. 洛谷 P1878 舞蹈课 —— 小顶堆
  4. PDF转换Word、Excel、PPT、图片,PDF去水印,PDF拆分该怎么做到这些
  5. 博世传感器调试笔记(一)----加速度传感器BMA253
  6. zookeeper关闭默认管理端口admin.serverPort=8080
  7. 关于机器翻译,看这一篇就够了
  8. opencv 通过标定摄像头测量物体大小_解决方案 | 如何用普通手机准确测量物体体积?...
  9. 什么是DNS,DNS的作用是什么?
  10. 一位励志的盲人程序员加我微信,求助找工作