自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(380)
  • 资源 (2)
  • 收藏
  • 关注

原创 SRTP + RTCP + SCTP

SRTP RTCP SCTP

2024-04-13 16:27:17 411

原创 R.swift & SwiftGen 资源使用指南

拖动当前 Run Script Phase 到 Check pods Manifest.lock 和 Compile Sources 之间。拖动当前 Run Script Phase 到 Check pods Manifest.lock 和 Compile Sources 之间。在Xcode 中 新建一个 R.generated.swift 文件 位置在 项目根目录 即 当前项目文件夹下。在项目根目录下创建 swiftgen.ym 文件。在项目根目录下创建 swiftgen.ym 文件。

2024-01-19 18:37:48 790

原创 Xcode Build Script path

如果你需要引用脚本所在的“当前目录”,在 Shell 脚本中,你可以直接使用 . 来表示当前目录,或者使用 $(pwd) 来获取当前目录的完整路径。不过,在 Xcode 的 Build Script 中,通常更倾向于使用这些特定的环境变量,因为它们能够提供更准确和一致的路径信息,特别是在复杂的项目结构中。关于表示当前路径的变量,Xcode 提供了一系列环境变量来引用不同的路径和设置。例如,如果你想引用位于项目根目录下的一个脚本,你可以使用${SRCROOT}/path/to/script.sh这样的路径。

2024-01-18 16:03:08 409

原创 epoll 原理

epoll = 链表 + 红黑树 + 回调函数机制。epoll 实现的原理。

2024-01-15 09:42:03 370

原创 Could not find ‘rexml‘ (~> 3.2.4) - did find: [rexml-3.1.9.1] (Gem::MissingSpecVersionError)

添加到。

2023-10-24 18:58:05 323

原创 kCVPixelFormatType_32BGRA 格式的CMSampleBuffer sampebuffer 如何转化为 AVFrame

这是因为图像数据在内存中不一定是连续存储的,特别是当图像的宽度不是内存对齐的倍数时。为了提高内存访问性能,图像每行的末尾可能会有一些填充字节,使得每行都对齐到某个字节边界(如4字节或8字节边界)。它可能等于图像宽度乘以每像素的字节数(对于BGRA是4字节),也可能更大,取决于是否有填充字节。而是需要逐行拷贝数据,确保每行的数据都被正确地复制到AVFrame中。简而言之,逐行拷贝是为了确保正确处理任何可能存在的行填充,并确保AVFrame的数据布局与CMSampleBuffer匹配。

2023-09-21 15:09:41 232

原创 WebRTC 的多媒体音视频帧传输协议

创建自定义的媒体源:对于视频,你可以创建一个类,该类继承自 VideoSourceInterface。此接口提供了将视频帧输入到 WebRTC 系统的方法。对于音频,你可以创建一个类,该类继承自 AudioSourceInterface。输入数据到你的媒体源:一旦你有了自定义的媒体源,你需要有一种方法将数据(如音视频帧)输入到这些源中。你可能会从外部设备、文件、网络流或其他来源获取数据。创建自定义的接收器:对于视频,你需要实现一个与 VideoSinkInterface 相关的类。

2023-09-18 09:01:51 396

原创 WebRTC 如何指定 H265解码器

WebRTC 本身支持多种视频编解码器,但 H.265/HEVC 编解码器的支持主要取决于浏览器或应用的实现。不过,如果你确定你的 WebRTC 实现和对端支持 H.265,可以通过修改 SDP 来优先选择 H.265 编解码器。当你创建或接收一个 offer 或 answer 时,你将会得到一个 Session Description,也叫做 SDP (Session Description Protocol)。搜索 SDP 中与 H.265 有关的 “m=” 行。设置修改后的 SDP。

2023-09-12 19:43:23 577

原创 WebRTC 源码 编译 iOS端

这将为 ARM64 架构(最常用于现代 iOS 设备)编译 WebRTC。如果你需要为其他架构(如 x86_64,用于模拟器)编译,你可以通过调整。使用 git 克隆 depot_tools 并将其添加到你的 PATH 中: /path/to/depot_tools 替换为自己的路径。如果 fetch --nohooks webrtc_ios 拉取代码太多 失败可以改为 就可以了。你可以将此框架添加到你的 Xcode 项目中,并根据需要使用其 API。一旦编译完成,你会在。

2023-09-11 19:13:44 962

原创 WebRTC +Signal + ICE

在 WebRTC 中,ICE(Interactive Connectivity Establishment)服务是用于解决网络地址转换(NAT)和防火墙障碍的关键组件。

2023-08-17 20:34:09 679

原创 解析 WebRTC

初始化WebRTC会话:在使用WebRTC之前,需要初始化WebRTC会话,以确保WebRTC框架的正确设置和配置。初始化步骤通常包括以下内容:创建PeerConnectionFactory:通过创建PeerConnectionFactory来初始化WebRTC会话,它负责管理音视频工厂和创建PeerConnection。配置媒体约束:在创建PeerConnection时,可以设置媒体约束来指定音视频的参数,如分辨率、帧率、码率等。

2023-07-25 14:20:56 921

原创 UnsafePointer, UnsafeMutablePointer, UnsafeBufferPointer, UnsafeMutableBufferPointer, UnsafeRawPoint

用途:UnsafeMutableRawPointer 用于以原始的字节形式访问可变内存,没有类型信息,适合用于与 C API 交互。用途:UnsafeRawPointer 用于以原始的字节形式访问内存,没有类型信息,适合用于与 C API 交互。用途:UnsafeRawBufferPointer 用于以原始的字节形式访问连续的不可变内存缓冲区。C/C++ 中对应:常规数组或指向不可变数据的指针。C/C++ 中对应:指向可变数据的数组或指针。C/C++ 中对应:指向不可变数据的指针。

2023-07-20 18:08:33 455

原创 deinitialize 和 deallocate 区别

deinitialize() 和 deallocate() 是 Swift 中用于处理原始内存的函数,但它们有不同的作用和用途。

2023-07-20 17:40:41 84

原创 Swift 中 Actor、 AnyActor 、 MainActor 、GlobalActor 异同点 和 用法

在 Swift Concurrency 中,有几个与 Actor 相关的特性和协议,包括 Actor、AnyActor、MainActor 和 GlobalActor。它们都是用于并发编程和处理异步任务的特殊类型和特性。

2023-07-20 16:03:41 468

原创 Swift Actor

通过使用 Actor,你可以将数据和操作封装在一个单独的执行上下文中,并保证它们在同一时间只能被一个任务访问和修改。这样可以避免多线程并发导致的数据一致性问题。这样,任何在 actor 中定义的代码都会在同一个队列上串行执行,确保数据的线程安全性。数据保护:通过将数据封装在 actor 中,并通过 await 和 async 来访问和修改数据,可以确保数据在多线程环境中的安全访问。通过将数据和操作封装在 actor 中,并使用 await 和 async 来访问和修改数据,可以实现更安全和可靠的并发处理。

2023-07-20 15:49:05 321

原创 网络穿透 P2P 穿透 UDP打洞、TCP打洞 原理

网络穿透 P2P 穿透 UDP打洞、TCP打洞 原理

2023-07-11 11:52:15 3101

原创 error in Xcode File not found:odeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a

解决办法:

2023-06-01 18:03:17 168

原创 java 实现开启异步线程的几种方式

需要注意的是,无论使用哪种方式,都应该根据具体情况选择合适的线程池和调度器,以确保异步操作在适当的线程上执行,并在需要更新UI时切换回主线程。在Java中,有多种方式可以实现异步线程以避免在主线程中执行耗时操作导致界面卡顿的问题。

2023-04-14 08:17:39 2673

原创 C++ 智能指针 实现代码

智能指针的底层实现是通过 C++ 标准库提供的模板类来实现的,其中包含了一些与对象管理和资源释放相关的成员函数和成员变量。用于记录有多少个智能指针共享同一个对象。通过在构造函数、拷贝构造函数、析构函数和赋值运算符中更新引用计数,并在引用计数为零时释放资源,从而实现了对对象生命周期的管理。上面的实现是一个简化版的智能指针,它包含了一个裸指针。用于指向动态分配的对象,一个引用计数。

2023-04-14 08:13:16 178

原创 C++ 虚函数表

派生类的虚函数表会继承基类的虚函数表,并可以通过重写虚函数来修改其中的函数指针,从而实现对虚函数的覆盖。当子类继承自父类并且覆盖(override)了父类的虚函数时,子类会在自己的虚函数表中存储覆盖后的函数指针,而不会影响到父类的虚函数表。父类的虚函数表中包含了父类的虚函数,子类的虚函数表中包含了子类的虚函数,以及可能的新增虚函数。当一个对象调用虚函数时,首先会通过对象的虚函数表指针找到虚函数表的地址,然后根据函数在虚函数表中的索引找到对应的函数指针,最后通过函数指针进行函数调用。

2023-04-13 23:33:14 636

原创 C++ 开启异步任务的几种方法

在 C++ 中,可以使用多种方式来开启异步任务,以便在程序执行过程中可以同时处理多个任务而不会阻塞主线程。

2023-04-13 23:24:49 826 1

原创 LLVM 的中间代码(IR) 基本语法

LLVM 的中间代码(IR) 基本语法

2023-03-27 15:49:19 2285 1

原创 新一代高效视频编码H265/HEVC(笔记-1)

H265 NALU 结构

2022-12-06 16:49:38 222

原创 Import Local Swift Package No such module TestPackage

Import Local Swift Package No such module TestPackage

2022-11-02 23:05:53 489

原创 bluetooth protocol stack for iOS

bluetooth protocol stack

2022-08-27 17:21:54 131

原创 Delete Android Virtual Device for mac

Delete Android Virtual Device for mac

2022-07-14 12:20:15 561

原创 NSObject、Class 、objc_class 、objc_objct、 isa_t

NSObject Class objc_class objc_object isa_t

2022-06-03 20:39:36 112

原创 Error: Failed to download metadata for repo ‘epel‘: Cannot download repomd.xml: Cannot download repo

华为云CentOS 8.1系统:参考配置Yum源(CentOS 8.1)配置Yum源

2022-05-31 09:45:09 5209 2

原创 UICollectionView received layout attributes for a cell with an index path that does not exist

Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘UICollectionView received layout attributes for a cell with an index path that does not exist: <NSIndexPath: 0x28223ea40> {length = 2, path = 0 - 1}’open func ins

2021-08-10 11:14:09 559

原创 Command MergeSwiftModule failed with a nonzero exit code (Xcode12.5.1)

error:Command MergeSwiftModule failed with a nonzero exit codeMergeSwiftModule normal arm64 (in target ‘xxxx’ from project ‘Pods’)<unknown>:0: error: circular reference<unknown>:0: note: through reference here<unknown>:0: note: throu

2021-07-07 16:59:07 1733 1

原创 Frida-ios-dump 使用

安装 Frida-ios-dumphttps://iosre.com/t/frida-ios-dump/11640brew install pythonbrew install wget安装pip:wget https://bootstrap.pypa.io/get-pip.pysudo python3 get-pip.py安装usbmuxd:brew install usbmuxdrm ~/get-pip.py安装frida for macsudo pip install

2021-05-15 10:43:01 401

原创 dumpdecrypted 使用

手机安装文件 openssh app file Conduit ///查看 运行程序路径ps -Adumpdecrypted.dylib 编译make 修改 make的CFLAGS = -target arm64-apple-ios8.0签名ldid -S dumpdecrypted.dylib放入路径文件中放入var/root///动态库在注入路径DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/A

2021-05-15 10:41:58 304 2

原创 dumpdecrypted.dylib: code signature in (dumpdecrypted.dylib) not valid for use in process using Libr

yld: warning: could not load inserted library 'dumpdecrypted.dylib' into hardened process because no suitable image found. Did find: dumpdecrypted.dylib: code signature in (dumpdecrypted.dylib) not valid for use in process using Library Validation: mappe

2021-05-14 14:33:56 375

原创 dumpdecrypted Symbol not found: ___chkstk_darwin

dyld: Symbol not found: ___chkstk_darwin Referenced from: dumpdecrypted.dylib (which was built for iOS 14.5) Expected in: /usr/lib/libSystem.B.dylib in dumpdecrypted.dylib修改 MakefileCFLAGS = -target arm64-apple-ios8.0链接

2021-05-14 14:31:53 753

原创 completely unsigned? Code has to be at least ad-hoc signed

not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.解决办法链接

2021-05-07 20:13:40 825

原创 Metal iOS deployment target

Set iOS deployment target -mios-version-min= "10.0"

2021-04-20 14:29:22 142

原创 “You do not have permission to open the application “

标题你没权限来打开应用程序You do not have permission to open the applicationException Type: EXC_CRASH (Code Signature Invalid)Exception Codes: 0x0000000000000000, 0x0000000000000000Exception Note: EXC_CORPSE_NOTIFYTermination Reason: Namespa

2021-03-30 10:26:00 3360

原创 CMTimeRange start 不要单独去改变 start 而是从新赋值给 CMTimeRange

在做 视频轨道编辑的时候 使用了CMTimeRange在改变 CMTimeRange.start的时候 遇到了坑可能是自己理解错了 只改变了CMTimeRange 的start发现自己需要的TimeRange 不对 我猜测 duration是没有发生改变的 改变的只是起始时间 总的时间没有发生改变记录一下 后续使用CMTimeRange 直接 整体赋值 不单独使用 start 和 duration...

2021-01-12 20:28:00 184

原创 Errors were encountered while preparing your device for development. Please check the Devices

Errors were encountered while preparing your device for development. Please check the Devices and Simulators Window解决办法:可能和TypeC 的驱动有关iphone手机关机 重启

2021-01-08 10:28:33 1562

原创 DYPShaderDebuggerErrorDomain:1 “Failed to find library source“

DYPShaderDebuggerErrorDomain:1"Failed to find library source"Library source required.Under the target's Build Settings, ensure the Metal Compiler Build Options produces debugging information and includes source code.If building with the 'metal' comm

2020-12-16 18:12:58 340

01-ffmpegSaveFile

音视频编解码

2019-01-21

c 语音深度解剖

2016-08-22

空空如也

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

TA关注的人

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