
流媒体
文章平均质量分 74
twoconk
一个IT草民
展开
-
视频转码服务架构说明书
需求说明视频转码服务,具备将高码率的视频转换为低码率的视频,和对不同编码格式的视频进行转换能力的后台服务;规格定义性能指标: 吞吐量和性能指标 4核 8G 1000M网卡 GeForce GT 1030 以上显卡 CPU 到 80% 网络占用率 到 70% 100路 720P 高...原创 2020-03-25 15:27:04 · 1500 阅读 · 0 评论 -
FFmpeg和x264的windows版本编译安装记录
网上有各种版本的介绍,建议优先参考ffmpeg官网的说明,因为更新时间关系,可能细节有差异,但差异不大:https://trac.ffmpeg.org/wiki/CompilationGuide/MSVC1. 下载和安装YASM这一步好像已经不必要,最新版的代码中已经使用nasm来代替yasm。YASM下载地址:http://yasm.tortall.net/Download.h...原创 2020-03-23 17:45:53 · 919 阅读 · 0 评论 -
《Linux高性能服务器编程》读书笔记:linux服务器程序规范
服务器程序规范,需要强化和遵守的,作者给列了4条规范:1、Linux服务器程序一般以后台进程形式运行,也就是以daemon守护进程的方式,守护进程的父进程通常是init进程(PID进程为1),作者在7.6小结 服务程序后台化给出了一个程序的清单,还是很有参考意义的。后台进程形式运行,也就是通过fork一个子进程,结束父进程的方式运行,这样避免很多前台启动,随着操作终端界面的关闭而结束服务器程序的...原创 2020-03-06 16:42:47 · 274 阅读 · 0 评论 -
GB33154-2017规范讨论之公共安全视频监控联网信息安全技术要求
原创 2018-12-17 20:54:44 · 1465 阅读 · 0 评论 -
WebRTC库在Android端后台运行时内存和功耗高的问题修改
1、在房间数超过10个后,so底层库在创建socket时报文件句柄太多导致tombstone的问题怀疑是libjingle的so被加载多次,导致占用内存过大引起,解决方法:修改PeerconnectionClient中的PeerconnectionFactory对象factory为单实例对象,多个房间共享一个factory,经过验证,可以创建20多个房间都不在产生这个现象。2、后台运行时,...原创 2018-12-21 14:27:43 · 1838 阅读 · 0 评论 -
使用Janus作为对讲服务器的后台框架和业务流程
对讲后台业务架构图如下图: 图1、对讲后台业务架构图 通过NGINX负载Janus http服务器的API接口,通过该API接口可以获取可用Janus服务器的IP和端口;客户端拿到可用对讲服务器的IP和端口后,通过WebSocket连接到该服务器,并保持长连接,客户端进入会议室时,则复用这条长连接;如果进入其他会议室,则需要重新获取可用的Janus服务器IP和端口,并重复上述过...原创 2018-11-21 09:44:48 · 3991 阅读 · 1 评论 -
Freeswitch和东方网力平台的GB28181国标上下级对接
一、Freeswitch作为国标下级1、主要工作:注册到上级平台、心跳上报GB28181终端设备目录上报(查询上报和主动上报)东方网力平台调取终端实时视频(一对一)东方网力平台调取终端实时视频(一对多)东方网力平台调取某个终端回传的历史视频2、大致实现:在/usr/local/freeswitch/conf/sip_profiles/external配置外部网关,网...原创 2018-09-05 10:26:02 · 4238 阅读 · 3 评论 -
修改Janus,支持datachannel通过rtp通道传输
Janus的datachannel支持的协议主要是:“DTLS/SCTP”、"UDP/DTLS/SCTP",而RTP通道使用的是"UDP/TLS/RTP/SAVPF",修改的思路包括SDP返回的修改,RTP数据包中提取datachannel包对应SSRC的包。1、给janus_ice_stream结构体添加data的ssrc字段和初始化: guint32 data_ssrc_pee...原创 2018-09-04 21:22:12 · 2981 阅读 · 3 评论 -
基于Janus房间服务器的POC对讲实现
一、理解Janus插件janus_videoroom的包转发实现该插件模式具备SFU的包转发能力,每一个进入房间的与会者,可以通过Publish发布自己的音视频,也可以通过Subscribe订阅其他人的音视频,转发能力由libnice库提供二、理解POC对讲半双工模式下的包转发实现POC,是PTT Over Cell 的简写,PTT是按下讲话的意思,要么说,要么听别人说,不会出现同时讲话&...原创 2018-08-20 16:25:14 · 2165 阅读 · 3 评论 -
实时监控视频转码处理
实时监控视频的码率通常在5M以上,如果做比方手机端的实时预览查看,对带宽是很大的考验,所以很有必要先做降分辨率,然后降码率的处理。所有的处理在后台服务器进行,大致的业务流程如下:海康监控摄像头输出的分辨率是:2560*1440 ,ffmpeg提供的方法能很好的完成这个流程,其实网上有很多例子,但都不全,去看ffmpeg源码提供的例子来实现是很好的办法,比方ffmpeg-4.1的例子代码在\...原创 2019-04-08 19:27:26 · 3099 阅读 · 0 评论 -
监控摄像头的拉流转发实现
这两天一直在调试Darwin的拉流转发功能,也就是使用Darwin服务器拉取另一个RTSP服务器的视频流(比方监控摄像头)的实时视频,然后通过Darwin服务器提供的rtsp地址进行转发播放,这个简称为拉流转发服务,基本功已经正常完成(网上有一个QTSSOnDemandRelayModule的思路可以参考:DarwinServer);现在包括海康摄像头提供的萤石云服务,其实是将这种拉流转发服务直接...原创 2019-04-18 16:50:17 · 6943 阅读 · 0 评论 -
给srs长时间推流内存增长异常问题处理
使用librtmp库将拉取监控的rtsp流推送给srs服务器,发现一个异常,在长时间大概1个月后发现系统内存被srs吃满,也不知道是什么原因产生的这个现象,并且通过top去查看srs的内存在持续增长,通过ffmpeg推流没有这个现象,感觉还是librtmp使用的问题,暂时也没有很好的思路分析;通过查看srs的git库,发现srs提供了一个srs-librtmp的源码库,能完成推送h264裸流的...原创 2019-05-24 15:54:29 · 2007 阅读 · 1 评论 -
级联媒体转发服务器的方式部署,构建复杂网络环境下的媒体转发网络
媒体服务器就是转发UDP数据的RTP服务器,它的作用就相当于网络中路由器和交换机。我们把媒体服务器设计成一个模拟IP协议的应用服务器,构建复杂网络环境下的稳定的媒体转发网络。关于多个房间服务器,多个RTPProxy媒体转发服务器的部署方式:关于一个房间服务器,多个媒体转发服务器的部署方式:...原创 2019-06-06 17:13:52 · 1081 阅读 · 0 评论 -
RTPProxy代码结构说明
RTPProxy是纯C语言开发,使用面向对象的思路实现的对stream、session等的抽象,另外对象的构造、析构和引用计数机制都有实现,和doubango中对象的实现思路类似,每个对象一个c文件,提供类似rtpp_server_ctor和rtpp_server_dtor的构造和析构方法,然后提供一个结构体的实例化对象,结构体对象中第一个对象是该对象的公共接口方法指针,类似如下代码:stati...原创 2019-06-03 17:27:49 · 2650 阅读 · 0 评论 -
AnyRTC 的播放器类图
不得不说AnyRTC的代码架构上很好的做到了协议无关,解决了采集、编码,传输;收包、解码,显示的跨平台方案;今天尝试着做了一个RtspPull,结合live555的代码,很快就实现了一个rtsp的播放器功能;后续尝试着做一个RtspPush,实现rtsp的推流能力;...原创 2019-07-23 11:37:18 · 467 阅读 · 3 评论 -
实现rtsp直播推流和拉流双向通话功能
推流端 服务器 观看端PUSH CLIENT -> DARWIN <-- PULL CLIENT15000(推流端的收发包rtp端口)5001 ...原创 2019-08-22 15:45:35 · 9065 阅读 · 0 评论 -
webrtc中使用的QOS相关的标准协议
rtx :https://tools.ietf.org/html/rfc4588red:https://tools.ietf.org/html/rfc2198ulpfec:https://tools.ietf.org/html/rfc5109前一阵调测WebRTC的UlpFEC能力,发现一些问题,记录下来:问题1. 默认支持的音频codec type过多,出现主叫侧单方向音频类...原创 2019-09-23 11:00:38 · 400 阅读 · 0 评论 -
Janus客户端修改WebRTC源码支持会议室功能
Janus客户端使用最新版本的WebRTC的so,发现subscribe组时,不能看到火狐客户端推送的视频分析日志,原因是接收rtp包的receiver的sink中没有被注册任何接受者,所以解码后的数据帧没有被回调到应用层。 经过分析,刚开始以为是mid不一致所致,后来发现,是底层库对sendonly做了特殊处理:火狐的SDP:mid为video字符串a=group:BUN...原创 2018-07-31 20:51:34 · 1844 阅读 · 0 评论 -
licode 环境搭建
1、根据安装指南安装(参考:http://licode.readthedocs.io/en/master/from_source/ 即可),如果顺利的话,应该都能正常过去,有失败可能是网络问题,所以先得有个好的网络;2、运行basicExample,发现起来后看不到视频,主要是ice等服务器信息配置不对,修改licode根目录下的配置文件licode_config.js,主要修改其中的stun服务...原创 2018-05-08 14:56:36 · 4584 阅读 · 0 评论 -
Android手机H264软编码参数优化
做了一段时间的视频后,最先碰到的是花屏,解码端丢包的花屏,先是通过抓取编码后的BITMAP,发现解码出来就是花屏的,所以考虑优化编码来减少因为丢包产生的花屏;另外调整丢包策略规避解码花屏的问题。1、X264编码参数调整:H264 FF_PROFILE_H264_BASELINE、 FF_PROFILE_H264_MAIN两种编码差异,其中最明显的差异是profile_idc_baselin原创 2016-08-16 13:48:20 · 4945 阅读 · 2 评论 -
Darwin Streaming Server 支持UDP打洞
RTSP客户端点播Darwin 视频时,SDP协商后的客户端端口可能是在NAT后面,所以需要Darwin支持NAT打洞的功能,从Darwin的源码看,官方的源码是不支持这个能力的。通过抓取VLC客户端的包发现,VLC在播放RTSP流时,两次SETUP(音频流和视频分别协商端口)之后,会发送4个UDP打洞的包,但Darwin没有接收这些包,并且根据这些包来源的端口修改远端RTP和RTCP原创 2016-08-18 11:39:04 · 1182 阅读 · 6 评论 -
在Spydroid-ipcamera基础上做推流的实现之一
在github上搜索RTSP 和Android, 你一定能找到Spydroid-ipcamera的项目,他能在局域网内共享手机的Camera采集的视频画面,俗称将手机改造成网络摄像机。看过Spydroid-ipcamera的代码,你会发现手机原来充当了一个RTSP Server的角色,一旦有通过rtsp的点播请求过来,则开启手机摄像头,并把编码后的H264视频和AAC的音频数据发送到通原创 2016-08-12 15:47:09 · 6921 阅读 · 0 评论 -
ffplay.c数据结构分析
最近在做流媒体播放器的优化,参考了ffplay.c的代码,主要对存储和流程上做下解剖。数据存储15M的QUEUE#define MAX_QUEUE_SIZE (15 * 1024 * 1024)typedef struct MyAVPacketList { AVPacket pkt; struct MyAVPacketList *next原创 2016-08-02 11:20:29 · 971 阅读 · 0 评论 -
将AAC格式的RTP流存储为可以播放的m4a文件
搜索Mediacodec编码AAC后存储文件,确实能找到类似的解决方案,但都出自stackoverflow.com,并且还有出入,经过调试后确认,通过下面方式保存的AAC文件可以播放。Mediacode编码AAC,是使用audio/mp4a-latm 类型编码,编码出来的AAC帧加上ADTS头后,就可以正常播放,但关键的是下面的几个参数需要给正确:aac的profile, sample rat原创 2016-07-28 19:54:11 · 3377 阅读 · 3 评论 -
doubango中视频JitterBuffer的优化
原创 2016-02-03 11:20:32 · 3080 阅读 · 1 评论 -
Darwin推流存储实现介绍 之一
给Darwin服务器推送的流能否存储为文件,答案是肯定的,只是什么时候存,怎么存,存储的时机问题需要对Darwin的源码好好分析。原创 2016-08-12 16:06:38 · 1363 阅读 · 0 评论 -
在Android采集视频过程中增加水印功能实现
在Android采集视频过程中增加水印,并且水印包含一个变化的时间戳,这里考虑方案实现的时候,就想到了ffmpeg,ffmpeg包含很多filter能实现水印添加的功能。基本实现方案是,Camera预览 -> 得到预览帧的bitmap -> 给bitmap通过ffmpeg 添加水印 -> ffmpeg把bitmap使用h264编码 -> 写文件。其实ffmpeg添加水印功原创 2016-08-12 16:22:13 · 11719 阅读 · 8 评论 -
Darwin推流存储实现介绍 之二
根据上文确定的方案,我们会在每一个推流的会话建立时,增加一个自定义的Output对象,用来实现吧接收到的RTP包写到文件中。首先,我们在RTSPReflectorOutput.cpp中,参考RTPSessionOutput类定义一个RTPSessionSaveOutput类:class RTPSessionSaveOutput: public ReflectorOutput{原创 2016-08-13 14:47:14 · 1453 阅读 · 1 评论 -
在Spydroid-ipcamera基础上做推流的实现之二
接上一篇,已经清楚RTSP推流需要发送的RTSP请求消息,所以我们实现一个RTSP的客户端,完成这些请求消息,并将H264的RTP包推送到指定的RTSP服务器即可,这个客户端同时推送过Darwin和Crtmp-server两个RTSP的服务端,来验证推流客户端的功能实现。下面是我们实现的RtspPushStreamClient推流客户端类:package net.majorkernelpa原创 2016-08-15 13:53:08 · 3223 阅读 · 11 评论 -
Doubango RTP包传输使用UDT可靠传输协议,解决RTP丢包问题
使用SIP做过VOIP通话的同学,肯定被RTP丢包弄的焦头烂额,必定尝试过不少的办法,比方:1、丢包重传(NACK)2、前向纠错(FEC)3、丢帧处理但效果往往不尽如人意,那有没有一劳永逸的方法?确实,网络发展到现在,家庭带宽随随便便都是百兆的今天,为什么还有让人困扰不已的丢包问题?为何不换成TCP传输,假如延时容许的情况下,UDT就是为了解决这个问题的。UDT建立于UDP原创 2017-04-20 17:02:54 · 3793 阅读 · 5 评论 -
Android Camera预览时输出的帧率控制
如果使用MediaCodec硬编码H264,可以使用下面的方法控制编码输出的帧率: MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", width, height); mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,原创 2016-08-16 14:24:28 · 28446 阅读 · 6 评论 -
freeswitch 1.7分支代码编译记录
1、 执行./bootstrap.sh生成configure等脚本2、openssl的版本不能太新 也不能太老,最低版本是1.0.1e,建议只安装1.0.1e3、因为openssl的安装路径在/usr/local/ssl/目录下,所以只需configure需要指定openssl的头文件和库路径:./configure --prefix=/usr/local CFLAGS='-I/usr/local...原创 2018-03-19 15:18:29 · 396 阅读 · 0 评论 -
WebRtc中关于rtp-mux的实现!
测试对比发现在开启rtp-mux和不开启rtp-mux时,视频卡顿的现象改善更加明显,先记录下,后续研究rtp-mux的作用! rtp-mux简单说是视频流和音频流使用同一个端口发送和接收,在接收后做解复用识别音频和视频包,然后扔给指定的解码器。...原创 2018-03-19 15:46:06 · 958 阅读 · 0 评论 -
Doubango SIP和WebRTC的融合
1、融合基础:熟悉WebRTC媒体流采集、编解码和发送流程熟悉SIP信令和协商流程2、完成SIP信令和WebRTC的对接,实现音、视频通话3、具体实现步骤:采用webrtc的demo部分代码,jni还是用Peerconnection封装的接口,因为webrtc demo采用的jingle协议还是比较好理解的,客户端CreateOffer、CreateAnswer,然后就是ICE的通信和交互流程,最...原创 2018-04-02 20:13:50 · 1037 阅读 · 0 评论 -
GB28181协议支持的H264的PS封装实现
1、写在前面:最开始接触H264的PS封装的时候,参考的是:关于对H264码流的PS的封装的相关代码实现 , 确实是很有帮助,但完全参照这个实现,发现问题也很多,主要还是对MPEG213818的封装协议理解不深产生,所以我们在参考代码实现时,还是需要对原理做深入细致的分析,特别是封装涉及到bit级别的配置,一个bit配错了,可能就播放不了,所以记录下,做个备份。2、封装需要基本了解的概念:原创 2016-08-16 11:24:59 · 14121 阅读 · 1 评论