metartc5_jz源码阅读-yang_ice_initIce

无参考画质评估的破局点:NEMG-IQA 的误差图重构与 MTL-VQA 的多代理监督——RTC/UGC/云游戏场景深拆 RTC(实时通信):连麦/会议两端各自采集,网络只传码流,接收端不存在参考帧;就算想回传参考做离线对账,上行带宽和延迟预算也不允许。UGC(用户生成内容):创作者的原始素材躺在自己的手机里,平台从头到尾只见过转码后的产物。原始参考在物理上就不在平台侧。云游戏:渲染帧在数据中心生成,客户端只有解码后的码流。服务端虽然能拿到渲染帧,但它监控不到端到端链路——丢包、卡顿、终端渲染损伤都发生在客户端,服务端的 FR 分数只反映编码器质量,不反映用户实际看到的画面。只看失真画面本身,能不能推断出人会打几分? 阅读详情
//初始化ice,感觉这个逻辑跟谷歌官方的webrtc正好是相反的逻辑,正常应该县判断Host能不能通,不通在Stun,Stun也不通则走Turn中继。
void yang_ice_initIce(YangIceSession *session){
	//根据candidateType进行初始化
	switch(session->candidateType){
		//Host则什么也不做
		case YangIceHost:
			break;
		//Stun的话发起StunServer请求,请求失败的话降级为Host
		case YangIceStun:
			if(yang_ice_requestStunServer(session)!=Yang_Ok){
				yang_error("request stun server fail,change to host");
				session->candidateType=YangIceHost;
			}
			break;
		
		//Turn的话初始化Turn,turn初始化失败的话,发起StunServer请求,请求失败的话降级为Host
		case YangIceTurn:
			if(yang_ice_initTurn(session)!=Yang_Ok) {
				yang_error("request turn server fail,change to stun");
				session->candidateType=YangIceStun;
				if(yang_ice_requestStunServer(session)!=Yang_Ok){
                    yang_ice_closeTurn(session);
					yang_error("request stun server fail,change to host");
					session->candidateType=YangIceHost;
				}

			}
			break;

	}
}

webrtc 流程:以Unity webrtc为例 它的作用是把各种 NAT 穿透技术(如 STUN、TURN)整合在一起,制定了一套标准的流程:如何收集候选地址(Candidate)、如何对候选地址进行优先级排序、如何发起连通性检查(Connectivity Checks)、以及最终如何选定最优路径。作用:帮助处于 NAT(网络地址转换)环境下的设备获取公网 IP 地址,或者在无法直连时提供中继(Relay)服务,实现 NAT 穿透。"all"(默认):允许使用所有类型的候选者(包括本地 IP、STUN 反射 IP、TURN 中继 IP)。 阅读详情

相关推荐

uds协议之can总线程序升级

uds协议简介 如何利用uds协议升级 升级流程 uds服务类型介绍

fangye945a的博客 1万+

Real Time Clock(RTC)-19

SNTP:简单网络时间协议(Simple Network Time Protocol),由NTP改编而来,主要用来同步Internet中的计算机时钟。RTC 是负责记录和计算时间的逻辑电路(大脑),而晶振是给它提供稳定心跳节拍的物理器件(心脏)。系统时间:软件层面的系统时间(UNIX时间戳),ESP-IDF框架通过软件将硬件时间映射为标准的UNIX时间戳。实时时钟(Real Time Clock , RTC),专门用来记录时间的。RTC 的本质是一个计数器。,利用系统时间,也可以实现实时时钟的功能效果。

智能机器人产学研基地 239

基于单片机控制双向可控硅灯光强度设计

*单片机设计介绍,基于单片机控制双向可控硅灯光强度设计。

QQ2193276455的博客 2456

如何降低RTC SDK在复杂网络环境下的运行成本

在跨地域、专网 / 公网混合、移动接入等复杂网络环境中部署 RTC 实时音视频,除音视频质量之外,带宽消耗、服务器算力、流量资费、运维开销都会带来持续成本。成本优化不能只依靠理论配置,需要在真实复杂网络下验证:1. 在专网、4G/5G、跨运营商链路等环境,统计不同并发规模下带宽、CPU 占用、流量消耗;3. 持续监控节点负载、流量趋势,随业务规模迭代调整参数。针对突发集中接入场景,在信令层做平滑接入控制,避免瞬间大量终端同时上线造成节点过载,触发不必要的重连、重传,额外消耗网络资源。

YWamy的博客 203

实战演练,如何用Easyexcel合并单元格,设置字体、边框样式,并在尾行加入备注

,实现效果如下:1、多级表头合并2、表头底纹+表格边框3、合并相同数据单元格4、尾行加入备注。

Su7148的博客 1万+

YF-S401水流量传感器在STM32上的精准计量实现

本文详细介绍了YF-S401水流量传感器与STM32微控制器的集成应用,实现精准水流计量。通过外部中断和外部时钟两种脉冲计数方案,结合硬件配置、软件滤波和校准技巧,确保高精度流量测量。适用于智能家居和工业自动化中的水控系统,提升系统稳定性和测量准确性。

rainy的博客 895

WHAT - 理解 AbortController 协作式取消通知机制

在介绍过利用 AbortController 来取消请求的具体实践。今天进一步来认识其更细节的机制。它能否真正停止工作,取决于执行工作的 API 是否接收并处理取消信号。

weixin_58540586的博客 426

Computer Networks 和 Computer & Security投稿经验

论文投稿

qq_50604294的博客 9225

五轴与多轴机床的测量冲突:转台、RTCP 与测量基准的关系

五轴与多轴机床测量中,转台旋转导致工件坐标系随姿态变化,引发基准混淆、测量姿态选择、RTCP功能交互等冲突。需明确测量应在装夹、加工或联动姿态下进行,合理建立工件坐标系并记录姿态信息。开启RTCP时,测量锁存的是编程侧还是轴侧坐标必须厘清,测头长度须正确设定以保证参考点准确。程序应避免中途切换功能,确保坐标含义一致。不同系统对RTCP实现各异,需依手册配置。核心在于统一坐标参照,保障测量结果可追溯、可比、可修正。

宁波匠测科技_技术博客 532

如何使用 Ansys OptiSlang 同时运行多个参数化设计研究

了解如何通过使用 OptiSLang 同时运行多个参数化设计研究来提高工作效率。

jkh920184196的博客 2379

智能优化算法-北方苍鹰优化算法(NGO)(附源码)

北方苍鹰优化算法 (Northern Goshawk Optimizer, NGO) 是一种基于群体智能的元启发式优化算法,它模拟了北方苍鹰(Northern Goshawk)的捕食行为、领地行为以及社交互动,用于解决复杂的优化问题。总之,NGO作为一种新颖的优化算法,在处理复杂优化问题方面展现出了潜力。随着进一步的研究和应用,NGO有望成为解决实际问题的有效工具。

w971656545的博客 1360

【电路笔记 STM32】RTC配置:晶振选择+闹钟Configuration+中断设置

【电路笔记 STM32】RTC配置:晶振选择+闹钟Configuration+中断设置

ResumeProject的博客 377

【unity游戏开发入门到精通——通用篇】Post Processing 后处理插件Post-process Volume 和 Volume最全基础使用说明

之前我已经实现了不少后处理功能,本文其实就是将他们归类整理,以便更好的查找和理解。在Unity中,后处理(Post-Processing)是在相机所捕捉的图像上应用一些特殊效果的过程,后处理会让图像视觉效果更好(前提是做的好)。这些效果的范围有非常细微的颜色调整,也包括整体的美术风格的大修,可以让场景看起来更加真实或风格化,或者只是变得更好看。就像我们都会用手机拍照,但很多时候我们拍的原始的相片都打不到我们想要的效果。比如照片可能亮度不够,颜色不饱和或者对比度不好等。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7892

口播视频唇形总对不上,Seedance 2.5在zeekeAI里同步

做口播或数字人视频时,唇形不同步是常见痛点。核心在于音频质量、动作控制与输入切分。建议使用ZEEKEAI等聚合平台,通过大模型清理音频、切段喂入Seedance 2.5,配合特写镜头、微动提示词和短句输入,实现精准唇形同步。关键:人控节奏,工具算像素,前期约束越细,成片越自然。

2601_96168718的博客 172

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Firefox 刷抖音网页版卡顿?修改一个 Media 参数,让视频切换更加流畅

这次优化让我发现,浏览器刷短视频时的卡顿不一定都是网络或网页前端的问题,也可能与浏览器自身的媒体处理机制有关。抖音网页版会同时处理多个视频播放器,而 Firefox 在 Windows 平台上对 DXVA 硬件解码器实例数量设置了默认上限。当视频信息流中的多个播放器占用解码器资源时,就可能影响后续视频的解码初始化。将默认值 8 调整为 16,可以尝试缓解这类并发解码器资源不足的问题。配置项修改前修改后816Windows 桌面版 Firefox。使用 Firefox 浏览抖音网页版。

binweisili的博客 478

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Spring AI 多模态实战(下):文生图 + TTS 语音合成(含 2.0 流式音频分片)

本文基于 Spring AI 2.0.1,实战文生图与TTS语音合成:通过ImageModel/ImagePrompt生成图片(返回URL或base64),用SpeechModel/SpeechPrompt实现文字转语音;重点介绍2.0流式音频分片技术,支持低延迟长文本播报;结合缓存、落盘、限流等策略控制生成成本,避免URL过期、音频格式错乱等常见坑点。附完整代码与踩坑指南,助力构建高效多模态应用。

weixin_43128865的博客 263

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

视频美颜sdk的API设计会影响开发效率吗?

视频美颜SDK不仅需要具备优秀的图像处理能力,API接口设计同样会影响软件开发效率。本文从接口调用、参数配置、版本兼容、开发文档以及业务扩展等多个角度,分析API设计对视频美颜SDK集成和后期维护的实际影响,为直播APP、视频社交平台等项目的SDK选型与技术开发提供参考。

wanyuekeji的博客 187

音频自动匹配歌词:本地音乐库元数据维护实践

实施顺序建议为:建立主库、统一命名、批量匹配、人工校验、权限分享、定期备份。工具选择上,SMB/WebDAV、Navidrome、Jellyfin 以及轻量文件管理服务各有适用场景,应结合访问方式、权限需求和维护成本评估。把文件组织好、把批量操作控制住、把备份习惯建立起来,歌词补全才能真正提升本地音乐库的可用性,而不是带来新的整理负担。音乐文件不常修改,但歌词、封面、播放列表和目录结构属于人工整理成果,丢失后恢复成本较高。更合理的顺序是:集中存放、统一命名、批量匹配、人工校验、权限管理、定期备份。

zxcvb153的博客 114

视频号数据怎么采?接入方式、字段范围与场景适配

视频号数据采集的技术难点不在“调哪个接口”,而在。官方API服务的是“经营与交易”闭环,返回的是直播记录、订单、售后等结构化实体,但播放完成率、互动明细、评论区内容这些内容分析赖以生存的字段,并不在官方接口的返回Schema里。这意味着任何技术方案的选择,本质上是。

城章科技 275

直播APP如何实现美颜参数实时调节?视频美颜SDK交互机制解析

直播APP中的实时美颜功能是如何实现的?本文从视频美颜SDK的技术原理出发,详细解析磨皮、美白、瘦脸、滤镜等参数的实时调节机制,介绍APP与SDK之间的参数交互流程,以及线程协调、性能优化和设备兼容性等关键技术,为直播APP美颜功能开发与SDK接入提供参考。

wanyuekeji的博客 169

本地化部署会议视频软件如何开展试点?试用范围、评估指标与推广步骤

试用范围覆盖真实差异,评估指标具有明确口径,推广过程具备放行和回退机制。对于政企、金融、医疗及信创项目,尤其要避免三个误区:把本地部署等同于合规,把演示并发等同于生产容量,把功能清单等同于可运维能力。如果正在准备试点,建议先整理一张“网络—终端—业务—故障”矩阵,再决定试用人数。

hz56789的博客 313

视频怎么翻译?英文视频转中文字幕、中文配音的在线教程(附双语字幕做法)

视频文件里没有文字,所谓视频翻译其实是“抽音频—语音识别—机器翻译—再合成”这条链路。本文先拆清楚这条链路和三层产物(文字稿、字幕文件、配音视频),指出真正的质量瓶颈在语音识别而不在翻译,并说明背景音乐、口音、多人抢话、专业术语各自会造成什么后果。实操部分给出云音雀视频翻译功能页的完整流程:上传视频、指定原语言与目标语言、提交任务、到转换记录下载结果,同时提示文件24小时后自动删除。最后列出8个高频坑,以及字幕断行、时间轴校对的具体做法,适合外语访谈、课程、海外分发等场景。

qq370409341的博客 512

监控视频脱敏的追踪漂移与ID撞号陷阱

转场后遮罩活到新画面——人物离场加硬切后,遮罩还盖在新画面上约1.3秒。隐私窗口期——遮罩淡入期间(建轨首帧alpha只有1/3),加上按fps抽样(25fps素材每80ms采一帧),人脸露出后约130~160ms没被完全覆盖。ID撞号导致整段不输出——追踪器重启后track id从1重新编号,老轨还在段数据里。检查清单:导出前确认遮挡层时间范围覆盖全部检测轨,验证音频通道数量与原始素材一致,转场区域手动复核遮罩是否干净。工程上的核心问题不在识别本身,而在多目标追踪在场景切换时的行为控制。

Mysssone的博客 180

联犀 Go SIMD 实战:视频转码从 16.5ms 到 5.46ms

联犀Go视频转码实战:在352×288测试流中单帧单核CPU耗时从16.5ms到5.46ms,区分SIMD、代码及编码策略的综合收益。保留测试条件、压测结果与适用边界。

QQ603785348的博客 315

远程会诊产品设计复盘:音视频架构拆解与四大避坑

思路,形成分层结构:- 省级/区域远程医疗平台- 地市级会诊中心- 县级医院会诊节点- 乡镇卫生院、社区卫生中心接入点- 医生端、专家端、移动端、会诊室终端这套"省-市-县-乡-村"五级联动的架构,特别适合医共体、医联体和专科联盟类项目。产品经理要重点验收的是"医生能不能放大、缩放、多帧对比",而不是"能不能传个文件"。真正有价值的建设方案,从来不是堆功能,而是围绕医疗流程,把系统架构、业务对接、网络能力、安全合规和运营机制作为一个整体来设计——这也是产品经理在这个领域最大的价值所在。

cloudroom888的博客 234

AI智能美妆如何适应不同面部特征?视频美颜SDK技术解析

AI智能美妆正在推动视频美颜技术向个性化方向发展。面对不同用户的脸型、眼型、唇形及肤色差异,视频美颜SDK如何通过人脸检测、关键点识别、动态追踪和实时渲染实现精准适配?本文从核心技术原理、不同面部特征的妆容适配方式,以及实际应用场景等方面展开解析,帮助开发者了解AI智能美妆的技术实现与发展趋势。

q1031691172的博客 352
上一篇: metartc5_jz源码阅读-yang_sdp_genLocalSdp2
下一篇: metartc5_jz源码阅读-g_yang_ice_stun_receive
王方帅
博客等级 码龄4年 247粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王方帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值