音视频项目
天晨。
这个作者很懒,什么都没留下…
展开
-
3.6 视频服务器-服务器层实现
先顶层的,再具体功能的良好的封装可以提升开发效率(线程安全的队列、线程、线程池)服务器实现线程安全队列 template<class T>//T是我们直接决定class TianChenQueue{//线程安全的队列,(利用IOCP实现)public: enum { TCNone, TCPush, TCPop, TCSize, TCClear, }; typedef struct IocpParam { size_t nOperator;//操作原创 2022-03-24 13:11:51 · 154 阅读 · 0 评论 -
3.5 视频服务器-RTSP实现(框架搭建)
协议的实现一个基于TCP的RTSP服务器 加入协议处理一个基于UDP的RTP服务器 加入数据处理1 线程池使用线程池 去管理任务 和 Session2 封装socket使用共享指针管理3 PTSPServer实现接受信息解析字符回复信息0 OPTIONS 1 DESCRIBE 2 SETUP 3 PLAY 4 TEARDOWN 确定Session主程序 PTSPServer Init Invoke Stop类图:...原创 2022-02-28 12:21:07 · 4704 阅读 · 0 评论 -
3.4 RTP协议
文本 和 二进制 协议RTP协议二进制协议,最重要的就是内容成分组成(嵌套式)和位宽RTP包由一个头部和数据荷载/数据负载组成头部格式如下左边是高位,右边是低位V表示版本号,2个bitP表示填充位,1个bit。为0表示包尾部没有填充附加字节;为则表示有X表示扩展位,1个bit。为1表示包头后面还有一个扩展头部CC是CSRC个数,4bit。表示后面CSRC的个数0~15个M表示标记位,1个bit。给配置文档来用的PT表示荷载类型,7个bit。序列号(SN),16个bit时间戳,32原创 2022-02-22 13:25:48 · 1657 阅读 · 0 评论 -
3.3 sdp格式说明*
sdp格式说明Sdp由多行的key=value组成 一定”顺序”完整的sdp包括 会话元数据、网络描述,流描述、加密描述、Qos和分组描述但是一般会话描述、网络描述和流描述(也叫媒体描述)是必须的,其他的可选v=开始都是会话描述m=开始都是媒体描述 (网络描述 和 流描述)t=开始时时间描述 (网络描述)会话描述:v表示版本o表示用户、会话id(session)、会话版本、网络类型(inet)、地址类型、地址一个典型的例子是o=name 12345678901 1 IN IP4原创 2022-02-22 09:38:34 · 505 阅读 · 0 评论 -
3.2 RTSP 协议详解
RTSP协议详解一般是服务器是被动 在一些游戏服务器是主动RTSP协议是基于RTP(数据包)和RTCP(控制命令 UDP)之上的RTSP使用RTP传输媒体数据,使用RTCP来交互控制命令整个协议是先用RTSP进行信息交互RTSP的控制命令交然后再使用RTP/RTCP进行媒体数据传输互格式客户端的请求格式:Method url version\r\nCSeq: x\r\nxxx\r\n...\r\nmethod表示方法,具体见后面详细内容Url就是请求地址,一般为rtsp://i原创 2022-02-21 20:47:03 · 1683 阅读 · 0 评论 -
3.1 视频服务器介绍
服务器视频服务器介绍视频服务器的分类有很多种,比如按照架构,按照使用的技术,按照功能,以及按照角色等等视频点播服务器:用于提供视频的点播服务。一些视频网站多是这种模式。视频可以是长视频,比如电影;也可以是短视频。用户请求对应的源,就会给用户播放内容。视频直播服务器:用于实时直播一些视频内容。部分的新闻视频、综艺视频、人物访谈等等会采用这种形式。直播内容和点播不同,不会给用户看前面的内容,无法快进,也无法修改播放速率。视频转播服务器:用于传递其他视频源的内容。转播的视频源可能是其他网络的、设备的或者原创 2022-02-20 23:50:55 · 1362 阅读 · 0 评论 -
2.5 客户端开发-测试设计
测试设计开发测试(白盒测试,代码开放,开发人员自己做的)1.单元测试2.模块测试3.整体(集成)测试4.控件外观测试功能测试(灰盒测试,部分代码开放,开发人员配合测试人员)1.流程测试子流程测试、整体流程测试、组合流程测试、代码覆盖测试、功能覆盖测试、逻辑覆盖测试2.功能点测试控件测试、功能测试鲁棒性测试1.不同资源测试本地资源、网络资源、音频、文本、可执行文件2.容错性测试地址错误、缺失、不完整、指向内容不正确3.意外的流程错乱的流程、缺失的流程、错误的流程4.输入操作原创 2022-02-19 22:33:00 · 131 阅读 · 0 评论 -
2.4 客户端开发-整体开发完成
整体开发总结1 先设计,后开发(可以显著提升代码质量,可以显著提升开发效率)2 控制层(中间层)设计的时候,需要对接口留一定的可扩展余地3 从UI入手进行设计其他问题1 增加了拖动和打开 文件2 修复了定时器bug3 修复指定窗口播放4 优化了拖动效果5 修复了切换视频问题...原创 2022-02-19 15:50:47 · 114 阅读 · 0 评论 -
2.3 客户端开发-控制层开发
控制层开发总结1 细节需要不断的完善,追加一些命令和方法,调整接口参数2 尽可能改功能模块,而非控制模块的接口和架构3 设计接口的,要考虑可扩展性#pragma once#include "VLCTOOL.h"#include "VideoClinetDlg.h"enum VLCCommand{ VLCTOOL_PLAY, VLCTOOL_PAUSE, VLCTOOL_STOP, VLCTOOL_GET_VOLUME, VLCTOOL_GET_POSTION,};class V原创 2022-02-19 00:06:53 · 362 阅读 · 0 评论 -
2.2 客户端开发-VLCTOOL开发
代码的开发VLCTOOL开发总结在有详细设计的情况下,开发难度会下降很多有设计的情况下,编译上也会减少错误必要的时候,可以细微的调整设计include <string>#include <vlc.h>class VlcSize{public: int nWidth; int nHeight; VlcSize(int width = 0,int height = 0) { nWidth = width; nHeight = height; }原创 2022-02-18 22:48:48 · 114 阅读 · 0 评论 -
2.1 客户端开发-UI开发
对话1 MFC的默认的事件添加,不一定是有效的,滑动条的处理就是一个例子2 尽量遵循设计,但是一些细节是可以审时度势,进行微调 如:Slider控件本身并没有响应滑动的消息函数,但可以通过主窗体的OnHScroll()响应。在类向导中为对话框添加WM_HSCROLL消息,在响应函数中添加:...原创 2022-02-18 21:17:49 · 100 阅读 · 0 评论 -
1.6 客户端设计-类图
类图的绘制 libvlc封装类 控制类 时序处理1 设计修改比代码修改要容易2 设计图比较直观3 为了大规模的软件开发准备的原创 2022-02-18 17:52:36 · 320 阅读 · 0 评论 -
1.5 客户端设计-详细设计
详细设计 libvlc的封装层是我们比较好确定的(易用性) 因为这块是对库的封装,其他部分的流程对其影响不大,主要是为其提供参数 所以这块我们可以单独设计 而界面层的设计要相对繁琐一些,因为依赖于各个控件和其交互事件的处理 控制层也相对容易,处理好与模型层的接口,剩下的就是响应用户交互信息即可 时序图的绘制: ...原创 2022-02-18 15:42:51 · 409 阅读 · 0 评论 -
1.4 客户端设计-模块设计
模块设计 按照MVC架构,V层比较好确定,就是UI控件 此外libvlc我们需要单独封装起来,作为模型层的一部分来看增加可移植性 然后是控制层来统领全局,将UI上的交互同步到模型层 同时控制层掌控整个程序的流程APP模块 VideoClientApp模块 InitInstanceUI模块 VideoClinetDlg 接口 : Play Pause Stop响应 定时器:::OnTimer 来刷新进度条 滑动条拖动响应接口 地址输入原创 2022-02-18 13:38:47 · 234 阅读 · 0 评论 -
1.3 客户端-设计思路
1需求 1 需求(视频播放器) ->功能 2 核心功能(libvlc)<<.团队情况.未来发展,功能的完备性>> ->设计2设计 首先从架构的角度去思考一个客户端应该选用什么架构 MVC: model(模型层 数据) View (视图 UI) Control(中间层 业务) .COM/.NET: 软件即服务 MVC 架构 播放器需要有播放、暂停/继续、停止、进度显示、跳转位置、地址输入等基本功能 整个应该使用MFC的视窗模式UI呈原创 2022-02-17 22:27:04 · 273 阅读 · 0 评论 -
1.2 vlc库命令行的基本使用 一个demo
VLC库的基本使用关键的库函数:创建实例libvlc_new()加载媒体libvlc_media_new_path()/libvlc_media_new_location()(file:///、http://、rtsp://、screen://)创建播放器libvlc_media_player_new_from_media()设置播放窗口libvlc_media_player_set_hwnd()开始播放 下面函数要等到这个执行才可以执行libvlc_media_player_play原创 2022-02-17 20:36:04 · 553 阅读 · 0 评论 -
1.1 vlc的集成
VLC库的集成VLC库的集成稍微有一些注意事项首先需要在VLC的github官网获取源码VLC的下载地址:https://github.com/videolan/vlc使用git或者下载代码压缩包之后,可以得到其源码这个默认是在Linux下编译的可以在Ubuntu下进行编译然后添加到环境变量VLC在进行引用 其他语言可能需要在附加包含目录中加入...原创 2022-02-17 17:54:35 · 441 阅读 · 0 评论 -
1.0 音视频项目介绍和vlc介绍
概述VLC是Video Lan Client的缩写,原先是几个法国的大学生做的项目,后来他们把VLC作为了一个开源的项目,吸引了来自世界各国的很多优秀程序员来共同编写和维护VLC,才逐渐变成了现在这个样子。(ffmpeg)它的支持情况操作系统:Windows、WinCE、Linux、MacOSX、BEOS、BSD、Android访问形式:文件、DVD/VCD/CD、http、ftp、mms、TCP、UDP、RTP、IP组播、IPv6、rtsp编码格式:MPEG*、DIVX、WMV、MOV、3GP、FLV原创 2022-02-17 17:14:58 · 1974 阅读 · 0 评论