自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 物联网通信之Coap 协议

物联网通信之Coap 协议文章目录物联网通信之Coap 协议Coap 简介协议特点工作模式请求方式消息类型HTTP和CoAP 之间的对比Coap 和MQTT 之间的对比Coap 简介名为受限制的应用协议,是UDP上的应用层协议。适用于小内存,低处理和低存储能力的设备。传输内容小巧精简,对于较大的数据可分块传输。客户端可以发送观察者请求,仅当被观察的数值变化时服务器才传回客户端新数值。协...

2019-01-03 16:56:00 8932 1

原创 物联网之MQTT 协议

物联网之MQTT 协议文章目录物联网之MQTT 协议Mqtt 协议框架定义订阅(Subcription)主题(Topic Name)服务质量(Quality of Service,QoS)主题过滤器 (Topic Filter)会话(Session)控制报文 (MQTT Control Packet)发布(Publish)Mqtt 协议框架定义QTT是基于二进制消息的发布/订阅编程模式的...

2019-01-03 16:50:57 4037 1

原创 读iOS核心动画高级技巧

iOS 核心动画知识小结文章目录iOS 核心动画知识小结布局、锚点、坐标系Mac 开发中的坐标翻转图层中圆角、蒙版的使用图层的之间的过度动画CAShapeLayerCAGradientLayerCATiledLayerCABasicAnimation实例化设定动画CAKeyframeAnimationCAAnimationGroup 的使用动画过程中取消动画高效绘图操作软件绘图矢量图形图像IO...

2019-01-03 16:49:32 817

原创 Runtime源码解析和实战使用

文章目录Runtime-源码分析类的结构体对象的初始化消息的发送机制objc_msgSend 工作原理消息转发机制实战使用Runtime 为类别动态添加属性类的属性实现原理类别中直接添加属性剖析使用runtime 为类别添加属性Runtime 实现方法交换Method Swizzle 实现的原理Methoad swizzle 实现代码Runtime-源码分析1.类的初始化 在外部是如何实现的...

2019-01-03 16:47:25 1010

原创 基于ijkplayer 添加RTMPS 协议支持

基于ijkplayer 添加RTMPS 协议支持最近有一个推流到Facebook 的需求,翻过了墙之后发现Facebook 和youtube 的直播协议都是基于RTMPS 的,这个和国内bilibili 等直播网站提供的RTMP 协议是不一致的。于是开始了新协议支持的探索,目前RTMPS 协议已完成支持,总结如下,以便将来举一反三。探索在ijkplayer 中,ffmpeg 协议支持都是通过进行裁剪来进行支持的。从./config/module.sh 中我们可以看到当前ijkplayer 对协议的支

2020-12-08 14:52:06 689 3

原创 H264 SPS/PPS 分析

9816B H264文件分析H264文件对应的SPS参数如下图:

2020-09-19 17:16:44 2364

原创 iOS 硬编码

文章目录iOS 硬编码编码session 的创建iOS 硬编码iOS 硬编码简单的总结来说就是将采集到的CMSampleBufferRef编码成H264或者是H265,对编码完成后的数据最后进行合成等工作用以实现自己不同的需求。编码的主要步骤可分为以下几个步骤:创建编码用的session设置编码的参数等待数据进行正式编码工作处理编码完成的数据总结的步骤是比较简单的,但是在各个步骤中有几个比较重要的点需要注意,下面在代码中逐步进行指出编码session 的创建...

2020-08-13 17:40:50 491

原创 使用libavfilter 为实时流添加滤波

使用libavfilter 为实时流添加滤镜添加滤镜一般是使用FFMpeg进行滤镜添加,在ffmpeg 中提供了libavfiler库来完成该操作。而添加滤镜的基本操作如下图(引用自雷神):从上图我们可以清楚的看到,滤镜的加载和解码部分几乎是完全独立的,现在我大致的用文字描述一下步骤。注册滤镜信息。创建滤波器主结构体,用于整合所有的滤波过程。创建滤波器输入、输出或者其他复杂滤波。解析字符串,并构建该字符串所描述的滤波图提交滤波器接下来上代码: // 1.初始化滤波器结构

2020-08-08 17:01:43 536

原创 iOS软解码总结

文章目录iOS 软解码总结读取数据解码数据初始化`AVCodecContext`寻找I 帧解码数据iOS 软解码总结在iOS 上,开发者可通过VideoToolbox实现硬解码,其具体的步骤可见iOS 硬解码总结。本文讲的是使用FFMpeg 进行视频流的软解码过程,本文的demo在github上可见。为方便理解,我把软解码整个过程分为几个步骤,第一是读取,第二是解码,第三是渲染。读取数据读取数据我将其分为如下几个步骤:注册编解码器解析地址/文件,得到AVFormatContext解析AVF

2020-08-04 18:03:22 519

原创 深入剖析ijkplayer解码过程

方法汇总1.alloc 操作:初始化ffmpeg的配置参数,创建渲染所用的EGLView,获取音频播放权限,注册前后台切换通知等。2.prepareToPlay操作:创建音频输出,调用stream_open方法3.stream_open 操作: 创建音视频队列,创建read_thread线程至此,后续的所以音视频相关操作都在read_thread方法中进行.4.read_thread操作: 在读取方法中,进行了基本的ffmpeg 解码操作。avformat_open_input 初始化avfo

2020-08-04 14:50:03 2041

原创 iOS Transport 上传慢解决办法

有些时候上传ipa巨慢,一直卡在正在验证…,简直慢到怀疑人生,然后在网上找了一些解决方案,经过尝试,下面提供一种最快的解决方式。使用链接中的文件夹替换Transport app 的缓存文件夹重新提交ipa等待几分钟左右即可看到正在上传.百度网盘链接: Transport提取码: degy...

2020-07-22 16:30:35 1518 2

转载 iOS SDK开发过程中category依赖问题

本文章为转载,18年做项目框架解耦的时候,解耦后的静态库中的category就出现无法被链接的问题,最近开发过程中又出现了该问题,一下又想不起来,立个帖子记录一下。我们常用的设置Other linker flags也无法解决依赖问题,需要另外设置静态库的Perform Single-Object Prelink配置为YES.https://blog.csdn.net/sinat_34121234/article/details/79084402...

2020-07-22 16:17:01 280

原创 使用FFMpeg实现实时推流功能

在音视频开发中,FFMpeg 就是全能型工具的代名词。要实现该功能,我建议先熟悉一下通过FFMpeg实现本地文件推流功能,地址见:最简单的基于FFMpeg 的推流功能本文主要为改装成实时流推流功能提供思路。推流操作从乎用户层面可简单分为以下几个步骤:1.开始推流2.推流中3.结束推流在开始推流的时候,关键的几个事情就是1.标记RTMP 推流状态为开始2.使用avformat_alloc_output_context2 输出FLV 格式数据到指定的地址3.使用AVIO_OPEN和RTM

2020-07-19 17:45:18 2829

原创 FLV Video解析

Flash Video 简称FLV,目前国内大部分视频分析网站都是采用这种格式。它的主要是由 File Header + File Body 构成。 如下图所示FLV Header 构成字段字节数描述Signature3固定字节 0X46 4c 46 对应ASCII 的FLVVersion1版本号TypeFlags1类型标识。 前5个bit是类型标志预留字段,必须是0; 第6个bit音频类型标志(TypeFlagsAudio); 第7个bit是类型标志

2020-07-19 15:10:51 2108

原创 iOS硬解码总结

文章目录iOS 解码总结iOS 硬解码数据转换初始化Session 和解码器配置解码iOS 解码总结在iOS 中解码从解码方式来讲,可以分为硬解码 和 软解码硬解码: 由显卡核心的GPU 来对视频数据进行解码工作软解码: 由CPU 来进行解码画质性能内存消耗支持格式流畅度总耗能硬解码高优低少好低软解码高差高无限制坏高iOS 硬解码在iOS中使用硬解码是有系统提供的接口来完成的,即VideoToolbox框架。硬解码的主要流程

2020-07-18 16:08:29 1918

原创 H264 封装格式解析

H264 封装格式解析H264 有两种封装格式,分别是:annexb 格式AVCC 格式Annexb 格式annexb 有0x00000001 或者 0x000001 开头,作为每一个NALU单元的分割标志,也常常被称为startCode.在H264 中 ,数据格式有指定的值:0x67 = SPS,0x68 = PPS,0x66 = SEI,0x65 = IDR,用在实时流传输AVCC视频开始有 SPS/PPS每个NALU 前有存储NALU 的长度使用在MP4

2020-07-18 13:45:38 668

原创 FFMpeg 常用命令

H264 转 MP4ffmpeg -i 1test.h264 -vcodec copy -f mp4 test.mp4从MP4 中提取H264ffmpeg -i 2018.mp4 -codec copy -bsf: h264_mp4toannexb -f h264 tmp.264将mp4 转为flv文件格式ffmpeg -i source.mp4 -c:v libx264 -ar 22050 -crf 28 destinationfile.flv...

2020-07-18 11:30:23 518

原创 基于ijkplayer在FFMpeg 中增加丢包数显示功能

文章目录基于ijkplayer在FFMpeg 中增加丢包数显示功能基于ijkplayer在FFMpeg 中增加丢包数显示功能目的: 在我们目前的应用场景中,使用ijkplayer 来进行RTSP 的拉流解码播放。但是我们设备端在传输层中并没有部署RTCP 的控制协议实现,所以无法对数据传输的丢包数进行反向收集,那就需要APP端对数据长度进行校验。方案:因为我们使用RTSP 数据传输协议,在ijkplayer 中,数据处理完全是交由FFMpeg来进行的,对上层和ijkplayer的SDK 层而言,收

2020-07-17 23:22:33 353

原创 iOS实现耳返功能

文章目录iOS实现耳返功能iOS实现耳返功能实现iOS 耳返的功能可以通过AudioUnit来进行实现。实现的步骤如下:创建AudioSession获取硬件的权限在iOS的音视频开发中,使用音频回话需要创建一个AudioSession,用于管理与获取iOS设备的音频信息。AVAudioSession *session = [AVAudioSession sharedInstance...

2020-02-13 21:09:19 2413

原创 iOS 消息转发机制

iOS 消息转发机制文章目录iOS 消息转发机制名词描述调用方法试用场景调用实例方法调用类方法差异性总结名词描述消息转发机制: 在iOS 中,当用户向某个类发送消息,即调用objc_msgSend 时 ,所接受的类不具备该方法,按照runtime的机制,则会向该类的父类传递该方法,直到NSObject类。调用方法试用场景上述的消息转发机制是在runtime 内部中实现的,那我们要自己实...

2020-01-12 13:30:17 287

原创 iOS 蓝牙设备

文章目录iOS 蓝牙设备一、 蓝牙管理类的初始化二、检查外部蓝牙设备是否可用三、开始扫描蓝牙设备四、结束蓝牙设备扫描四、连接指定设备五、连接蓝牙设备后接收蓝牙服务1.发现服务后回调订阅指定`Service`的特征2. 发现订阅的特征触发方法3.当设备特征值变化时触发方法(read 和notify 状态)4.给设备写入数据成功触发方法iOS 蓝牙设备一、 蓝牙管理类的初始化CBCentralM...

2020-01-12 13:25:34 1683

原创 iOS 手动实现奔溃信息收集

iOS 手动实现奔溃信息收集在日常的开发工作中,App 在不同的用户会出现不同的应用场景,为了提高App 的可靠性和稳定性,我们可能需要收集一些用户在使用App 时出现的crash 报告,下面的功能就是收集用户在日常使用中出现crash 的具体措施,你只需要将对应的NSException解析后组装成你所需要的内容上传到服务器后,通过服务器数据结合本地文件即可进行crash 问题的定位。一、系统...

2020-01-12 13:24:20 247

原创 读OpenGL ES3.0(一)

https://app.yinxiang.com/shard/s71/nl/14389767/3858ca83-6214-4a10-b516-d5964c68c5bb?title=%E8%AF%BBOpenGL%20ES2.0

2020-01-12 12:41:08 300

原创 iOS ijkplayer 学习

文章目录iOS ijkplayer 源码学习一、初始化流程二、核心代码2.1 数据读取2.2 音视频解码2.2.1 视频解码方式的选择2.2.2 音视频解码iOS ijkplayer 源码学习ijkplayer 在iOS 中的调用主要是通过其IJKFFMoviePlayerController 控制器来完成,其中设置SDLView等界面适配可见具体的参数设定。本文章主要是用于将自己所学习到的知...

2019-09-07 15:45:00 626

原创 iOS crash 定位方式

文章目录iOS crash 定位方式1. symbolicatecrash 定位2. atos 定位iOS crash 定位方式1. symbolicatecrash 定位在iOS 中系统提供了开发者对 iOS 系统运行产生的.crash文件进行符号化的工具,也就是symbolicatecrash.下面我会列举具体的一个操作实践步骤:在mac 中找到该symbolicatedcras...

2019-06-28 17:06:22 1052

原创 iOS的monkey 测试

iOS Monkey测试

2019-06-23 14:07:05 2603 2

原创 HandleTread学习

HandleThread学习//创建一个线程,线程名字:handler-thread handlerThread = new HandlerThread( "handler-thread") ;//开启一个线程 handlerThread.start();//在这个线程中创建一个handler对象handlerCapture = new Handler( handlerThread....

2019-01-03 17:30:34 233

原创 广播service 和activity 之间的通信

广播service 和activity 之间的通信文章目录广播service 和activity 之间的通信静态注册动态注册在avtivity 里面创建内部的广播接收者 broadcastReceive动态注册的时候一定要先注册注意在静态注册的时候因为是内部类,所以内部类在声明时一定要写成静态内部类 (加上static))静态注册private WiFiConnectChanged...

2019-01-03 17:28:10 942

原创 雷神FFMpeg源码学习笔记

雷神FFMpeg源码学习笔记文章目录雷神FFMpeg源码学习笔记读取编码并依据编码初始化内容结构每一帧的视频解码处理读取编码并依据编码初始化内容结构在开始编解码视频的时候首先第一步需要注册一个编解码器 :av_register_all();avformat_open_input来打开这个文件并给AVformartcontext赋值 ,在其中会去查找当前缓存文件的格式 avformat_o...

2019-01-03 17:24:32 978

原创 FFmpeg 解码本地视频并实现播放功能

本文写于17年,FFMpeg 版本是3.0,demo在我的github可见:FFmpeg_decoderav_registerall();avformart_network_init();AVDictionary *opts = NULL;av_dict_set(&opts,"rtsp_transport","udp",0);av_dict_set(&opts,"max_...

2019-01-03 17:14:29 5186

原创 自定义CollectionViewFlowLayout

在自定义FlowLayout 的需求中,最关键的是layoutAttributesForElementsInRect方法,在这个方法中我们可以对不同顺位上的item进行操作#import "CollectionViewLineLayout.h"#define kScreenWidth [UIScreen mainScreen].bounds.size.width#define kScreen...

2019-01-03 17:05:07 322

原创 iOS单元测试探索

iOS单元测试探索文章目录iOS单元测试探索Kiwi 的集成和使用Kiwi 的集成Kiwi 集成FAQKiwi 的使用Kiwi 的基本语法Kiwi 的集成和使用Kiwi 的集成Kiwi的集成Kiwi 集成FAQ集成过程中遇到的问题:使用cocoapods 报错XCTest.framework not found解决办法:在buildSetting 的Framework Se...

2019-01-03 16:52:01 675

空空如也

空空如也

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

TA关注的人

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