![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
视频传输
文章平均质量分 64
梦之风舞者
我就是我自己
展开
-
RTSP服务器开发二:关键帧提取技术
1. 前情提要在这篇文章中,我着重阐述了,如何使用GO语言,从零开发一个RTSP服务器。今天,我们继续对它进行改造。2. 关键帧通俗来讲,播放端在开始播放时,会持续不断接受到视频帧,但是只有关键帧到来时,它才会出画面,也就是说,关键帧什么时候到来,决定了什么时候出现画面。那么,既然RTSP服务器是我们手写的,能不能服务器提前缓存好最后一个关键帧,当播放端连接时,立马把缓存的最后一个关键帧发送给播放端。实测证明,这样做是可行的,点击播放按钮的下一刻,画面就出来了,完全不需要任何等待。3.原创 2021-04-03 13:33:48 · 1537 阅读 · 3 评论 -
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 · 6069 阅读 · 7 评论 -
EayDarwin的RTSP转发服务器地址
记录一下EayDarwin的RTSP转发服务器地址https://github.com/EasyDarwin/EasyDarwin/releases原创 2021-03-19 09:31:54 · 153 阅读 · 0 评论 -
FFmpeg:UDP外网传输花屏严重问题完美解决
1. 前言最近发现,UDP外网传输是,丢帧严重,我的环境是:视频流是济南移动,播放端是济南电信家庭宽带。由于视频流没有固定IP,所以我想了一个办法,让视频流网络穿透,直接点对点传输到我的播放端,但是发现我的播放端花屏严重。如下图2. 解决漫无目的的在网上搜索,在这篇文章的提醒下:https://blog.csdn.net/do_myself_best/article/details/80228279我测试了下,最终的到结论,应该是推流端视频包大小不一,发包频繁,最终导致在接收端MTU端,原创 2020-10-31 17:25:11 · 4102 阅读 · 6 评论 -
FFmpeg:SDL播放器(2)-多路视频播放器,支持调整窗口大小
1. 前言支持4路视频同时播放,支持调整窗口大小,支持中文标题。2. 效果3. 代码:github传送门:https://gitee.com/mdata_986/sdl-player/tree/master原创 2020-10-29 11:12:05 · 1280 阅读 · 2 评论 -
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 · 1581 阅读 · 1 评论 -
FFmpeg推送的流,播放端播放时花屏问题总结
1. 前言很多次遇到了这种问题,在这里做一下总结。2. 问题总结第一,是播放端读取缓冲区不够,有时候,高清码流,一帧就好几兆,所以缓冲区要足够长。对于基于FFmpeg的播放器,应该是下面的参数:av_dict_set(&this->opts, "buffer_size", "8192000", 0);第二,播放端要不间断读取帧,如果每读取一帧,间歇几毫秒,则有几率出现这种问题,因为在这间歇的几毫秒内,也许就是一个帧的尾包,该帧因为不完整,就会花屏,实测。...原创 2020-10-27 16:20:42 · 3304 阅读 · 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 · 501 阅读 · 0 评论 -
一个基于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 · 1079 阅读 · 1 评论 -
FFmpeg 拉流,视频源信号不稳定问题,解决思路
1. 前言在某些企业,由于视频网络不佳,导致FFmpeg在拉流的时候,总是中断,顺带者,推流端也总是中断。2. 解决思路2个线程,拉流一个独立的线程,推流一个独立的线程。两个线程之间,用vector<AVPacket*> Pkts做桥梁。当拉流线程获取一个新的帧后, 使用线程锁,锁定Pkts,然后向Pkts推入这个新的帧,然后解锁线程锁。推流端不断检测Pkts的长度是否大于0,当大于0的时候,将第一帧,推流。如果等于0,则一直推送最后一帧。3. 效果这样修改了之后,尽原创 2020-10-26 16:20:09 · 5466 阅读 · 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 · 2066 阅读 · 1 评论