自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

chenquangobeijing的专栏

流媒体、音视频开发

  • 博客(114)
  • 资源 (1)
  • 收藏
  • 关注

原创 ffplay音视频同步的疑问

当前系统时间>这一帧的显示时间+(下一帧-当前帧差值),丢帧。当前系统时间

2022-07-23 20:22:49 264

原创 H264编码步骤

1 预测编码:帧内预测,对一帧视频进行编码,I帧。帧间预测,几帧视频进行编码,P帧、B帧。这部分有运动估计,优化的难点。2 变换编码(即DCT编码,离散余弦编码)和量化编码DCT编码:把低频信息(对应大面积的平坦区域)转化到左上角,高频信息(人眼不敏感的信息)转化到右下角。量化编码:比如240,qp=28,240/28=9。再进行之字型扫描。3 熵编码:经常出现的短码表示,偶尔出现的长码表示。一般是cabac方式。原始值-预测值=差值,对差值编码。...

2022-07-06 18:42:17 511

原创 QUIC特性

PS,图都是这个文章的,。疑问:PC端、Android、IOS程序,不是浏览器,用quic传输音视频,加密、解密不耗时吗?效果好在那?当然大厂都上QUIC了。quic建立在udp上,用TLS1.3加密解密,自己实现了拥塞控制,不用修改系统内核。多路复用是HTTP/2的主要特性。

2022-05-19 18:11:19 548

原创 通过抓包看quic定义的包结构

RFC9000有完整的标准。由Header Packet+Frame组成。一 Header Packet分Long Header Packet、Short Header Packet。重要是DCID和SCID,服务器和客户端的标识。长度--2字节,Packet Number--1字节--变长。Long Header Packet包括以下4种,Packet Type如下:Short Header Packet包括1-RTT。二 Frame Type帧类型..

2022-05-19 17:34:07 1452

原创 quic使用--ngtcp2编译和demo使用

quic是在udp上,用了TSL1.3,加密了(加密解密,不会影响视频观看吗?)。重传,可以通过seq,区分重传还是原视的,解决了歧义二次性。

2022-05-19 16:58:24 1943

原创 WebRTC的source、sink、track关系

Source代表源,比如摄像头、桌面,sink是消费。一个source可以对应多个sink。比如摄像头需要显示,编码。一个track包括了Source和sink。VideoSourceInterface有AddOrUpdateSink,建立了source和sink的关系,类似filter的连接。VideoSinkInterface有OnFrame,视频就回调到这个函数。红色方框是peerconnection_client用到的类。...

2022-05-07 14:24:28 852

原创 WebRTC桌面共享--画面嵌套啊

2022-04-28 17:17:07 969

原创 WebRTC的RTCStats

一 peerconnection_client.exe新增RTCStats功能1 class RtcStatsObserver : public virtual webrtc::RTCStatsCollectorCallback{public: virtual void OnStatsDelivered(const rtc::scoped_refptr<const webrtc::RTCStatsReport>& report); //信息回调到这个函数};2 rt

2022-04-24 17:46:46 726

原创 WebRTC的DataChannel功能

一 DataChannel可以发送聊天的文本信息,可以走RTP和DTLS。新版本用RTP不行,sdp协商时,RtpDataChannel的state_变成kClose。sdp新增了application字段,协议走UDP/DTLS/SCTP。m=application 9 UDP/DTLS/SCTP webrtc-datachannelc=IN IP4 0.0.0.0a=ice-ufrag:qZdIa=ice-pwd:l2lrs5FGHFlox6XZ6rIiKSdTa=ice-opti

2022-04-22 19:17:03 1519

原创 WebRTC音频知识

一 采集间隔是10ms,windows平台的采样频率默认是16000。播放频率是48000,也判断支不支持,双通道。RTP打包间隔是20ms,所以时间戳以960递增。一秒发50个包,48000/50=960。opus编码器是48000,编码前经过了重采样。二 opus编码器设置:config.dtx_enabled=false,config.complexity=9,config.cbr_enabled=false,voip即语音主要使用SILK编码,音乐是CELT。三

2022-04-21 17:44:11 873

原创 WebRTC的Jitter计算

WebRtcVoiceMediaChannel::GetStats--| AudioReceiveStream::GetStats --| ChannelReceive::GetRTCPStatistics() --| StreamStatisticianImpl::GetStats() stats.jitter = jitter_q4_ >> 4;StreamStatisticianImpl::UpdateJitter{if (time_dif.

2022-04-19 19:33:02 675

原创 WebRTC Audio NetEQ学习笔记

DelayManager有一个直方图Histogram,统计延迟信息(具体怎么算的没懂),获得延时的值。即TargetDelayMs(),target_level_ms_。double quantile = 0.97;double forget_factor = 0.9993;1DelayManager:计算接收音频包的延时。最大个数max_packets_in_buffer_ = 200。DelayManager::Update{...UpdateDelayHistory(i.

2022-04-16 18:07:25 607

原创 简述音频3A算法概念

回声:远端的扬声器声音被麦克风采集到,然后传输给你,你听到自己的声音。先AEC,再NS,最后AGC。一 AEC:acoustic echo cancellation,回声消除。经过三个步骤:1 远端和近端的延时预估,即麦克风和扬声器的延时。(声音的采集线程和播放线程启动时间不同。)2 自适应线性滤波器:把麦克风的线性回声减去--从扬声器中获得的。用NLMS(normalized least mean square)。参数:滤波器长度,步长因子。3 非线性滤波:把残留的底噪回声

2022-04-15 18:24:43 5601

原创 WebRTC音频--类和函数调用图

2022-04-05 20:06:07 315

原创 PeerConnection_Client信令交互

接收STUN包,bind success request,带ip:port。这就是Candidate。WebRTC的p2p文件夹就是NAT实现,没用第三方开源库。Client主动发送STUN request包,从。

2022-03-26 20:38:29 729

原创 WebRTC的RTT计算及作用

rtcp::Rrtr在rrtr.cc。1 VCMNackFecMethod::ProtectionFactor(...),根据rtt,丢包率,判断是用nack还是fec。RTCP SR、RR包的发送间隔大概是1秒1个,间隔不能改成很大,影响RTT更新。如果在发送端计算,RTT = 接收RR包时间-发送SR包时间-DLSR(接收端发送RR包-接收SR包时间)将64位的NTP时间,整数取低16位,分数取高16位,变成了32位,即4字节。即T-rr - T-sr -(T1-rr - T1-sr)。

2022-03-23 16:27:13 1525 3

原创 WebRTC的JitterBuffer笔记

接收类图不全。

2022-03-22 17:29:50 888 1

原创 简述WebRTC的UlpFEC实现

1 启用UlpFEC因为WebRTC不让UlpFEC不能和nack同时用,只能将nack去掉。AddDefaultFeedbackParams(VideoCodec* codec,中,把下面两行注掉。//codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kParamValueEmpty)); //codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kRtc...

2022-03-17 19:10:08 612 1

原创 简述WebRTC的FlexFEC实现

一帧视频可以分成几个media包,(num_media_packets * protection_factor + (1 > 8,算出fec包个数。7个media包,4个fec包,是kMaskBursty7_4。0x38二进制是0x0011 1000,从左边数,从第一个包开始,第一个fec包是第3、4、5包异或。k=1,表示后面还有mask,即FEC包,k=0表示最后一个。抓包可以看到:H264 media包,Flexfec包,不同ssrc发送的。1个fec包恢复1个丢包。

2022-03-09 18:47:09 2612

原创 简述WebRTC中的丢包重传Nack的实现

RTCP FB Nack包如上图所示:pt=205,fmt=1,PID是丢包的起始序列号-2字节,BLP表示起始序列号后面16位丢包情况,1是丢包,0是没丢包。这是WebRTC中的SDP,原视频流PT是96,重传RTX PT是97, ssrc-group是原视频流ssrc和RTX ssrc。sender ssrc是发送RTCP NACK包这端发送视频rtp包的ssrc,media ssrc是随机生成的。接收端发现序列号不连续,发送RTCP FB Nack包,发送端从历史队列中查找该包,再发送RTP包,

2022-03-04 21:00:55 1015

原创 简述WebRTC的音视频同步

参考WebRTC 音视频同步原理与实现 - 知乎下图是上文中的。音视频的RTP的时间戳,加了一个随机的偏移量,且两者不等。通过RTCP的SR包的NTP、RTP时间戳,计算出音视频的RTP时间戳偏移量,即图中的offset。offset随着收到的SR包一直在更新。按我理解,offset是rtp时间戳的偏移,不是ntp的时间差。RtpStreamsSynchronizer::Process() { ... int relative_delay_ms; // Calcula.

2022-02-26 19:12:57 594

原创 WebRTC拥塞控制综述--简约版--新版本的

记录下我学习WebRTC拥塞控制,那些我懂了,那些我没懂。

2022-02-12 20:46:40 1987 1

原创 抓包分析下微信视频会议--用上Quic

音视频传输用上了quic,音视频都是一个端口发送的。另一个IP向本地发RTCP包,用了webrtc的transport-cc。本地向那个ip回了udp消息,二进制的。只看得出来这些,网上没有分析的文章。...

2022-02-10 17:19:34 2806

原创 用OpenFEC实现RSFEC

FEC原理可以参考这篇文章:谈谈网络通信中的 FEC 基础 - 知乎主要讲讲怎么实现的。OpenFEC支持4种FEC,我用的是OF_CODEC_REED_SOLOMON_GF_2_8_STABLE。编码:假设5个media包(视频数据,一个H264帧分成5个RTP包),2个fec包。1 调用of_rs_new,生成7行5列的编码矩阵。前5行是单位矩阵。如下:(54*M1) ^(74*M2) ^(e7*M3)^(d8*M4) ^(1e*M5) = R1。R2一样的。用o...

2021-10-21 18:21:54 1814

原创 webrtc h264 nack和ulpfec不能同时使用

(video_send_stream.cc:1105): Transmitting payload type without picture ID using NACK+ULPFEC is a waste of bandwidth since ULPFEC packets also have to be retransmitted. Disabling ULPFEC.webrtc源代码中,H264,NACK和FEC不能共存,实际商用中如何处理的?...

2021-09-26 15:23:30 675 1

原创 在线教育音视频SDK mute逻辑

最近在弄音视频SDK,不知道这个逻辑合不合理?mute本地音频:发送的时候,判断mute变量,如果为true,不发送了。 给

2021-06-10 17:44:04 139

原创 ffmpeg将实时H264写成TS文件,视频文件播放很快

PES包的PTS为0。AVPacket的PTS和DTS跟PES包的PTS有什么关系?

2018-12-17 16:29:26 1656

原创 GB28181级联 云台控制的第三方平台国标码从哪获取?

云台控制的第三方平台国标码从哪获取?

2018-11-14 16:10:33 1258

原创 D3D Surface/Texture SDL DDraw渲染视频的区别和疑问

1  D3D  Surface用起来比较简单,窗口改变时视频模糊,貌似是初始化窗口过小。全屏时有锯齿。   StretchRect的Rect是显示区域宽高,这个值固定是初始值。改成随窗口变化,失败。2  D3D Texture用起来复杂些。跟显示区域宽高无关。  问题:1窗口改变时视频模糊   2全屏时有锯齿。3  SDL开源,效果也不好。4  DDraw比较老了,但效果最好,...

2018-11-12 16:28:36 2193 1

原创 ffmpeg和librtmp推流rtmp的区别和存在的问题

1  ffmpeg可以从rtsp流地址中取H264,推流。   人物运动的时候有局部花屏。2  librtmp推流,时间戳是40。   有灰屏的原因--把nal type = 6的也推上去了。nginx rtmp做流媒体服务器。  ...

2018-09-21 10:34:12 3103

原创 jrtplib时间戳赋值

只能在mark为true时,赋值3600,其它时间赋为0,这样才能一帧中最后一包打mark位。好奇怪啊,貌似延时了一包。用过这个有遇到这样情况吗?

2018-09-21 10:27:39 634

原创 exosip5.0 支持TCP通信

1   eXosip_listen_addr(m_pExcontext, IPPROTO_TCP, NULL, m_SelfInfo.nPlatformPort, AF_INET, 0);2  TCP服务器,eXosip_listen_addr端口填5060,默认支持5060,这样就可以进行TCP通信了。...

2018-09-18 19:36:18 2453 6

原创 jrtplib3.11.1 TCP发送和接收视频流

参照tcptest.cppTCP客户端:        int   nClient = socket(AF_INET, SOCK_STREAM, 0);        sockaddr_in   serverAddr;        memset(&amp;serverAddr, 0, sizeof(sockaddr_in));        serverAddr.si...

2018-09-17 20:00:00 4502

原创 exosip库 应答info消息返回-6,事务不存在

int  nRet = eXosip_message_build_answer(pExcontext, pEvent-&gt;tid, 200, &amp;pAnswer);nRet = eXosip_message_send_answer(pExcontext, pEvent-&gt;tid, 200, pAnswer);应答INFO消息,返回-6,事务不存在。这是exosip库bug...

2018-09-11 15:48:30 1364 7

原创 PJSIP的配置文件和字段

工程属性,调试->命令参数填入"--config-file=xxx.txt"是完整路径。一 有自动记录音频文件的功能,但没有保存视频文件功能。--rec-file=F:\pjproject-2.4.5\pjproject-2.4.5\pjsip-apps\bin\record.wav--auto-rec二 自动播放——测试但没听见音频文件的声音--play-

2016-05-21 21:14:43 2011

原创 PJSIP增加保存AVI文件功能

PJSIP库没有保存视频文件的功能。保存为AVI文件是因为图像是RGB格式的,有一个avilib类可以写AVI文件。PJSIP库中的ffmpeg解码后,格式是I420,即YUV420P。宽高是720*480。利用ffmpeg的sws_scale可将YUV转为RGB格式。注意格式是PIX_FMT_BGR24,否则颜色不对,红蓝反了。图像是颠倒的,需要进行转换。具体代码如下:使用前

2016-05-21 21:07:56 949

原创 PJSIP学习总结

1  音频和视频是分开传的。2  RTP的m=0是不分包,m=1分包。

2016-04-17 21:43:16 823

原创 使用pjsua-i386-Win32-vc8-Debug.exe测试,可以看到视频

要在两台电脑上测试,运行exe。台1:vid enablevid acc autorx onvidacc autotx onmsip:10.168.24.179台2:vid enablevid acc autorx onvidacc autotx ona200如果台2看不到视频:vid win show 0,0是窗口编号,

2016-04-17 21:27:54 1762

原创 调试simple_pjsua.c,注册SIP服务器

pjsip-apps\src\samples\simple_pjsua.c功能:注册,拨打和接听。一 新建项目,使用PJSIP库通过链接器——>附加库目录包括lib文件不起作用,必须使用#pragmacomment(lib, "ws2_32.lib")#pragmacomment(lib, "lib/libbaseclasses-i386-Win32-vc8-Debug.l

2016-03-16 22:52:51 2365

原创 VS2005编译PJSIP库

1  安装DXSDK.exe。2  新建一个config_site.h文件,放在pjlib/include/pj目录下3  平台选择win32。4  将pjsua项目设为启动项。5  dsound.lib链接通不过,设置包含库目录,包括到X86。lib在每个文件夹的lib文件夹中,exe在pjsip-apps/bin文件夹下。

2016-03-13 21:18:20 1177

SRS WebRTC拉流抓包分析

SRS WebRTC拉流抓包分析

2024-07-04

曲线拟合,解线性方程

曲线拟合,解线性方程,在VC6中运行通过,修改点的XY数据就可以移植了。

2011-11-18

空空如也

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

TA关注的人

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