老衲不出家

老衲不出家自留地
私信 关注
老衲不出家
码龄12年

寨都码农一枚,平常喜欢关注音视频技术,从事音视频行业小几年,主要是音视频编解码,语音处理,移动端音视频开发,博客是一个自我记录的地方,如果不妥之处,请高人不吝赐教,如有侵权,请联系我删除。tanningzhong@126.com

  • 949,466
    被访问量
  • 233
    原创文章
  • 3,747
    作者排名
  • 453
    粉丝数量
  • 于 2009-09-04 加入CSDN
获得成就
  • 获得273次点赞
  • 内容获得188次评论
  • 获得563次收藏
荣誉勋章
兴趣领域
  • #后端
    #C/C++#分布式#Linux#Python#Go/GoLang#架构
TA的专栏
  • leetcode题解系列
    16篇
  • webrtc
    88篇
  • 音频编解码
    63篇
  • 视频编解码
    36篇
  • 工具技巧
    75篇
  • 流媒体
    36篇
  • Mediastreamer2
    3篇
  • c++
    47篇
  • 加解密算法
    1篇
  • 网络编程
    4篇
  • 音频混音
    2篇
  • UML
    1篇
  • 算法协议
    6篇
  • 多线程
  • IOS
    4篇
  • obs-studio
    1篇
  • H264
    27篇
  • Android&&底层
    8篇
  • IOS&&底层
    5篇
  • 音频开发
    2篇
  • 视频开发
    2篇
  • 编程总结
    10篇
  • RTMP
    3篇
  • hls
    2篇
  • CMake
    15篇
  • aec
    1篇
  • android
  • OpenAL
    3篇
  • nginx
    5篇
  • c++ 11
    18篇
  • OpenGL ES
  • 流媒体服务器
    9篇
  • P2P
    3篇
  • MAC
    1篇
  • 其他杂记
  • Flutter
    1篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Typora 更改编辑器的宽度

Typora 更改编辑器的宽度文章目录1、设置 源码编辑器 的宽度 1.1、验证 2、设置 编辑器(主题) 的宽度1、设置 源码编辑器 的宽度Typora 安装目录,默认为C:\Program Files\Typora\resources\app\style\下,找到base-control.css文件 ,打开后搜索#typora-source,找到max-width(或者直接搜索max-width) ,将其值改为1200,如图所示:1.1、验证重启 Ty...
原创
123阅读
0评论
0点赞
发布博客于 2 月前

RTMP协议消息分析

RTMP协议消息分析一. RTMP握手RTMP 握手分为简单握手和复杂握手,现在Adobe公司使用RTMP协议的产品用复杂握手的较多,不做介绍。1.1 握手包格式C0和S0 0 1 2 3 4 5 6 7+-+-+-+-+-+-+-+-+| version |+-+-+-+-+-+-+-+-+ C0 and S0 bitsC0和S0:1个字节,包含了RTMP版本, 当前RTMP协议的版本为 3。C1和S1 0 1
原创
58阅读
0评论
0点赞
发布博客于 3 月前

TCP粘包问题分析和解决

原文链接:https://www.cnblogs.com/kex1n/p/6502002.html在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小、数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。对于UDP,不会使用块的合并优化算法,
原创
108阅读
0评论
1点赞
发布博客于 4 月前

标准时间和时间戳转换

c++11 标准时间和时间戳转换//// Created by monktan on 2020/10/16.//#include <cstdint>#include <iostream>#include <chrono>std::time_t getTimeStamp(){ std::chrono::time_point<std::chrono::system_clock,std::chrono::milliseconds> tp
原创
81阅读
0评论
0点赞
发布博客于 4 月前

leetcode题解系列-015 最接近的三数之和

老规矩,线上代码,后面有解题思路://// Created by tannzh on 2020/6/19.///* * 给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数, 使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3 &l...
原创
33阅读
0评论
0点赞
发布博客于 5 月前

leetcode题解系列-014 三数之和

老规矩,先上代码,后续有解题思路://// Created by tannzh on 2020/6/19.///* * 三数之和 给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, ...
原创
36阅读
0评论
0点赞
发布博客于 5 月前

leetcode题解系列-013 最长公共前缀

老规矩,先上代码,后面有解题思路://// Created by tannzh on 2020/6/18.///* * 最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入: ["flower","flow","flight"]输出: "fl"示例2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母a-z。*/#include <strin...
原创
31阅读
0评论
0点赞
发布博客于 5 月前

leetcode题解系列-012 罗马数字转整数

老规矩,先上代码,最后有解题思路://// Created by tannzh on 2020/6/18.///* * 罗马数字转整数罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 ...
原创
25阅读
0评论
0点赞
发布博客于 5 月前

leetcode题解系列-011 整数转罗马数字

老规矩,先上代码,后面有解题思路://// Created by tannzh on 2020/6/17.///* * 整数转罗马数字罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2...
原创
45阅读
0评论
0点赞
发布博客于 6 月前

leetcode题解系列-010 盛最多水的容器

题目老规矩先上代码,后面有解题思路。//// Created by tannzh on 2020/6/17.///*给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此...
原创
53阅读
0评论
0点赞
发布博客于 6 月前

leetcode题解系列-009 正则表达式匹配

老规矩,先上代码,后面有解题思路。//// Created by tannzh on 2020/6/16.///* * 正则表达式匹配给你一个字符串s和一个字符规律p,请你来实现一个支持 '.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。说明:s可能为空,且只包含从a-z的小写字母。p可能为空,且只包含从a-z的小写字母,以及字符.和*。示例 ...
原创
58阅读
0评论
0点赞
发布博客于 6 月前

leetcode题解系列-008 回文数

老规矩,先上代码,后面有解题思路。//// Created by tannzh on 2020/6/16.///** 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1: 输入: 121 输出: true示例2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3: 输入: 10 输出: f.
原创
36阅读
0评论
0点赞
发布博客于 6 月前

【转】腾讯云PCDN:从P2P到万物互联服务框架

回顾XP2P的发展历程,由为近几年兴起的直播业务节省带宽成本为出发点,经过日益发展完善,XP2P已经在底层借助STUN、端口预测、生日攻击、UPnP构建了完善的互联直连基础,并且在直连的UDP连接的基础上拥有了高效、可靠传输协议XNTP,借此再高屋建瓴,在之上实现了广泛应用的HTTP协议,至此万物互联的服务框架已经基本搭建完成,具备网络负载小、传输性能高、稳定的特点。本文来自于腾讯云高级工程师张鹏在LiveVideoStackCon2019北京站上的精彩分享。文/张鹏整理 /Live...
原创
324阅读
1评论
0点赞
发布博客于 7 月前

leetcode题解系列-007 字符串转换整数 (atoi)

老规矩,先上代码,后续有解题思路。//// Created by tannzh on 2020/6/15.///* * 字符串转换整数 (atoi)请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一..
原创
79阅读
0评论
0点赞
发布博客于 7 月前

leetcode题解系列-006 整数反转

老规矩,先上代码,后面有题解。//// Created by tannzh on 2020/6/15.///* * 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 */#include <climits>#include <iostrea.
原创
62阅读
0评论
0点赞
发布博客于 7 月前

leetcode题解系列-005 Z字形变换

老规矩,先上代码://// Created by tannzh on 2020/6/12.///* * Z 字形变换将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "LEETCODEISHIRING"行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进..
原创
64阅读
0评论
0点赞
发布博客于 7 月前

leetcode题解系列-004 寻最长回文子串

老规矩,先上代码,后面有解题思路。//// Created by tannzh on 2020/6/12.///* * 最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"通过次数291,057提交次数947,907 */#include <iostream>#incl.
原创
66阅读
0评论
0点赞
发布博客于 7 月前

leetcode题解系列-002 无重复最长子串长度

首先,老原则,先直接上代码。//// Created by tannzh on 2020/6/11.///*给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子...
原创
74阅读
0评论
0点赞
发布博客于 8 月前

leetcode题解系列-003 寻找两个正序数组的中位数

老规矩,先上代码://// Created by tannzh on 2020/6/11.///*给定两个大小为 m 和 n 的正序(从小到大)数组nums1 和nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。 示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 示例 2: nums1 = [1...
原创
115阅读
0评论
0点赞
发布博客于 8 月前

ffmpeg截取视频片段命令优化

正常简单命令:ffmpeg -i input.mp4 -ss 1:05 -t 10 output.mp4-ss 5指定从输入视频第1:05秒开始截取,-t 10指明最多截取10秒。但是上面的命令可能会比较慢,更好的命令如下:ffmpeg -ss 1:05 -i input.mp4 -t 10 -c:v copy -c:a copy output.mp4把-ss 1:05放到-i前面,与原来的区别是,这样会先跳转到第1:05秒在开始解码输入视频,而原来的会从开始解码,只是丢弃掉前1
原创
331阅读
0评论
0点赞
发布博客于 8 月前

leetcode题解系列-000两数之和

//// Created by tannzh on 2020/6/9.///* * 标题: 两数之和 * 给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 * * 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 * 示例: * 给定 nums = [2, 7, 11, 15], target = 9 * 因为 nums[0] + nums[1] = 2 + 7 = 9 * 所以返回...
原创
86阅读
0评论
0点赞
发布博客于 8 月前

leetcode题解系列-001 两数相加

直接上题目和代码,最后面有解题思路分析。//// Created by tannzh on 2020/6/9.///* 给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的, 并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)...
原创
82阅读
0评论
0点赞
发布博客于 8 月前

MAC Wireshark 打开错误

MAC Wireshark 打开错误,打开遇到 you don't have permission to capture on that device mac 错误的解决方案1. 打开终端,输入命令whoami2. 假设用户是tomcat3. 进入/dev目录cd /devsudo chown tomcat:admin bp*4. 重新打开wireshark,成功解决...
原创
155阅读
2评论
0点赞
发布博客于 9 月前

WebRTC 基础技术 | RTP 包序列号的回绕处理

原文链接:这里 导读 序列号回绕 ForwardWrap BackwardWrap 源码分析 IsNewer 函数 Unwrap 函数 测试用例 测试 1 测试 2 总结 导读在诸多的网络通信协议中,都会有序列号字段sequence numb...
原创
697阅读
0评论
0点赞
发布博客于 10 月前

音视频基础知识-时间戳的理解

转自:https://mp.weixin.qq.com/s/w-UUR596wRkUOGpKxEIw7Q问题背景:凡是和流媒体和音视频打交道,时间戳基本是一个必须深刻理解的概念。你会在各种各样的传输协议和封装格式中看到这个东西,而且表现形式还不一样。其次这个概念会涉及到音视频播放的同步问题,也会影响音视频播放的控制问题。前者说的是音画同步,后者说的是类似快进,随机点播放等。如果要理解好这个...
原创
1357阅读
0评论
0点赞
发布博客于 10 月前

完整SIP/SDP媒体协商概论-ICE初始offer发送详解

原文地址:https://mp.weixin.qq.com/s/plQi0lK2kxwYWv7WpVzGDA在前面的章节中,我们主要讨论了ICE概览,介绍了ICE的基本处理流程和候选地址配对的算法概论和轻量级ICE部署(Lite Implementations)的讨论。和前面介绍中讨论的SIP中offer的处理一样,在此文章中,笔者也将首先介绍ICE处理过程中初始offer的发送处理。因...
原创
692阅读
1评论
1点赞
发布博客于 10 月前

最新vs2019编译libevent-2.1.11-stable

最新vs2019编译libevent-2.1.11-stable准备工作安装vs2019略下载lievent下载地址开始编译打开vs命令行进入到libevent库目录执行nmake /f Makefile.nmake提示如下报错解决办法编辑minheap-internal.h文件,在最前面添加include <stdint.h>头文件,重新执行上述编译...
原创
843阅读
1评论
0点赞
发布博客于 1 年前

JNI笔记3,解决findClass()调用失败的问题

JNI笔记3,解决findClass()调用失败的问题以上一篇转载的为例,做具体分析,并且代码调试通过,上一篇转载的文章因转载人数过多,其实代码是跑不起来的。00 背景在JNI的调用中,总是要涉及到Native层调用Java层的情况,最近遇到的问题就是,Native层本地多线程回调Java函数时env->findClass()失败,单线程调用的时候会成功,多线程调用的时候存在返回N...
原创
788阅读
0评论
1点赞
发布博客于 1 年前

Jni本地多线程回调Java函数,env->findClass()失败。

lipeng32768 最后发布于2014-12-19 21:27:06 阅读数 5071 收藏展开遇到的问题,Native层本地多线程回调Java函数时env->findClass()失败。前面的代码是这样的在JNI_OnLoad记录全局变量g_vmstaticJavaVM*g_vm=NULL;JNIEXPORTjintJNICALLJNI_OnLoad(J...
转载
261阅读
0评论
0点赞
发布博客于 1 年前

Mac系统应用已经删除,但是右键还有残留的解决办法

打开终端,执行如下命令即可。/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user...
原创
1146阅读
1评论
0点赞
发布博客于 1 年前

C/C++下__FILE__参数过长的问题解决办法

C/C++下__FILE__参数过长的问题解决办法编译mycode库时,爆出一个编译问题:snprintf(msg, sizeof(msg), “OOTB, %s:%d at %s”, FILE, LINE, func);这儿报告msg的空间不足以存放后续的内容,此字符串在实际编译后,存放的内容大小是固定的,但由于__FILE__带了全路径,导致报告空间不够。搜索一通后解决办法如下:如...
原创
226阅读
0评论
0点赞
发布博客于 1 年前

浅谈 WebRTC NetEQ

WebRTC Native 代码里面有很多值得学习的宝藏,其中一个就是 WebRTC 的 NetEQ 模块。根据 WebRTC 术语表 对 NetEQ 的解释:A dynamic jitter buffer and error concealment algorithm used for concealing the negative effects of network jitter an...
转载
551阅读
0评论
0点赞
发布博客于 1 年前

JNI笔记2

JNI 笔记 25 引用类型JNI 把 instance 和 array 类型的指针对外公布为 opaque reference,这种引用对于 JNI 来说是透明的,本地代码不需要通过指针操作 reference,不需要关心对象的内存布局,而是通过 JNI API。关于 reference,有以下内容需要掌握:JNI支持三种类型的opaque reference:local refer...
原创
98阅读
0评论
0点赞
发布博客于 1 年前

JNI笔记1

JNI 学习资料:Oracle JNI 文档 1.5Oracle JNI 文档 1.7《The Java™ NativeInterfaceProgrammer’s Guide and Specification》IBM:Java 本机接口 (JNI)极客学院:JNI/NDK 开发指南IntelliJ IDEA平台下 JNI 编程笔记翻译自《The Java™ NativeInt...
原创
121阅读
0评论
1点赞
发布博客于 1 年前

git常用别名

[alias] s = status st = status sb = status -s -b ############# d = diff di = diff dc = diff --cached dk = diff --check dck = diff --cached --chec...
原创
80阅读
0评论
0点赞
发布博客于 2 年前

Error message when starting vim: “Failed to set locale category LC_NUMERIC to en_CH” (or en_BR, en_R

mac vim配置后改变系统语言,报出如下警告:Warning: Failed to set locale category LC_NUMERIC to en_CH.Warning: Failed to set locale category LC_TIME to en_CH.Warning: Failed to set locale category LC_COLLATE to en_...
原创
576阅读
0评论
0点赞
发布博客于 2 年前

git常用命令列表

1 常用$ git remote add origin git@github.com:yeszao/dofiler.git # 配置远程git版本库$ git remote set-url --add origin git@gitee.com:yeszao/dnmp.git # 多添加一个push地址,这样一次可以push到多个remote$ git pull ori...
原创
67阅读
0评论
0点赞
发布博客于 2 年前

mac使用brew update无反应,更新慢解决办法

使用中科大的镜像替换默认源第一步,替换brew.gitcd "$(brew --repo)"git remote set-url origin https://mirrors.ustc.edu.cn/brew.git第二步:替换homebrew-core.gitcd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"g...
原创
562阅读
0评论
0点赞
发布博客于 2 年前

解决studio Connection refused (Connection refused)

Android studio忽然抽风,不管怎么尝试都无法build,查看studio的log,发现如下日志:2018-04-12 18:12:19,318 [d thread 8] WARN - ect.sync.idea.ProjectSetUpTask - Connection refused (Connection refused) 2018-04-12 18:12:1...
原创
1318阅读
1评论
0点赞
发布博客于 2 年前

WavFileRead.zip

vs2019工程使用标准c++读取wav文件信息,可以根据自己需求修改,已经包含了vs2019工程,并且编译调试通过 可以自行下载
zip
发布资源于 2 年前

PlanUML画图札记之六 ------ 对象图

对象图对象的定义使用关键字object定义实例。@startumlobject firstObjectobject "My Second Object" as o2@enduml对象之间的关系对象之间的关系用如下符号定义:Type Symbol Image Extension <|-- ...
原创
78阅读
0评论
1点赞
发布博客于 2 年前

PlanUML画图札记之五 ------ 状态图

状态图简单状态使用([*])开始和结束状态图。使用-->添加箭头。@startuml[*] --> State1State1 --> [*]State1 : this is a stringState1 : this is another stringState1 -> State2State2 --> [...
原创
117阅读
0评论
0点赞
发布博客于 2 年前

PlanUML画图札记之四 ------ 组件图

组件图我们来看几个例子 := 组件 =组件必须用中括号括起来。还可以使用关键字component定义一个组件。 并且可以用关键字as给组件定义一个别名。 这个别名可以在稍后定义关系的时候使用。@startuml[First component][Another component] as Comp2 component Comp3component [Las...
原创
102阅读
0评论
0点赞
发布博客于 2 年前

PlanUML画图札记之三 ------ 活动图

活动图简单活动使用(*)作为活动图的开始点和结束点。有时,你可能想用(*top)强制开始点位于图示的顶端。使用-->绘制箭头。@startuml(*) --> "First Activity""First Activity" --> (*)@enduml箭头上的标签默认情况下,箭头开始于最...
原创
105阅读
0评论
0点赞
发布博客于 2 年前

PlanUML画图札记之二 ------ 类图

= 类图 =类之间的关系类之间的关系通过下面的符号定义 :Type Symbol Drawing Extension(扩展) <|-- Composition(组合) *-- Aggregation(聚合) o-- 使用..来代替--可以得到点 线.在这些规则下,也可以绘制下列图形...
原创
135阅读
0评论
1点赞
发布博客于 2 年前

PlanUML画图札记之一 ------ 时序图

PlanUML可以画出漂亮的流程图,时序图之类的,IDEA和CLION之类的IDE都能安装插件时序图简单示例你可以用->来绘制参与者之间传递的消息, 而不必显式地声明参与者。你也可以使用-->绘制一个虚线箭头。另外,你还能用<-和<--,这不影响绘图,但可以提高可读性。 注意:仅适用于时序图,对于其它示意图,规则是不同的。@star...
原创
364阅读
0评论
0点赞
发布博客于 2 年前

PyPDF2的使用

pdf使用Adobe公司开发,现在由国际标准化组织ISO进行维护。PDF合成包含链接和按钮,表单字段,音频,视频和业务逻辑在这篇文章中,我们将学习如何做一些pdf的操作:从PDF中提取文字旋转pdf页合并pdf分割pdf向pdf页中添加水印使用简单的python脚本1、安装我们将使用第三方的模块 PyPDF2PyPDF2是作为PDF...
原创
329阅读
0评论
1点赞
发布博客于 2 年前

Wireshark h264_export.lua插件--从抓包RTP导出 H.264 负载数据

1.MAC系统1.1 Lua插件代码怎么用?1.1.1 确认Wireshark是否支持Lua菜单栏-->Help-->About Wireshark注意看弹出的窗口中的Wireshark选项卡1.1.2 启用Lua在About窗口中的Folders选项卡还可以查看各种文件夹的位置在Global configuration的位置有个init.lua,其实这是一个到...
原创
636阅读
0评论
0点赞
发布博客于 2 年前

在HTML5上开发音视频应用的五种思路

问题背景:无论是实时视频监控还是直播点播等应用场景,最起码的一个操作就是播放视频。其中最基本的思路就是利用OS的API在PC开发桌面应用、在移动端开发Native App,目前这种技术已经成熟,大厂小厂都是这么做的,但是缺点也很明显:开发比较费时费力,需要IOS开发一遍再去Android开发一遍。特别对于一些非刚性需求比如用户家里有一两个监控摄像头,一个礼拜也不会打开看几次,你却要他下载和安装...
原创
676阅读
0评论
0点赞
发布博客于 2 年前

音视频解封装:MP4核心Box详解及H264&AAC打包方案

问题背景:上一篇文章《音视频封装:MP4结构概述和分析工具》让大家看了下MP4的主要结构和推荐了一些分析工具,如果你对MP4没有任何了解,还是先看上文,了解MP4的基本结构,其中还有许多工具需要下载和使用。这篇文章借助一个实例分析下核心Box的语法结构和字段含义,其次总结下H264码流的是如何打包到MP4中的,这篇文章也是下篇文章计算一些音视频信息,实现音视频操作和对MP4码流处理的基础。...
原创
523阅读
0评论
0点赞
发布博客于 2 年前

音视频封装:MP4结构概述和分析工具

原文地址:https://mp.weixin.qq.com/s/dlHn_Ki_BwUM2Dgst-hjTw问题背景:前面已经讲了好几种封装格式包括了TS、FLV、RTP等。现在用几篇文章讲解下MP4,这种封装格式设计思路和前面都不太一样,其应用范围最广、灵活性最高、跨平台最好,兼容性最强。带来的负面影响就是格式本身比较复杂,特别是在封装和转封装方面代码实现起来比较长。这个系列会和前面...
原创
441阅读
0评论
0点赞
发布博客于 2 年前

音视频压缩:H264码流层次结构和NALU详解

问题背景:前面在讲封装格式过程中,都有一个章节讲解如何将H.264的NALU单元如何打包到TS、FLV、RTP中,解装刚好相反,怎么从这些封装格式里面解析出一个个NALU单元。NALU即是编码器的输出数据又是解码器的输入数据,所以在封装和传输时,我们一般处理对象就是NALU,至于NALU内部到底是什么则很少关心。甚至我们在编解码时,我们只需要初始化好x264编码库,然后输入YUV数据,它就会给...
原创
258阅读
0评论
2点赞
发布博客于 2 年前

5G媒体流架构

引言本文来自IBC2019(国际广播大会),主要讲述了3GPP为5G开发了一种新的媒体流架构,其中加入了媒体产业的最新成果和5G系统提供的新特性。该媒体服务架构注重移动网络运营商和媒体服务提供商之间的协作场景的优化,同时这些优化也适应传统广播的发展需要。新的架构支持目前支持单播下行媒体分发和上行流媒体。5GMSA的背景现行的3GPP分组交换流(PSS)架构是为3...
原创
646阅读
0评论
0点赞
发布博客于 2 年前

webrtc源码之nack&&rtx详解

1、nack协商m=video 9 RTP/AVPF 96 97 98 99 100 101127 122 108 109 123a=rtpmap:96 H264/90000a=rtcp-fb:96 goog-remba=rtcp-fb:96 transport-cca=rtcp-fb:96 ccm fira=rtcp-fb:96 nacka=rtcp-fb:96 na...
原创
684阅读
0评论
0点赞
发布博客于 2 年前

PCM音频数据的声音分贝值计算

PCM声音是重采样为无符号16bit的深度的,然后我们需要得到某一时间(一般是零点几毫秒)PCM所在内存的地址和PCM声音的大小,而16bit也就是16bit/8bit=2byte,在c语言中2byte用short int来表示,因此我们可以从PCM所在地址里面按顺序取出2个byte的数据然后转化成short int的值就可以拿到当前采样点的振幅了,获取的方式是用c语言中的memcpy拷贝2个字节...
原创
2208阅读
0评论
1点赞
发布博客于 2 年前

一文读懂视频编解码原理

引子谈到视频的编解码,我们会自然地想到H.264、HEVC/H.265这些权威的视频编解码标准;谈到标准,有人觉得这个是有专门机构去研究的,我们关心应用就好;即使有兴趣读了标准和相关技术,面对更多的是各种数学公式和术语,如协方差、傅立叶变换、高频、滤波等等,需要花更多时间去理解。通常更为实际的做法是,我们只要调研如何应用这些标准,如何做好软硬件编码方案的选型,如何优化技术参数以及如何调用API...
原创
4036阅读
7评论
18点赞
发布博客于 2 年前

Flutter学习指南:UI布局和控件

这是一个系列,通过8篇文章帮助大家建立起 Flutter 的知识体系,建议大家好好阅读并收藏起来,如果能随手转发,那就更好了。本篇文章我们先介绍 Flutter 里一些常用的 UI 控件,然后借助官网提供的两个 demo 把所学的控件知识实际使用起来。基本控件Widget在 Flutter 里,UI 控件就是所谓的 Widget。通过组合不同的 Widget,来实现我们用户交互界面。...
原创
386阅读
0评论
0点赞
发布博客于 2 年前

FLV协议5分钟入门浅析

FLV协议简介FLV(Flash Video)是一种流媒体格式,因其体积小、协议相对简单,很快便流行开来,并得到广泛的支持。常见的HTTP-FLV直播协议,就是使用HTTP流式传输通过FLV封装的音视频数据。对想要了解HTTP-FLV的同学来说,了解FLV协议很有必要。概括地说,FLV 由 FLV header 跟 FLV file body 两部分组成,而 FLV file body...
原创
180阅读
0评论
0点赞
发布博客于 2 年前

Linux 下修改或者重命名用户名称或者UID/GID

摘要在Linux操作系统下怎么样用命令行去修改用户的名称(也就是重命名),或者UID/GID切记不要手动用vi之类的文本编辑器去修改 /etc/passwd 文件修改用户名称Usage:usermod -l login-name old-name修改用户的名称 old-name 改成 login-name,别的都没有改变。其实我们也应该考虑是否把用户的HOME目录也改...
原创
2019阅读
0评论
1点赞
发布博客于 2 年前

解决:Authentication token is no longer valid; new one required

解决crontab遇到用户密码过期的问题问题描述:近期某服务器的crontab,每天未正常执行,检查日志发现大量报错,如下:该问题是由于近期用户密码更新所致crontab用户密码过期问题解决:1.chage -l ${username}查看用户密码期限相关信息chage -l root;-----------------------------------------Last p...
原创
2120阅读
0评论
1点赞
发布博客于 2 年前

Crontab -e You are not allowed to use this program (crontab)

最近注意到有系统创建的普通帐户无法使用crontab,但以root身份运行计划任务是不推荐的。每次尝试使用普通用户编辑crontab时,收到以下消息:[miner@cy2 ~] $ crontab -eYou (miner) are not allowed to use this program (crontab)See crontab(1) for more information...
原创
1156阅读
0评论
1点赞
发布博客于 2 年前

MacBook Pro接通电源后电池不充电 Apple官方解决办法

型号:MacBook Pro 2018现象:在确认电源正常的情况下,接入电源后电池不充电。该现象无规律,偶然会出现原因:Mac有个SMC模块,是否对电池充电是通过SMC控制的,有时候控制逻辑能出不正常,通过重置SMC即可办法:https://support.apple.com/zh-cn/HT201295#t2选取苹果菜单 >“关机”。在 Mac 关机后,按住右 Shift 键、左...
原创
29098阅读
16评论
2点赞
发布博客于 2 年前

音视频码率的计算

原文出处https://juejin.im/post/5d34116ce51d4576bc1a0ebf一、前言 音视频处理相关,首先需要面临的是音视频多媒体的比特率问题,比特率也是码率,一个音频比特率为 128kb/s,即每秒128k bit,8bit=1Byte,也就是这个音频每秒钟占用16KB的存储空间,而如果涉及到多声道就应该乘以相应的倍数。 由于视频...
原创
1687阅读
0评论
0点赞
发布博客于 2 年前

Jsoncpp新接口用法

在新的Jsoncpp中 Json::Writer、Json::FastWriter、Json::Reader 等都被摒弃了,用了新的Json::StreamWriterBuilder、Json::CharReaderBuilder代替。示例代码如下:#include <iostream>#include <string>#include <fstream&g...
原创
603阅读
0评论
0点赞
发布博客于 2 年前

Jsoncpp两种生成json串区别

代码先上代码 std::string strTime = "2019-07-11 14:49:14.848715"; Json::Value root; root["Time"] = strTime; root["seq"] = 1; root["EnCode"] = "H"; root["Body"] = "ADFASSASDFUUOOOMNNN...
原创
512阅读
0评论
0点赞
发布博客于 2 年前

FFmpeg命令

引言FFmpeg是领先的多媒体框架,本帖将展示六个常用的FFmpeg命令。FFmpeg的官网下载地址为:https://ffmpeg.org/download.html。1、基础命令ffmpeg -i input.mp4 output.mp4命令解释: ffmpeg执行ffmpeg程序,如果你没有将ffmpeg加入环境变量,那么你需要输入ffmpeg的完整路径...
原创
264阅读
0评论
1点赞
发布博客于 2 年前

Visual Assist X 10.9.2333.0.zip

vassistx 2333河蟹版,支持最新vs2019,稳定流程,非xx阁版本
zip
发布资源于 2 年前

Python 调用ffmpeg视频转码mp4

import os # import fnmatch import reimport subprocessgl_file_list = []gl_failed_list = []def getFilesPath(path): # 获得指定目录中的内容 file_list = os.listdir(path) for file_name in ...
原创
5771阅读
2评论
1点赞
发布博客于 2 年前

18个实时音视频开发中会用到开源项目

实时音视频的开发学习有很多可以参考的开源项目。一个实时音视频应用共包括几个环节:采集、编码、前后处理、传输、解码、缓冲、渲染等很多环节。每一个细分环节,还有更细分的技术模块。比如,前后处理环节有美颜、滤镜、回声消除、噪声抑制等,采集有麦克风阵列等,编解码有VP8、VP9、H.264、H.265等。我们今天汇总了一些能帮助到正在学习或进行音视频开发的实时音视频开发者们的开源项目与几个也在为开源...
原创
594阅读
0评论
0点赞
发布博客于 2 年前

编解码器:Opus编码器内置FEC功能测试

Opus功能十分强大,内置了FEC和DTX功能,Opus对FEC的使用方式是动态的,也就是说Opus能根据对端反馈的丢包率来动态的使用FEC功能,48k采样率,单声道、16k码率并且帧长度为20ms时,这种情况下只有在丢包率高于20%的时候Opus才会使用FEC,今天主要对Opus在这种条件下的FEC的功能进行了测试,本问是基于Opus接口的那篇文章写的,如果没看过可以链接到编解码器:Opu...
原创
774阅读
0评论
2点赞
发布博客于 2 年前

编解码器:Opus编解码器的接口及使用

1.源码下载及编译编解码器版本采用opus-1.3-beta,opus官网:https://www.opus-codec.org/下载完成后解压源码,在VS2015上打开源码 opus-1.3-beta\win32\VS2015\opus.sln,共有5个项目,其中opus项目是opus编解码器的主要实现以及对外部提供接口,实际写程序的时候一定是基于该项目中接口的,opus_demo是基于...
转载
1059阅读
0评论
2点赞
发布博客于 2 年前

Mac OS系统下Beyond Compare破解方式

在官网(https://www.scootersoftware.com/download.php)下载Beyond Compare并安装成功后:执行如下操作:1.进入Beyond Compare应用程序MacOS目录下(/Applications/Beyond Compare.app/Contents/MacOS)2.将主启动程序BCompare重命名为BCompare.real...
原创
11816阅读
22评论
11点赞
发布博客于 2 年前

iOS利用FFmpeg实现Video硬解码

需求将编码的视频流解码为原始视频数据,编码视频流可以来自网络流或文件,解码后即可渲染到屏幕.实现原理正如我们所知,编码数据仅用于传输,无法直接渲染到屏幕上,所以这里利用FFmpeg解析文件中的编码的视频流,并将压缩视频数据(h264/h265)解码为指定格式(yuv,RGB)的视频原始数据,以渲染到屏幕上.注意: 本例主要为解码,需要借助FFmpeg搭建模块,视频解析模块,渲染模块...
转载
2153阅读
1评论
3点赞
发布博客于 2 年前

c++11 自己实现make_unique

template<typename T, typename... Ts>std::unique_ptr<T> make_unique<Ts&&... params>{ return std::unique_ptr<T>(new T(std::forward<Ts>(params)...));}
原创
1601阅读
0评论
1点赞
发布博客于 2 年前

通过 wireshark 抓包了解直播流媒体RTMP协议基本过程

先给出RTMP协议的原文件https://www.adobe.com/devnet/rtmp.html需要用到的时候可以参考一下~。做推流直播接触最多的并且主要也是RTMP协议RTMP协议是应用层协议,是要靠底层可靠的传输层(TCP) 协议(通常是TCP)来保证信息传输的可靠性的。在基于传输层协议的链接建立完成后,RTMP协议也要客户端和服务器通过“握手”来建立基于传输层链接之上的RTMP...
转载
5290阅读
0评论
1点赞
发布博客于 2 年前

websocketpp c++客户端

利用websocketpp库编写websocket客户端程序。一、阻塞方式实例#include "stdafx.h"#include <websocketpp/config/asio_no_tls_client.hpp>#include <websocketpp/client.hpp>#include <iostream>typed...
转载
2071阅读
0评论
0点赞
发布博客于 2 年前

C++11智能指针之优先使用std::make_unique和std::make_shared而不是直接使用new

在初始化一个unique_ptr或者shared_ptr时,我们最好优先使用std::make_unique和std::make_shared。原因有一下几点:异常安全性假设有如下函数声明:intcomputePriority();void processInvestment(std::shared_ptr<Investment> ptr,int priority);...
原创
1589阅读
0评论
1点赞
发布博客于 2 年前

Linux rsync环境搭建(非ROOT搭建)

Linux rsync环境搭建(非ROOT搭建)环境准备rsync下载https://rsync.samba.org/ftp/rsync/src/rsync-3.1.3.tar.gzinotify下载https://github.com/rvoicilas/inotify-tools/archive/3.20.1.tar.gz环境信息下面是两台服务器的结构,分别为主机...
原创
1050阅读
0评论
3点赞
发布博客于 2 年前

Janus配置文件详解

General基本配置,配置和插件的路径,日志输出方式,运行方式等配置.变量说明示例configs_folder配置文件目录路径configs_folder=/opt/janus/etc/janusplugins_folder插件目录路径plugins_folder=/opt/janus/lib/janus/pluginstransports_fold...
原创
3249阅读
1评论
0点赞
发布博客于 2 年前

Cmake学习笔记

cmake添加debug和release参数SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb ")SET(CMAKE_CXX_FLAGS_RELEASE "${ENV{CXXFLAGS} -O3 -Wall")cmake添加参数去掉"__FILE__"路径set(CMAKE_CXX_FLAGS "${CMAKE_CX...
原创
421阅读
0评论
0点赞
发布博客于 2 年前

Mac Clion 2019.01使用Makefile单步调试

Mac Clion 2019.01使用Makefile单步调试安装Clion略使用Clion单步调试安装MakeFile插件在File>>setting>>plugins>>makefile support>>install安装,如下图所示:编译调试安装完插件后,编写好Makefile文件,选中Makefile文件右键,选中run M...
原创
2467阅读
0评论
3点赞
发布博客于 2 年前

Chrome如何下载视频

有时候看到油管会有很棒的视频,很想下载下来,可是官网又没有提供下载办法,就得动一动歪脑筋了。尝试了多种办法,YouTube Video Downloader在下载4K视频时会解码失败,还有一些会收费,最后我终于选中了这一种方法。打开clip converter(https://www.clipconverter.cc/addonchrome/)下载网站,安装两个插件最后你再去油管看看,...
原创
2278阅读
0评论
0点赞
发布博客于 2 年前

ZLMediaKit高并发实现原理

项目介绍ZLMediaKit是一套高性能的流媒体服务框架,目前支持rtmp/rtsp/hls/http-flv流媒体协议。该项目已支持linux、macos、windows、ios、android平台,支持的编码格式包括H264、AAC、H265(仅rtsp支持H265);采用的模型是多线程IO多路复用非阻塞式编程(linux下采用epoll、其他平台采用select)。该框架基于C++1...
原创
6277阅读
0评论
5点赞
发布博客于 2 年前

语音质量评价方法-【音频质量专题】

主要内容:1.信噪比(Signal-to-NoiseRatio,SNR)2.分段信噪比(Segment Signal-to-Noise Ratio,SegSNR)3.PESQ(PerceptualEvaluationofSpeechQuality)4.对数似然比测度(LogLikelihoodRatioMeasure,LLR)5.对数谱距离(logspect...
转载
2822阅读
0评论
0点赞
发布博客于 2 年前

Ubuntu 18.04 编译安装Janus

Ubuntu 18.04 编译安装Janus找了全网没看到有关18.04安装Janus的文档,特此记录,当然最好的文档是官方的编译文档,目录在Janus的Git官网的README.md文件。下文主要记录一下准备环境过程中的坑,有些坑已经避免,所以直接贴出了采坑后的解决方案了。准备环境安装基础必备软件包sudo aptitude install libmicrohttpd-dev lib...
原创
1690阅读
0评论
1点赞
发布博客于 2 年前

webrtc QOS方法六(花屏问题解决方法)

做过视频会议都清楚,当网络出现丢包异常后,经常会导致视频出现长时间花屏问题。严重降低用户体验。测试webrtc发现,视频无论在什么环境,都没有出现花屏现象。若出现丢包,通过掉帧方式解决该问题。最坏的情况就是视频出现卡顿,但是也不会出现花屏。我们都知道视频解码器只管数据解码,不会判断是否是花屏,这个丢包导致花屏问题,只能在调度侧解决,解码器是不处理该异常的。webrtc在收包送到解码器这块流程,...
转载
1108阅读
0评论
0点赞
发布博客于 2 年前

webrtc QOS方法五(帧率调整)

一、框架图二、帧率调控算法根据上图所示,发送端帧率调整算法有两个:1、视频采集帧率与编码器输入帧率之间的FrameDropper算法。2、编码器输入与编码器输出之间的MediaOptimization算法。三、webrtc的帧率如上框架图,webrtc的帧率从左到右,帧率是持递减状态的。摄像头的采集帧率是发送端帧率的极限值。1、摄像头采集帧率视频采集卡帧率能力集,可以通...
转载
1014阅读
0评论
0点赞
发布博客于 2 年前

webrtc QOS方法四(Sender Side BWE)

背景介绍BWE(Bandwidth Estimation)可能是WebRTC视频引擎中最关键的模块了。BWE模块决定视频通讯中可以发送多大码率视频不会使网络拥塞,防止视频通讯质量下降。早期的带宽评估算法比较简单,大多是基于丢包来估计,基本的策略是逐步增加发送的数据量,直到检测到丢包为止。为了让发送端获悉网络上的丢包信息,可以使用标准的RTCP的RR来发送周期性的报告。现代的带宽评估算法则...
转载
1401阅读
0评论
1点赞
发布博客于 2 年前

webrtc QOS方法三(SVC实现)

一、概念SVC(可适性视频编码或可分级视频编码)是传统H.264/MPEG-4 AVC编码的延伸,可提升更大的编码弹性,并具有时间可适性(Temporal Scalability)、空间可适性(Spatial Scalability)及质量可适性(SNR/Quality/Fidelity scalability)三大特性,使视频传输更能适应在异质的网络带宽。二、概述SVC以AVC视频编解码...
转载
592阅读
1评论
2点赞
发布博客于 2 年前

webrtc QOS方法二(FEC实现(待续))

一、概述webrtc冗余打包方式有三种:Red(rfc2198)、Ulpfec(rfc5109)、Flexfec(草案)。其中Red和Ulpfec要成对使用。二、RedFEC简单将old报文打包到新包上。三、UlpFEC将old报文异或新包后,打包新包上。四、FlexFEC将old报文异或新包后,打包新包上。五、使能FECwebrtc默认使能Red+Ulp的FEC。Fle...
转载
775阅读
0评论
0点赞
发布博客于 2 年前

webrtc QOS方法一(NACK实现)

一、概念与NACK对应的是ACK,ACK是到达通知技术。以TCP为例,他可靠因为接收方在收到数据后会给发送方返回一个“已收到数据”的消息(ACK),告诉发送方“我已经收到了”,确保消息的可靠。NACK也是一种通知技术,只是触发通知的条件刚好的ACK相反,在未收到消息时,通知发送方“我未收到消息”,即通知未达。在rfc4585协议中定义可重传未到达数据的类型有二种:1)RTPFB:rt...
转载
1259阅读
0评论
0点赞
发布博客于 2 年前

webrtc QOS方法(汇总篇)

看到一组很有价值分析QOS的文章,特意转载过来 原文:https://blog.csdn.net/CrystalShaw/article/details/80432267 感谢楼主 目前总结出webrtc用于提升QOS的方法有:NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR(动态帧率调整策略)。这几种方...
转载
922阅读
1评论
0点赞
发布博客于 2 年前

WebRTC Native 源码导读(十五):RTP H.264 封装与解封装

选择语言▼本文是 Piasy 原创,发表于 https://blog.piasy.com,请阅读原文支持原创 https://blog.piasy.com/2019/01/01/WebRTC-RTP-Mux-Demux/之前我在为 janus-pp-rec 增加视频旋正功能一文中简单介绍了一点 RTP 协议的内容,重点关注的是视频方向的 RTP header extension,这次我们更...
转载
1056阅读
0评论
1点赞
发布博客于 2 年前

markdown时序图语法

语法- 代表实线 , 主动发送消息,比如 request请求&gt; 代表实心箭头 , 同步消息,比如 AJAX 的同步请求-- 代表虚线,表示返回消息,spring Controller return&gt;&gt; 代表非实心箭头 ,异步消息,比如AJAX请求源码sequenceDiagram Title: md时序图练习 participant 客户端 p...
原创
4427阅读
0评论
0点赞
发布博客于 2 年前

Git 分支命名规范(完)

Git 分支命名规范分支:        命名:        说明: 主分支        master        主分支,所有提供给用户使用的正式版本,都在这个主分支上发布开发分支        dev         开发分支,永远是功能最新最全的分支功能分支        feature-*    新功能分支,某个功能点正在开发阶段发布版本        release-*...
原创
3990阅读
0评论
0点赞
发布博客于 2 年前

正则表达式需要转义的特殊字符

正则表达式中有些字符具有特殊的含义,如果在匹配中要用到它本来的含义,需要进行转义(在其前面加一个\)。下面总结了常见的一些需要转义的特殊字符:$ 匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性,则 $ 也匹配,如‘
’或’\r’。() 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符。* 匹配前面的子表达式零次或多次。+ 匹配前...
转载
2546阅读
0评论
1点赞
发布博客于 2 年前

[C++] explicit 关键字

C++ 只有explicit关键字,没有implicit关键字。编译器允许解析函数的参数时,对参数作隐式转换。也就是说,编译器能够使用带单个参数的构造函数,将函数参数转换为正确的类型。带有单个形参的构造函数定义了一种由实参类型到类类型的隐式转换。下面的类带有可用于隐式转换的构造函数:class Foo{public:    Foo (int foo) : m_foo (foo) ...
原创
121阅读
0评论
0点赞
发布博客于 3 年前

mac下更新vim至最新版本

mac自带vim,但是并不是最新版本,如果我们需要更新vim。 1.安装homebrew,如果已安装则不需要安装,/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"2.安装Vimbrew install vim3.改变vim的别名 ali...
原创
3327阅读
0评论
0点赞
发布博客于 3 年前

Mac下安装ipython3

安装python3brew install python3## 此时,命令行输入python3则打开python3,输入python则打开python2安装ipython3sudo pip install ipythonsudo pip3 install ipython ## ipython3 install配置安装好以后,输入ipython3命令发现没有这个,所以进入到 /us...
原创
1615阅读
0评论
1点赞
发布博客于 3 年前

mac环境boost安装和配置

brew 方式安装安装命令brew install boost安装位置tannzh-mac:~ tannzh$ brew install boost==&gt; Downloading https://homebrew.bintray.com/bottles/boost-1.68.0.mojave.bottle.################################...
原创
2646阅读
1评论
2点赞
发布博客于 3 年前