自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 资源 (5)
  • 收藏
  • 关注

原创 GLSL ES Shader

文章目录ShadingVertex ProcessorFragment Processor变量和类型基础类型数据结构数组限定词存储限定词精度限定词精度的含义不同精度的范围默认精度运算符和表达式运算法强转Vector和Matrix构造Vector构造Matrix构造Vector ComponentsVector and Matrix运算内置函数角度和三角函数指数函数通用函数几何函数矩阵函数数组关系函数纹理查找函数参考如下GLSL_ES_Specification_1.00GLSLangSpec.1.20

2021-04-14 09:55:52 543

原创 MacOS dyld: Library not loaded

库就在当前目录下,但是它不会主动在当前目录下寻找这个动态库,需要指定一下动态库的寻找路径export DYLD_LIBRARY_PATH=library_path,例如在当前目录就直接使用.:export DYLD_LIBRARY_PATH=.dyld: Library not loaded: @rpath/libbabe.dylib Reason: image not foundAbort trap: 6...

2021-03-26 15:22:34 1095

原创 H.264 NALU分隔Annex B和avcC

分隔格式H.264常用的分隔方式有Annex B和avcCAnnex B这种分隔符通常用于视频会议还有文件存储例如TS等用VLC打开avcC格式的视频文件,编码信息中显示H264 - MPEG-4 AVC(part 10)(h264)Annex B的格式如下,start code有可能是{0 0 0 1}或者{0 0 1},{0 0 0 1}通常用于第一个NALU、SPS和PPS,其他地方使用{0 0 1}以减少内存占用([start code] NALU) | ( [start code] N

2021-03-23 18:50:56 3566

原创 Lua第三方库

文章目录luarocks安装使用例子luafilesystempenlightldoc使用规则luarocksluarocks是一个用lua写的包管理工具,类似Mac的终端工具brew,Ubuntu的apt。可以通过luarocks config来查看当前的配置,可以通过Options中的选项修改配置,使用就看Commands。安装$ wget https://luarocks.org/releases/luarocks-3.5.0.tar.gz$ tar zxpf luarocks-3.5.0.

2021-01-22 10:52:16 4128

原创 WebRTC之P2P

文章目录SDP/STUN/TURN/ICESDPSTUN服务端实现客户端实现NAT类型判断TURNTurnServer(TURN服务端)TurnPort(TURN客户端)ICENAT类型完全圆锥形NAT(Full cone NAT)受限圆锥形NAT(Address-Restricted cone NAT)端口受限圆锥形NAT(Port-Restricted cone NAT)对称NAT(Symmetric NAT)SDP/STUN/TURN/ICE对这几种名称进行简单介绍如下:SDP是一种用于描述媒

2020-11-19 11:35:39 3966 1

原创 升级MacOS导致WebRTC无法编译

MacOS升级以后需要重新生成gn文件,遇到如下问题。经过排除是因为find_sdk.py这个文件只会找10的系统。通过命令xcrun --show-sdk-path可以知道当前SDK的版本(查看SDKSettings文件)修改.gn文件的mac_sdk_min选项为当前系统版本:11.0打开find_sdk.py阅读代码发现了只支持10.xx的系统,修改11即可scripts/gen_mac.shERROR at //build/config/mac/mac_sdk.gni:55:5: Sc

2020-11-16 16:17:10 4005 17

原创 异地公积金转入深圳

深圳已经接入全国住房公积金异地转移接续平台,详细信息阅读这里如果被转入的地区也接入了全国住房公积金异地转移接续平台,那么可以直接在广东政务服务网办理网上办理很简单,仅仅需要被转入城市的公积金账号和公司号就可以了...

2020-08-13 10:18:14 311

原创 rtmpdump for WebRTC

文章目录BUILD.gnrtmpdump使用BoringSSLBoringSSL修改BUILD.gn下载$ git clone git://git.ffmpeg.org/rtmpdump为rtmpdump添加GN编译BUILD.gn#----------------------------------------------------# Author: stoneliu@b...

2020-05-08 15:13:19 439

原创 obs mac平台编译

编译Install-Instructions#macos$ git clone --recursive https://github.com/obsproject/obs-studio.git$ brew install qt5$ brew tap homebrew-ffmpeg/ffmpeg$ brew install homebrew-ffmpeg/ffmpeg/ffmpeg --w...

2020-05-07 11:11:01 1145

原创 STUN协议解析

文章目录Message HeaderMessage AttributesMAPPED-ADDRESSRESPONSE_ADDRESSCHANGE-REQUESTERROR-CODERESPONSE-ORIGINOTHER-ADDRESSRFC3478 VS RFC5780RFC3478 NAT类型定义完全圆锥形NAT(Full cone NAT)受限圆锥形NAT(Address-Restricte...

2020-04-17 17:22:56 8062 5

原创 网络基础知识

文章目录私有网络分类网络路由形式单播广播多播TCP/IP模型UDPTCP其他概念以下内容概念全部来自wiki,代码来自WebRTC私有网络IPV4的私有IP定义在RFC 1918RFC1918 规定区块名IP地址区段IP数量分类网络 说明最大CIDR区块(子网掩码)主机端位长24位区块10.0.0.0 – 10.255.255.25516,777,216单...

2020-04-01 18:31:13 597

原创 定位死锁位置(跨平台)

文章目录死锁产生如何定位死锁产生死锁是如此产生的,以下内容引用一个 Linux 上分析死锁的简单方法死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系?统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。 由于资源占用是互斥的,当某个进程提出申请资...

2020-03-11 15:15:09 529

原创 zbar使用

文章目录编译使用其他功能zbar一个开源的C语言实现的条形码和二维码识别库,可以用在任何平台。编译下面给出gn的写法,其他的编译工具,例如ndk和cmake,拿去参考改改就好了。这里还包括了libiconv的编译。# zbar project: https://github.com/ZBar/ZBar# libiconv project: https://ftp.gnu.org/pub/...

2020-02-24 18:33:08 3498

原创 JNI奔溃

文章目录accessed stale WeakGlobal 0xffffffffaccessed stale WeakGlobal 0xffffffff奔溃信息indirect_reference_table.cc:61] JNI ERROR (app bug): accessed stale WeakGlobal 0xffffffff (index 268435455 in a tab...

2020-01-15 18:53:17 7127

原创 JNI实用封装

文章目录获取枚举字段调用构造函数调用静态方法调用对象方法Java String转换为std::stringstd::map转换为Java HashMapJava Map转换为std::map获取枚举字段jclass c = env->FindClass("android/graphics/Bitmap$Config");jfieldID id = env->GetStaticFi...

2020-01-14 17:56:37 1413

原创 H.264和HEVC如何正确的丢帧

文章目录H.264HEVC播放器内部逻辑肯定是存在丢帧的逻辑的,只有丢掉不被依赖的帧才不会导致花屏,RFC中有说明。H.264具体可以参考rfc3984#section-1.3,也就是nal_ref_idc的值为0时,此帧可以被丢弃。NRI: 2 bits nal_ref_idc. A value of 00 indicates that the content of the...

2019-11-05 11:29:26 1925

原创 FFmpeg HLS精准拖动(hls_read_seek)

文章目录hls_read_seekhls_read_packet精准seekhls_read_seek它支持的flag只有AVSEEK_FLAG_BACKWARD和AVSEEK_FLAG_ANY它的工作就是根据当前的时间戳重新选择一个适合的ts文件(URL),主要目的就是设置这两个参数cur_seq_no和seek_timestamp当下次调用hls_read_packet的时候就会调用...

2019-10-30 12:03:37 2436 4

原创 VTCompressionSessionEncodeFrame error code -12902

这个错误原因是Level不匹配导致的,选择一个匹配的Level或者使用AutoLevel即可(例如kVTProfileLevel_H264_Baseline_AutoLevel、kVTProfileLevel_H264_Main_AutoLevel)

2019-07-30 15:41:46 2119

原创 播放器切换后台VideoToolbox的问题

问题切换到后台以后VTDecompressionSessionRef都会变得不可用,从后台切换到前台需要重建Session重建Session是需要时间的,这个时间大概是0.5~2s左右,并不是一个固定的值重建后的VTDecompressionSessionRef并不能从之前位置继续解码,只有从关键帧位置开始解码才是正常的解码解决方案| i1 | p1 | p2 | p3 | p4 |...

2019-05-23 11:30:44 1216

原创 WebRTC之H.264打包RtpPacketizerH264

文章目录RFC6184协议协议中的缩写打包模式和负载结构介绍NALU HDR(NAL单元头部)STAPMTAPFURtpPacketizerH264代码分析WebRTC中的打包模式和包结构代码分析要读懂这部分代码需要知道RTP打包协议相关的知识,具体可以阅读相关RFC文档-RFC6184 RTP Payload Format for H.264 VideoRFC6184协议由于受到MTU限制...

2019-03-28 16:56:54 2655

原创 RemoteBitrateEstimatorAbsSendTime起始阶段探测带宽失败

使用RemoteBitrateEstimatorAbsSendTime的时候发现刚刚开始会出现大量的Probe failed, sent at这样的打印,然后打印等级是Info(这个等级的打印说明问题不大),但是还是看了一下代码了解一下是什么原因导致的。这个是因为收到的包过于密集导致的,出现大量的接收或者发送的包间隔不到1毫秒(ComputeClusters函数)。当且仅当发送间隔和接收间隔都...

2019-03-26 18:44:23 747

原创 xcode could not launch

xcode突然遇到了xcode could not launch的问题,编译和部署都成功了,但是启动失败,Google搜索到结果普遍都是说签名问题(确实是签名问题),然后照着做修改工程签名,自动签名,都没有解决问题。我做了如下验证没有解决问题:没有解决问题的验证修改Code Signing Identity的iOS Developer为iOS Distribution取消自动签名Cod...

2019-03-25 12:25:44 1706

原创 为WebRTC引入libuv-编译

我目前仅仅在Mac上测试过而已(编译了它所有的测试Demo),需要编译的文件是参考它里面其他的编译脚本写的,所以就是以gn格式抄一遍而已。编译静态库libuv,并public了它的头文件目录写了一个可执行程序的模板,可以编译所有的测试Demo目前仅仅在Mac平台测试了一下可行而已,其他平台参考改一下就好了#----------------------------------------...

2019-03-12 19:21:13 454

原创 WebRTC之RTCP

文章目录RTCPSR(Sender Report RTCP Packet)RR(Receiver Report RTCP Packet)SDES(Source Description RTCP Packet)BYE(Goodbye RTCP Packet)APP(Application-Defined RTCP Packet)RTPFB(Transport layer FB messages)[N...

2019-03-01 10:59:33 3514 3

原创 WebRTC之Module

WebRTC中存在一些需要定时且重复的任务,所以就抽象出了Module这个任务类和ProcessThread这个定时执行任务的线程封装类。用到定时任务的模块有(不完全列举)NackModule 视频nack处理模块Pacer 平滑发送模块RtpRtcp rtprtcp模块BitrateController 码率控制模块VideoSender 视频发送模块VideoReceiver 视...

2019-02-25 12:08:27 1174 1

原创 WebRTC之视频NackModule

NackModule一个包的最大请求次数是10次,最大请求时间是10*rtt,在这个时间内还没有获取到丢失的包则不再请求对外提供的接口如下,源码int OnReceivedPacket(const VCMPacket& packet);void ClearUpTo(uint16_t seq_num);void UpdateRtt(int64_t rtt_ms);void Cle...

2019-02-25 12:08:20 967

原创 WebRTC之RTT计算

关于Report Block详情可以阅读6.4.1 SR: Sender Report RTCP Packet 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ...

2019-02-25 12:08:13 1395

原创 WebRTC之RTP包

RTP固定头部RTP的固定头部,详情可以阅读rfc文档5.1 RTP Fixed Header Fields 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-...

2019-02-25 12:08:06 2479

原创 WebRTC之RateStatistics

RateStatistics就是一个用于计算最近一段时间内(max_window_size_ms)的带宽,scale是对带宽进行缩放,目的是为了得到bits/s为单位的带宽。例如max_window_size_ms是1000,那么scale就是8000|bucket1|bucket2|bucket3|bucket4...Update更新数据,数据第一次进来(大小和时间戳),那么记录此时的时...

2019-02-25 12:06:58 806

原创 findclass

findclass在Android平台中只允许在主线程(UI)中使用,所以我们要在其他线程中使用只能一次性findclass所有的class,并生成一个Global的引用。这样我们就可以在其他线程(如果是非Java线程,需要AttachCurrentThread一下)使用找个class的全局引用了。ClassReferenceHolderWebRTC封装的一个类,可以拿出来在其他地方使用。...

2019-01-30 10:54:21 1145

原创 go访问c数组.md

Go没有指针算术,所以它不能访问这样的指针pointer[index],因为这意味着*(pointer + index)。另一个原因是指针不包含索引的限制,如果这样的访问是允许的意味着无约束的内存访问成为可能。参考来源例子/*#include <stdlib.h>struct A { int a;};int fun(struct A** a){ str...

2019-01-02 19:13:45 470

原创 webrtc服务器搭建

两年前写的笔记,可能有些链接和方式已经不对了,自己评估!文章目录名词解释概要房间服务、信令服务、ICE(STUN、TURN)服务、Web服务的安装与配置房间服务 安装与配置安装信令服务turn服务参考扩展阅读other名词解释realm: 用于描述服务器或服务器中的上下文的字符串。realm告诉客户端使用哪个用户名和密码组合来认证请求用于描述服务器或服务器内的上下文的字符串。alloca...

2018-12-21 10:21:33 15442 2

原创 图片Scale(YUV/RGB)

文章目录Why ScaleScale方案libyuv的实现前几天被问到一个问题,相机直接采集480p的图片和采集720p的图片Scale为480p的图片谁更清晰一些。我当时的回答是直接采集出来的480p图片清晰一些,因为相机采集到的yuv格式本身就是有损的(贝尔格式转换为YUV格式),720P转480P也是有损的。很明显这并不是对方需要的答案。相机采集480P的图片和采集720P的图片FOV也不...

2018-11-12 18:36:13 4447

原创 创建一个RGB的CVPixelBufferRef

iOS的编码器仅仅支持CVPixelBufferRef的输入,常规的做法是从编码器Session的PixelBufferPool拿到一个CVPixelBufferRef,不过它的格式NV12(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange或者kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange)这两种形式。我们...

2018-06-14 14:54:20 3675

原创 为WebRTC添加amr支持

业务需要支持amr编解码,由于我本身是基于WebRTC和FFmpeg开发的,所以就给WebRTC添加一下对amr的支持,直接看BUILD.gn文件吧。opencore-amr的版本是0.1.5,项目地址opencore-amr。具体怎么使用看各自业务需求,可以直接在FFmpeg中使用,稍微修改一下WebRTC中的FFmpeg即可对amr的支持了BUILD.gn通用的配置amr_con...

2018-06-14 10:44:58 4551

原创 ffmpeg configure配置选项

帮助选项Help options标准选项Standard options许可证选项Licensing options配置选项Configuration options程序选项Program options文档选项Documentation options组件选项Component options个别组件选项Individual component options扩展库支持Extern

2017-09-20 18:20:16 21441 5

原创 jni: bad arguments passed to 错误

最近遇到了一个bad arguments passed to的崩溃,这个是art那边的打印reflection.cc#434,在参数解析的时候出现了问题,是参数不对导致的。结合上一个log就能快速知道具体是那个参数的类型不对。参数无法解析LOG(ERROR) << "Internal error: unresolvable type for argument type in JNI invoke

2017-09-14 14:01:44 1885

原创 Android NDK下载(r10~ r26d) 持续更新

鉴于有些人不能上官网,所以复制下来给需要的人。r10d[Windows]http://dl.google.com/android/ndk/android-ndk-r10d-windows-x86.exehttp://dl.google.com/android/ndk/android-ndk-r10d-windows-x86_64.exe[Mac OS X]http://dl.google.

2017-06-29 14:30:23 51584 13

原创 MP4v2 Android

MP4v2mp4v2是一个开源项目,为操作mp4文件提供了一套强大的API。mp4v2提供了一套基于ISO/IEC 14496-1:2001标准的mp4格式文件的创建和修改的API,这个媒体容器被广泛的使用,具有很好的兼容性。mp4v2支持的视频格式有H.264、H.263、H.261、MPEG4、JPEG、YUV12,支持的音频格式有AAC、MP3、AC3、ARM-NB、ARM-WB、G.711

2017-06-29 14:18:01 2037

原创 protobuf android ndk makefile

直接把BUILD的内容拿来重新组织一下而已Application.mkAPP_ABI := armeabi-v7a #(32_bit(armeabi armeabi-v7a x86 mips), 64_bit(arm64-v8a x86_64 mips64))APP_PLATFORM := android-9 # "2.3" (3~25)APP_STL

2017-02-27 12:05:12 1164

android 4.4.2 sdk源码

打开Eclipse -> 随便找一个工程点击一个关键字Ctrl+左键 -> Add Source -> Add Folder -> 找到刚刚下载的Source -> 确定 -> 完成。 因为已经添加过了以上流程根据印象写的。

2014-12-11

linux64 gn文件

webrtc中的Linux64版本的gn文件和clang-format文件

2017-05-04

elecard_hevc_analyzer

elecard的H.265分析工具

2016-07-22

Visual Assist X10.9.2212完美破解版

Visual Assist X 10.9.2212 最新版 破解版 替换VA_X.dll即可

2018-07-17

adb 1.0.32

adb 1.0.32

2016-07-05

空空如也

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

TA关注的人

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