自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

梦之风舞者

奔跑的蜗牛

  • 博客(26)
  • 资源 (10)
  • 收藏
  • 关注

原创 600行代码开发一个史上最简单的RTSP服务器(GO语言纯原生语法)

1. 前言市面上的开源RTSP服务器太过于复杂,我们今天使用GO语言,开发一款史上最简单的RTSP直播服务器,不依赖任何第三方GO语言框架,使用原生GO语言撸。说起视频直播协议,最开始,笔者使用的是ffmpeg + nginx(RTMP)方案,但是nginx的RTMP模块有个问题,至少要六七秒才能够出画面,不知道是RTMP协议问题还是nginx的rtmp模块问题。过一段时间,我再用go语言撸一个RTMP服务器。由于ffmpeg + nginx的上述缺点,所以我又转向了EasyDarwin的RTS

2021-03-31 09:38:01 5637 7

原创 Python开发OPC DA客户端异步读取局域网计算机的数据完整代码

这篇文章的https://blog.csdn.net/liwen9016/article/details/89640491描述了OPC如何开发OPC DA客户端,并使用异步的方式读取数据,但是这篇文章的代码不完整。经过我的自己思考,将它补充完整。愣着干嘛,赶紧点赞先上成功的截图:完整代码如下:import time, Commonfrom typing import Listimport win32timezone, datetimeimport win32com.clien

2021-03-25 11:29:40 2502 13

原创 JavaScript关于pako.js压缩中文字符串

JS使用pako.js对中文字符串进行zip压缩

2022-04-06 16:05:56 1878

原创 RTSP服务器开发二:关键帧提取技术

1. 前情提要在这篇文章中,我着重阐述了,如何使用GO语言,从零开发一个RTSP服务器。今天,我们继续对它进行改造。2. 关键帧通俗来讲,播放端在开始播放时,会持续不断接受到视频帧,但是只有关键帧到来时,它才会出画面,也就是说,关键帧什么时候到来,决定了什么时候出现画面。那么,既然RTSP服务器是我们手写的,能不能服务器提前缓存好最后一个关键帧,当播放端连接时,立马把缓存的最后一个关键帧发送给播放端。实测证明,这样做是可行的,点击播放按钮的下一刻,画面就出来了,完全不需要任何等待。3.

2021-04-03 13:33:48 1440 3

原创 EayDarwin的RTSP转发服务器地址

记录一下EayDarwin的RTSP转发服务器地址https://github.com/EasyDarwin/EasyDarwin/releases

2021-03-19 09:31:54 142

原创 FFmpeg:UDP外网传输花屏严重问题完美解决

1. 前言最近发现,UDP外网传输是,丢帧严重,我的环境是:视频流是济南移动,播放端是济南电信家庭宽带。由于视频流没有固定IP,所以我想了一个办法,让视频流网络穿透,直接点对点传输到我的播放端,但是发现我的播放端花屏严重。如下图2. 解决漫无目的的在网上搜索,在这篇文章的提醒下:https://blog.csdn.net/do_myself_best/article/details/80228279我测试了下,最终的到结论,应该是推流端视频包大小不一,发包频繁,最终导致在接收端MTU端,

2020-10-31 17:25:11 3837 6

原创 FFmpeg:SDL播放器(2)-多路视频播放器,支持调整窗口大小

1. 前言支持4路视频同时播放,支持调整窗口大小,支持中文标题。2. 效果3. 代码:github传送门:https://gitee.com/mdata_986/sdl-player/tree/master

2020-10-29 11:12:05 1186 2

原创 GO: 整数时间转字符串时间

func Inttime2Str(timestamp int64)(string){ //日期转化为时间戳 timeLayout := "2006-01-02 15:04:05" //转化所需模板 datetime := time.Unix(timestamp, 0).Format(timeLayout) return datetime}

2020-10-28 09:32:38 519

原创 GO:字符串日期转整数时间戳

func Strtime2Int(datetime string)(int64){ //日期转化为时间戳 timeLayout := "2006-01-02 15:04:05" //转化所需模板 loc, _ := time.LoadLocation("Local") //获取时区 tmp, _ := time.ParseInLocation(timeLayout, datetime, loc) timestamp := tmp.Unix() //转化为时间戳 类型是int64 .

2020-10-28 09:31:50 765

原创 C++多线程数据共享问题总结

1. 前言写了这么多年的C++代码,在这里总结一下C++多线程数据共享问题。2. 多线程不安全其实C++没有线程安全的用于线程间共享的方式,在不使用互斥锁等情况下,都是线程不安全的。因为C++太相信程序员了,他以为我们会很好的处理好线程间通信的问题。。。3. vector在线程通讯中,我偏爱vector,当然vector是线程不安全的,因此每次操作vector我都会先死循环不断尝试锁定互斥锁,然后操作vector,最后释放互斥锁。vector可以用来传递任何数据,无论是char*,还

2020-10-28 09:26:28 856

原创 FFmpeg拉流推流时,各结构体创建、释放方式

1. 前言在这里记录下FFmpeg各主要结构体创建、释放的方式2. 取流参数AVDictionary创建:AVDictionary* opts = NULL;配置:(官方参数列表)av_dict_set(&opts, "rtsp_transport", "tcp", 0);释放:av_dict_free(&opts);3. 媒体流AVFormatContext创建:AVFormatContext* ictx = NULL;释放:.

2020-10-28 09:15:29 1396 1

原创 FFmpeg 推流拉流推流分离,造成内存泄漏的bug记录

1. 前言对于一个追求稳定的系统来说,驱动端使用FFmpeg拉流、推流。播放端使用RTMP流播放,但实际情况要求RTMP流具备7*24小时不间断播放的能力,就实际情况来说,硬盘录像机或摄像头,在取它们的流的时候,经常会遇到一种情况,就是取流总是中断,取流一旦中断,会造成推流端故障,进而播放不出来流。所以我在之前,进行了读写分离的操作,拉流和推流是两个线程运行,拉流取出帧,然后放入vector中,推流线程从vector中不断取出第一帧,然后推送。2.问题出现在某些情况下,拉流线程运行的居然比推流线

2020-10-28 09:00:02 1309

原创 FFmpeg推送的流,播放端播放时花屏问题总结

1. 前言很多次遇到了这种问题,在这里做一下总结。2. 问题总结第一,是播放端读取缓冲区不够,有时候,高清码流,一帧就好几兆,所以缓冲区要足够长。对于基于FFmpeg的播放器,应该是下面的参数:av_dict_set(&this->opts, "buffer_size", "8192000", 0);第二,播放端要不间断读取帧,如果每读取一帧,间歇几毫秒,则有几率出现这种问题,因为在这间歇的几毫秒内,也许就是一个帧的尾包,该帧因为不完整,就会花屏,实测。...

2020-10-27 16:20:42 3066 1

原创 FFmpeg:SDL播放器(1)

1. 前言在研究一个基于FFmpeg + UDP的流媒体服务器期间,偶然发现对于UDP高清流,有些播放器很容易花屏,于是我使用SDL播放器,做了一个简易的FFmpeg+SDL播放器。感谢雷神,看他的博客提供的思路。雷神走好!!!!!2. 播放器首先,定义一个FFmpegVideo类,用来打开udp流,读取帧数据,然后刷新SDL。#pragma once#ifndef FFmpegVideo_H#define FFmpegVideo_H#pragma warning(di.

2020-10-27 16:01:27 453

原创 Python:从入门到放弃

1. 前言使用Python大概有两年多了,数据抓取、人工智能、小工具、大型服务器等等各种程序都写过。越来越不喜欢Python,将我遇到的一些坑记录下来。2. 千万不要用它做服务器Python只能用来写单个py文件就行实现的小功能,任何需要多线程协作的项目,都不要用它,线程是Python永远的痛点,不要触碰。3. 部署难题如果是公司内部的系统,可以直接部署py文件,如果是给外部写的工具,就麻烦了,首先,如果是py文件部署的话,需要python环境,和一大堆依赖类库,这种方式肯定不行。再..

2020-10-26 16:51:34 938

原创 一个基于FFmpeg + UDP的流媒体服务器

1. 前言用了一年多的nginx 做流媒体服务器,最近研究网络穿透,发现rtmp协议,经过网络穿透之后,无法播放,于是思索了一下,想出了一个基于UDP组播+网络穿透实现的UDP流媒体服务器。2.RTSP转UDP首先使用UDP,将rtsp流转为本地局域网的组播UDP流。这样,本地局域网用户,都可以访问这个UDP流了,不再受海康威视5个人的限制了。3. UDP网络穿透实现UDP远程传输对于外网用户,使用我之前的网络穿透方案,将局域网的UDP数据,通过网络穿透,传输到访问者的计算机上,然后在.

2020-10-26 16:30:10 1003 1

原创 FFmpeg 拉流,视频源信号不稳定问题,解决思路

1. 前言在某些企业,由于视频网络不佳,导致FFmpeg在拉流的时候,总是中断,顺带者,推流端也总是中断。2. 解决思路2个线程,拉流一个独立的线程,推流一个独立的线程。两个线程之间,用vector<AVPacket*> Pkts做桥梁。当拉流线程获取一个新的帧后, 使用线程锁,锁定Pkts,然后向Pkts推入这个新的帧,然后解锁线程锁。推流端不断检测Pkts的长度是否大于0,当大于0的时候,将第一帧,推流。如果等于0,则一直推送最后一帧。3. 效果这样修改了之后,尽

2020-10-26 16:20:09 5091 1

原创 FFmpeg推送UDP裸流,播放端花屏问题

1. 前言最近在调试流媒体服务器的bug,准备尝试一些新的方法,测试用FFmpeg将rtsp流转为UDP裸流的时候,发现当rtsp流是主码流,也就是1280*720时,播放端容易花屏,当我将rtsp流切换为子码流是,应该是704*576,然后播放端再也没有出现过问题。2. 问题总结应该是播放端UDP缓冲区默认值正好介于900KB(1280*720)和396KB(804*576)之间,造成一部分数据丢失,所以播放端下方花屏越来越严重。因为这一区域的数据不断丢失。3. 解决思路播放端,应该.

2020-10-26 15:55:16 1906 1

原创 对JS和ES的一点看法

其实我学JS很久了,快十年了,大一的时候,就使用过DreamWeaver开发过网页,后来就专门学了JS。我学JS,其实一直学的是原生JS,从没学过JQ、vue等等框架。。。尽管最初很艰难,但是我坚持下来了。到现在,我可以不用任何JS框架,徒手根据实际项目,撸一个符合项目的JS框架,真不明白为什么那么多人对第三方框架趋之若鹜。。。原生的不香吗?????...

2020-10-24 15:39:39 317 2

原创 很久之前写的一个托盘管理程序

作为一个数年的C++开发者,当然,我要开发一个程序崩溃时自动拽起的程序。有时候,一个服务器上运行数十个程序,都在状态栏里放着,密密麻麻,恐惧症都出来了。有时候某个程序忘记启动,或者突然崩溃,都无从查起,因此,去年开发了一个托盘管理程序,专门用来干这个事。先看效果:它的一条配置文件如下(可以配置很多条,就像上图一样):{"processName":"DTUServer_Air.exe","path":"C:/DTUServer_Air.exe","epath":"C:/","maxM

2020-10-24 15:33:01 164

原创 GO语言学习心得

最近一个月,迫于高并发压力,重新上手GO语言,还别说,GO语言确实写的很爽。1. 面向项目GO语言并不是一个研究院语言,它不是给一些学者、专家看的,也不是让你深究它为什么没有泛型,为什么没有类,为什么重载、继承不好用。它就是让你为了解决一个项目问题而产生的语言,比如,我们觉得,一个好的项目源代码应该是有底层实现类、中间接口类、上层类等等,金字塔结构。但是很抱歉,GO是平面化语言,最多二层架构,不会让你继承一大堆类,而是让你用一个文件夹,将该功能所用的所有接口放在里面,然后直接使用。2..

2020-10-24 11:58:13 927

原创 C++ 使用海康威视SDK将视频推流到rtmp服务器

研究FFmpeg有两三年了,一直没写过这方面的文章,今天记一下。由于工作关系,需要将化工企业内部的视频发布到一个部署在公网的视频服务器,然后由相关人员浏览。由于是化工企业,企业严禁外部的机器直接访问视频网络,最多提供一个跳板机。因此,两年多前,针对这种情况,基于FFmpeg研发了一个推流系统。随着接入视频数量的增加,发现不能单纯的使用RTSP协议获取硬盘录像机视频数据了,海康威视的硬盘录像机,最多允许5个用户同时访问,如果使用RTSP的话,每路RTSP都相当于一个访问用户,因此,需要使用海康卫视的S

2020-10-23 11:12:28 3810

原创 GO语言的websocket数据解析

最近在学GO语言,需要开发websocket服务器,不想用第三方的websocket服务器框架,准备使用原生TCP硬撸一个websocket服务器。websocket是基于tcp的协议,对tcp包进行了封装,因此,使用原生tcp服务器,是可以搞定websocket服务器的。websocket最关键的三个步骤:首次websocket握手、将tcp客户端发来的数据解析成websocket数据、将数据加密成webscoket数据发送给tcp客户端。websocket 握手:func (t.

2020-10-14 11:05:32 1258

原创 vector之我见

学习C++,vector是绕不过的,之所以用vector,根本原因,在于我自己搞不定“如何创建一个动态数组”这个常见的问题,于是我只好引入了vector,不好我觉得还是有必要探讨一下vector在内存管理方面的一些情况。问题1:vector的push_back添加数据,究竟是内存拷贝还是指针指向?先思考,如果是内存拷贝的话,那么对于程序员来说,是绝对安全的,比如我申请了一个内存,这个内

2017-01-03 12:59:32 322

原创 DOM创建表格

近日,在研究DOM创建表格,但是发现有个东西在IE下始终运行不了,细细思量,原来是这个原因window.onload=function(){ var table=document.createElement("table"); table.width=500; table.border=1; table.createCaption().innerHTML="人员表"; var t

2015-08-09 10:47:33 332

原创 Javascript检测浏览器useAgent

在javascript中,经常需要对浏览器进行检测,本文列举了检测浏览器的方法

2015-08-02 13:40:42 544

256*256高清PNG图标417个

因为写网页有时候需要某些文件的图标,我特意搜集了400多个高清PNG图标,以便于使用,需要的话,自行下载

2020-05-21

python向钉钉群发送消息、接受消息

最近产品小姐姐说,要想钉钉群发送消息,接受消息,于是我研究了一番,总共俩文件,一个是python发消息,一个是python接受钉钉消息。

2020-05-21

文件上传断点续传协议

在编程时,由于需要上传大文件,于是我自己研发了一套断点续传协议,并在实际项目中得到应用,效果良好。这个协议不但支持大文件上传,而且支持断点续传、多用户同时上传一个文件速度加倍、文件秒传等等,基本完全满足了我们自己的文件上传需求。这个协议包含后端和前端,可以根据协议自行修改为自己的语言

2020-05-21

vc++编译sqlite3加密教程

使用vs编译sqlite3加密版本,包含完整的编译教程和sqlite3源码,我自己就是用这个编译的,亲测可用

2020-05-21

OPC DCOM配置完整版

这是我综合多年OPC配置经验,自己整理的一份OPC配置文档,比网上很多文档都要完整,按照我的文档,没有配不通的DCOM

2020-05-21

IPV4地址大全(国内国外)(mysql存储文件)

IPV4地址大全,包含国内国外的IPV4地址,是我从我的mysql数据库导出的,可直接导入到mysql数据库中

2020-05-21

西门子短信模块TC35测试软件

用来测试西门子TC35短信模块的工具,符合标准TC35协议

2015-03-03

二级c语言上机题库

计算机二级c语言上机题库,南开100道,小贴士:考二级c语言的时候可以随身携带优盘,将此题库拷贝其中。

2011-10-19

关于p2p网络技术的一些浅见

关于p2p网络技术的一些内容,供大家分享,很实用的

2010-12-13

空空如也

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

TA关注的人

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