笔记
文章平均质量分 72
AmoAmo_Amo
这个作者很懒,什么都没留下…
展开
-
实例方法(instance method) 和 类方法(class method)
OC与Swift中的实例方法(instance method) 和 类方法(class method)的比较原创 2017-08-06 23:31:05 · 8051 阅读 · 0 评论 -
基于iOS的网络音视频实时传输系统(四)- 自定义socket协议(TCP、UDP)
首先我们需要明确一点的就是,为什么需要自定义socket协议?① 客户端与服务器间的相互通信是异步的② 理论上,二者都可以任意地发送或者接受数据③ 但是实际上,它们应该配合:当client发送时,server接受; 当server发送时,让client去接受④ 那么,任何让它们二者配合默契,相互协调呢?⑤ 这就引出了我们需要的——应用底层协议来解决⑥ 这个所谓的协议,实质上就是代码我们都知道,TCP或者UDP的握手协议(三次握手 三次挥手之类),不过这些协议都已经被封装在了TC原创 2017-07-01 23:41:32 · 2486 阅读 · 3 评论 -
基于iOS的网络音视频实时传输系统(五)- 使用VideoToolbox硬解码H264
client端--接收音视频数据,并解码H264、AAC原创 2017-10-12 15:34:59 · 2272 阅读 · 0 评论 -
基于iOS的网络音视频实时传输系统(六)- AudioQueue播放音频,OpenGL渲染显示图像
AudioQueue播放音频在上一篇中写了解码H264,不过AAC可以省略解码的步骤因为AudioQueue函数提供的接口可以直接播放AAC音频,估计解码的操作它内部自己帮我们做了,AudioQueue的使用主要就是几个函数,还有就是它是偏C的函数,所以ARC管不了,我们自己要注意内存的管理。具体可以参考下面的123篇文章当时我是直接在官方的代码上找的示例,然后一试就可以了。下面是引用官方指南的部分信息:“用于播放的音频队列播放音频队列的结构如下所示。原创 2017-10-12 15:37:07 · 1530 阅读 · 1 评论 -
iOS 复制UIView所有的对象
像这样,需要在这三个view里面都加载一个名字为“subView”的UIView,因为各种原因,比如“subView”里面的子view非常多,导致要重新写一个一模一样的特别麻烦,第一个反应是 直接让leftView、centerView、rightView都直接[xxx addSubview:self.subView]; 得了,这里为了让demo运行后看起来更明显,我们直接让“subView”背景色原创 2017-07-02 12:32:45 · 4691 阅读 · 0 评论 -
UIView子view随父view同步变化
一般情况下,当对父view做动画时,我们希望得到父view内所有的子视图跟随着同步发生变化,即如下的效果(注:黑色正方形为父view1,白色正方形为view1的子view2):但是,当我们什么也没有做时,它的效果往往却不是我们想要的样子,而是下面这样...抱歉 图片太模糊了,不过大概原创 2017-11-23 23:59:26 · 4026 阅读 · 0 评论 -
解决AQDefaultDevice (173): skipping input stream 的输出问题
升级到Xcode 9以后再使用AVFoundation框架的AVPlayer进行播放会一直打印AQDefaultDevice (173): skipping input stream 0 0 0x0,这不是工程的问题,只需要在Xcode中设置一下就可以了。解决办法:1.选择 Product -->Scheme-->Edit Scheme2.选择 Argu转载 2017-10-12 16:58:30 · 470 阅读 · 0 评论 -
Xcode程序异常崩溃情况事故记录
在某个工程运行代码的时候,总是会莫名其妙地crash,多运行几次,又能正常工作。这个问题让人摸不着头脑,能正常运行又不能正常运行...崩溃后却又不知道怎么修复,真是闹心。初步猜测是内存管理没做好,在我的代码中crash的地方一般是:参考文章:http://blog.c原创 2017-10-09 12:00:04 · 608 阅读 · 0 评论 -
Swift中的枚举enum 与C中的枚举
Swift中的枚举enum。在C语言中,甚至OC等其他高级语言中,都是把enum枚举的值当作是一个int整数来替代。而在Swift中,它的case就是它的值本身,无需刻意地定义一个值来代表它。原创 2017-08-09 00:00:54 · 646 阅读 · 0 评论 -
C语言中的枚举与宏定义 及其不同之处
C语言的枚举与宏定义。有人可能会觉得这个太easy了,本来也没想写这篇文章,但是想想觉得有必要用自己的语言组织一下记下来,跟学习Swift的枚举做类比,好理解一些。原创 2017-08-08 23:59:16 · 6739 阅读 · 1 评论 -
iOS与unity交互、opencv 草稿
好不容易找到了两篇写得特别好的博客:http://blog.csdn.net/foreverhyh58/article/details/50353158http://www.jianshu.com/p/5524d9e9befd遇到的问题1,问题一:enum { NO, GAIN, GAIN_BLOCKS }; Expected identi原创 2017-12-24 22:05:51 · 507 阅读 · 0 评论 -
SQLite数据库以及FMDB的使用
iOS中,使用的是SQLite数据库但是原生SQLite用起来比较麻烦,所以FMDB对他进行了封装通过FMDB,可以使用SQL语句进行数据库操作原创 2017-08-03 23:31:11 · 700 阅读 · 0 评论 -
iOS集成融云SDK part 1 小记
之前虽然稍微了解过即时通讯方面的内容,但是一直没有怎么去做过聊天部分的。这次是刚刚使用融云,做一下记录。关于融云SDK集成的具体步骤,我都是参考以下这些文章,链接在这里:https://www.jianshu.com/p/eabfb0a93cf9https://www.cnblogs.com/ithongjie/p/5036383.html1.首先打开融云官网htt原创 2018-03-31 00:22:16 · 740 阅读 · 0 评论 -
iOS开发——APP回退到历史版本
文章转载自:https://www.cnblogs.com/CoderAlex/p/6295497.html1.软件准备【必备】Charles2.正式开始2.1 打开Charles青花瓷historyApp1.png2.2 安装证书以便能够拦截解析HTTPS请求数据historyApp2.png2.2.1 如果是选择本地安装证书的话,记住保存格式选择.cerhistoryApp3.png2.2.2...转载 2018-05-20 19:30:43 · 31524 阅读 · 0 评论 -
基于iOS的网络音视频实时传输系统(三)- VideoToolbox编码音视频数据为H264、AAC
server端--编码音视频数据为H264、AAC这部分花了好多时间,本身就不具备这方面的相关知识,查阅了不少资料,不过关于VideoToolbox和AudioToolbox方面的编码资料寥寥无几,虽然网上搜索结果看似特别多,其实一看 内容也大同小异,建议还是看看官方的文档。原创 2017-10-12 15:33:21 · 2607 阅读 · 0 评论 -
基于iOS的网络音视频实时传输系统(二)- 捕获音视频数据
获取音视频数据,这里使用的是AVCaptureSession,可以方便地自定义相机界面,看起来大概是这样的:原创 2017-09-25 20:41:46 · 2576 阅读 · 0 评论 -
基于iOS的网络音视频实时传输系统(一)- 前言
之前在做类似的网络协议的时候,突发奇想,想写一个网络视频监控,基于局域网的情况下,将MacBook摄像头捕获到的视频,在手机端显示,但是由于对macOS不是很熟悉,最终导致该计划流产。所以后来干脆使用手机捕获视频数据。为了简化项目工作量,socket协议也只用到了一些必要的功能,其他细节如client端退出监控视频时,server端会crash,各位有需要可以自行去添加一些如设置select()函数,或者设置signal()函数忽略这个断开的信号。等等项目中没有写录制设备视频的功能,所以没有用到MP4原创 2017-09-24 23:57:15 · 6058 阅读 · 8 评论 -
Swift中的closure类型与func的关系
Swift中的closure是一个类型,关于closure,可以把它与函数做类比。closure在Swift是一个无名函数,类似地,block也是一个匿名函数原创 2017-06-25 13:45:22 · 601 阅读 · 0 评论 -
Swift中的as as? as!
Swift是一门强类型语言,而Objective-C是弱类型语言(OC是动态性语言,让程序可以在运行时判断和决定其该有的行为,所以OC属于弱类型)。所以使用时需要注意对象之间关系,用is as as? as! 这些操作符来处理对象之间关系 Swift基于C和Objective-C,而却没有C的一些兼容约束。Swift采用了安全的编程模式。本篇文章学习自泊学(boxueio.com)类型的判断 -原创 2017-07-08 23:24:08 · 889 阅读 · 0 评论 -
Swift中的protocol
protocol作为swift中的一种自定义类型,和struct,class,enum不同,我们使用protocol来定义某种约定,而不是一个具体的类型。这种约定通常用于表示某些类型的共性原创 2017-07-16 22:21:23 · 2001 阅读 · 0 评论 -
Swift中的struct与class
Swift中的struct。这篇文章是以前学习Swift的时候记录在印象笔记里的,现在把它搬过来。结构体和枚举能够定义方法 是Swift与C/OC的主要区别之一。C语言中可以通过结构体内嵌函数指针实现面向对象的方法。原创 2017-08-06 23:33:12 · 422 阅读 · 0 评论 -
音视频编解码相关知识学习
是一种图像压缩或者说视频流格式实际应用中,摄像头采集到的视频,实质上是一帧一帧的图片,只要每秒图片的帧数足够多,我们视觉看起来就像流畅的视频。图像的压缩格式有很多,但是即便是把每张图片压缩到1M,每秒30帧的话,一秒的视频体积也有30M,如果放在网络传输的话,压力是非常大的。原创 2017-08-13 18:24:23 · 408 阅读 · 0 评论 -
Socket编程中select函数用法详解
select()在SOCKET编程中还是比较重要的,可是对于初学 SOCKET 的人来说都不太爱用select()写程序,他们只是习惯写诸如conncet()、accept()、recv()或recvfrom()这样的阻塞程序(所谓阻塞方式 block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用 select() 就可以完成非阻塞(所谓非阻塞方式 non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦转载 2017-07-03 20:05:16 · 2315 阅读 · 0 评论 -
页面间的跳转动画,及给tableView cell设置阴影和圆角
页面间的跳转动画,效果图如下所示:原创 2017-07-23 23:08:35 · 596 阅读 · 0 评论 -
Xcode、iPhoneOS回退到历史版本的方法记录
昨天闲着没事把手机升级到iOS 11,连上Xcode说Xcode也要更新,Xcode更新又需要macOS也更新,闲着没事干就一股脑全更新了,虽然新的什么都好,Xcode9打开原来的工程也是报了好多警告和错误,不过每次更新都是这个样子,网上搜搜基本上也都能搞定,况且还新增了不少功能。参考这篇文章:不可能不爱的 XCODE 9:最新功能详尽介绍还能同时打开多个模拟器,还能无线在iPho原创 2017-10-12 15:41:27 · 10115 阅读 · 0 评论 -
linker command failed with exit code 1 (use -v to see invocation)解决办法
linker command failed with exit code 1 (use -v to see invocation)解决办法报错信息显示是连接时发生了错误,并且可以看到有编译后产生的目标文件如AACPlayer.o等,也证明编译过程没有出现问题。网上找了好多文章,大部分说的都是关于第三方库,或者导入文件重复的问题原创 2017-08-15 20:03:48 · 1399 阅读 · 0 评论 -
VideoToolbox视频编码——在macOS上对获取到的视频进行编码的问题记录 及YUV422转YUV420
想在macOS平台上写一个将Mac摄像头上获取到的视频数据使用VideoToolBox编码后socket发送出去的服务器,但是遇到了好多问题先是在接受数据的客户端最终渲染出来的视频中发现绿屏现象,如下图所示:并且报-12911的错误信息,网上查了一下说是视频数据不完整的原因,经过验证,初步排除了socket收发数据有误的可能,所以暂时将焦点放在了macOS端的工程上,将ma原创 2017-08-11 19:20:14 · 6598 阅读 · 3 评论 -
iOS 之UIAlertController的使用方法
UIAlertView在IOS 8以上版本已经过时了,官方推荐我们使用UIAlertController代替UIAlertView、UIActionSheet1、UIAlertController显示普通的Alert[objc] view plain copy- (IBAction)showAlert:(UIButton转载 2017-11-17 16:02:18 · 1698 阅读 · 0 评论 -
CMSampleBufferRef与byte*互相转换
**** audio ****byte*转CMSampleBufferRef-(AudioStreamBasicDescription) getAudioFormat{ AudioStreamBasicDescription format; format.mSampleRate = 44100; format.转载 2017-09-21 17:43:17 · 2997 阅读 · 0 评论 -
FFmpeg第一步--编译
FFmpeg编译参考:https://cnbin.github.io/blog/2015/05/19/iospei-zhi-ffmpegkuang-jia/记得要在Build Settings中找到Search Paths,设置Header Search Pahts 和 Library Search Paths如下。不然会报include“libavformat/avformat.h” file n原创 2017-08-13 23:56:02 · 487 阅读 · 0 评论