自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 [项目]http+json

目录开源库使用():1.httplib https://github.com/yhirose/cpp-httplib2.rapidjson https://github.com/Tencent/rapidjson

2021-06-24 16:35:18 606

转载 ffmpeg学习笔记(五)

一、FFmpeg 播放视频的基本流程整理播放流程: video.avi(Container) -> 打开得到 Video_Stream -> 读取Packet -> 解析到 Frame -> 显示Frame。Container:在音视频中的容器,一般指的是一种特定的文件格式(如 AVI/QT ),里面指明了所包含的音视频,字幕等相关信息。Stream:媒体流,指时间轴上的一段连续数据,如一段声音、视频或字幕数据。Packet:Stream中的Raw数据,包含了可以被解码成方便

2020-09-18 09:10:47 407

转载 ffmpeg学习笔记(四)

一、libavformat介绍libavformat的主要组成与层次调用关系如下图:AVFromatContext是API层直接接触到的结构体,它会进行格式的封装和解封装,它的数据部分由底层提供,底层使用了AVIOContext,这个AVIOContext实际上就是为普通的I/O增加了一层Buffer缓冲区,再往底层就是URLContext,也就是达到了协议层,协议层的实现由很多,如rtmp、http、hls、file等,这个就是libavformat的内部封装结构了。二、libavcodec介绍

2020-09-18 09:09:01 138

转载 ffmpeg学习笔记(三)

一、FFmpeg 解码 API 分析avformat_open_input 分析函数 avformat_open_input 会根据所提供的文件路径判断文件的格式,其实就是通过这一步来决定到底是使用哪个Demuxer。举个例子:如果是flv,那么Demuxer就会使用对应的ff_flv_demuxer,所以对应的关键生命周期的方法read_header、read_packet、read_seek、read_close都会使用该flv的Demuxer中函数指针指定的函数。read_header会将A

2020-09-18 09:06:21 275

转载 ffmpeg学习笔记(二)

一、FFmpeg 相关术语容器/文件(Container/File):即特定格式的多媒体文件,比如MP4,flv,mov等。媒体流(Stream):表示在时间轴上的一段连续的数据,比如一段声音数据、一段视频数据或者一段字母数据,可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器。数据帧/数据包(Frame/Packet):通常一个媒体流是由大量的数据帧组成的,对于压缩数据,帧对应着编解码器的最小处理单元,分属于不同媒体流的数据帧交错存储与容器之中。编解码器:编解码器是以

2020-09-18 09:00:48 101

转载 ffmpeg学习笔记(一)

一、FFmpeg 介绍FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库。二、FFmpeg 组成libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;libavcodec:用于各种类型声音/图像编解码;libavutil:包含一些公共的工具函数;libswscale:用于视频场景比例

2020-09-17 18:18:36 155

转载 HTTP协议

一、概念特性HTTP协议用于客户端和服务端之间的通信通过请求和响应的交互达成通信 : HTTP协议规定,请求从客户端发出,最后服务器端响应请求并返回,也就是说,肯定是从客户端开始建立通信的,服务器端在没有接受到请求之前不会发送响应。HTTP 是不保存状态的协议 : HTTP协议不对请求和响应之间的通信状态进行保存,也就是说该协议对发送过的请求和响应都不做持久化处理。但是在一些购物类网站(或者其他类型网站)需要保存一些登录状态或者其他状态信息。为了实现期望的保持状态的功能,引入了Cooki

2020-09-17 18:12:53 111

原创 LIve555笔记说明

Live555系列笔记均转载自https://blog.csdn.net/zhouxinfeng/category_7173604.html

2020-09-17 11:25:54 104

转载 Live555学习之(七)---------- Live555实现h264视频的点播

上一篇介绍了Live555如何实现录像功能,我录的是H264编码的视频文件。在《Live555的基本介绍》这一篇中,我介绍说把mp3文件放到live/mediaServer目录下,然后使用Live555流化,就可以通过vlc去点播该文件。那么我们录好的h264文件能否被Live555流化然后使用VLC点播呢?经试验,发现是不行的。然后我就对比VLC去请求Live555流化mp3文件和h264文件的过程,发现了原因:在请求h264文件时返回的SDP信息中,总出现"a=range:npt=0-",而请求mp3

2020-09-17 11:13:51 456

转载 Live555学习之(六)---------- 在Live555中实现录像

Live555还提供了录像的示例程序,在testProgs目录下的playCommon.cpp中,Live555录像的基本原理就是创建一个RTSPClient去请求指定rtsp地址的视频,然后保存到文件里。playCommon.cpp打开一看就发现首先是各种全局函数的声明,然后是各种全局变量的声明,然后是main函数和各个函数的实现。main函数中首先还是创建TaskScheduler对象和UsageEnvironment对象,然后根据各种输入参数设置各种全局变量,最后就是创建一个RTSPClient对象

2020-09-17 11:12:41 589

转载 Live555学习之(五)------live555ProxyServer.cpp的学习

ive555ProxyServer.cpp在live/proxyServer目录下,这个程序展示了如何利用live555来做一个代理服务器转发rtsp视频(例如,IPCamera的视频)。首先来看一下main函数复制代码1 int main(int argc, char** argv)2 {3 // Increase the maximum size of video frames that we can ‘proxy’ without truncation.4 // (Such fra

2020-09-17 11:11:05 430

转载 Live555学习之(四)------建立RTSP连接的过程(RTSP客户端)

Live555不仅实现了RTSP服务器端,还实现了RTSP客户端,我们通过testRTSPClient.cpp这个程序来看一下,Live555的RTSP客户端与服务器端建立RTSP连接的过程。首先来看一下main函数:复制代码1 char eventLoopWatchVariable = 0;23 int main(int argc, char** argv) {4 // Begin by setting up our usage environment:5 TaskScheduler

2020-09-17 11:09:15 593

转载 Live555学习之(三)------建立RTSP连接的过程(RTSP服务器端)

上一篇我们简单分析了testOnDemandRTSPServer.cpp的main函数,主要步骤是创建RTSPServer,创建ServerMediaSession对象,然后等待RTSP客户端的连接。接下来我们分析一下Live555中建立RTSP连接的详细过程,首先我们需要简单了解一下RTSP协议建立连接的过程:1.(可选) RTSP客户端 —> RTSP服务器端 OPTIONS命令 询问服务器端有哪些方法可使用 RTSP服务器端 —> R

2020-09-17 11:07:36 589

转载 Live555学习之(二)------- testOnDemandRTSPServer

首先,看看这个程序的说明:// A test program that demonstrates how to stream - via unicast RTP// - various kinds of file on demand, using a built-in RTSP server. 就是说这个程序演示了如何利用RTSPServer这个类来对媒体文件进行单播,OnDemand的意思是收到RTSP客户端请求时才进行流化和单播。下面,首先看main函数,很简单,主要包含以下几个步骤:复制

2020-09-17 11:00:51 361

转载 Live555学习笔记

前一阵子,因为项目需要,研究了一下Live555开源框架,研究的不是很深入,基本上把Live555当做API用了一下,但是毕竟也是本人看的第一个开源框架,在此记录总结一下。Live555是一个实现了RTSP协议的开源流媒体框架,Live555包含RTSP服务器端的实现以及RTSP客户端的实现。Live555可以将若干种格式的视频文件或者音频文件转换成视频流或者音频流在网络中通过RTSP协议分发传播,这便是流媒体服务器最核心的功能。Live555支持以下几种文件格式的流化:A MPEG Transport

2020-09-17 10:58:46 139

原创 C++笔试题

1.new 、 delete、 malloc、 free 关系delete 会调用对象的析构函数 ,和 new 对应 free 只会释放内存, new 调用构造函数。 malloc 与 free 是 C++/C 语言的标准库函数, new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用 maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。 由于 malloc/free 是库函数而

2020-06-14 08:44:06 1757

原创 C语言内存四区、数据类型与变量

C语言内存四区、数据类型与变量1.内存四区:流程说明1、操作系统把物理硬盘代码load到内存2、操作系统把c代码分成四个区3、操作系统找到main函数入口执行经典例子:int a = 0; //全局初始化区char *p1; //全局未初始化区 int main(){ int b; ...

2020-05-04 16:50:11 170

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除