Haley-Wong

Write the code, Change my world.

iOS下WebRTC音视频通话(三)-音视频通话

前两篇文章记录了音视频通话的一些概念和一些流程,以及一个局域网内音视频通话的示例。 今天以一个伪真实网络间的音视频通话示例,来分析WebRTC音视频通话的过程。 上一篇因为是在相同路由内,所以不需要穿墙,两个客户端是可以直接传输多媒体流数据。用XMPP作为信令传输的通道也非常的简单。 本篇会添加上STUN服务器和TURN服务器,让ICE框架的功能发挥出来,实现完整的音视频通话。但是因为两...

iOS下WebRTC音视频通话(二)-局域网内音视频通话

这里是iOS 下WebRTC音视频通话开发的第二篇,在这一篇会利用一个局域网内音视频通话的例子介绍WebRTC中常用的API。 如果你下载并编译完成之后,会看到一个iOS 版的WebRTC Demo。但是那个demo涉及到外网的通讯需要翻墙,而且还有对信令消息的封装理解起来非常的困难。 但是,我将要写的这个demo去掉了STUN服务器、TURN服务器配置,以及信令的包装,基本上是用Web...

iOS下WebRTC音视频通话(一)

在iOS下做IM功能时,难免都会涉及到音频通话和视频通话。QQ中的QQ电话和视频通话效果就非常好,但是如果你没有非常深厚的技术,也没有那么大的团队,很难做到QQ那么快速和稳定的通话效果。 但是利用WebRTC技术,即使一个人也能够实现效果不错的音视频通话。本篇介绍WebRTC的基础概念。 WebRTC介绍 WebRTC,名称源自网页实时通信(Web Real-Time Communica...

iOS中的单例你用对了么?

单例模式怎么定义的,可能在不同的语言,不同的书中不完全一样,但是概况开来都应该是:一个类有且仅有一个实例,并且自行实例化向整个系统提供。 因此,首先你可能需要确定你是真的需要一个单例类,还是说仅仅是需要一个方便调用的实例化方法。如果你是真的需要一个单例类,那么你就应该确保这个单例类,有且仅有一个实例(不管怎么操作都只能获取到这个实例)。 最近看到一些github上的单例使用,别人的用法,...

iOS 知识小集(横竖屏切换)

iOS 中横竖屏切换的功能,在开发iOS app中总能遇到。以前看过几次,感觉简单,但是没有敲过代码实现,最近又碰到了,demo尝试了几种情况,这里就做下总结。 注意 UIInterfaceOrientationLandscapeRight与UIInterfaceOrientationMaskLandscapeRight都代表横屏,Home键在右侧的情况;UIDeviceOrienta...

iOS 知识小集(Status Bar变换)

背景 iOS 中经常会有需要在某个界面改变状态栏颜色或者某个界面隐藏状态栏的需求。而改变状态栏颜色和控制状态栏显示和隐藏的API,在iOS 的不同版本中也发生了很多变化。 iOS 7以前 在iOS 7之前,状态栏是不占视图位置的。每个控制器中的根view都是从屏幕的Y轴20px处开始显示的。所以那个时候整个app状态栏的风格,一般只在plist文件里设置【对应于General中的Statu...

iOS 中如何判断当前是2G/3G/4G/5G/WiFi

5G 什么的,还得等苹果API更新啊,不过将来还是这个处理过程就是了。 关于判断当前的网络环境是2G/3G/4G,这个问题以前经常看到,最近在一工程里看到了如果判断的API。而在撸WebRTC音视频通话的时候,看到了Demo中将SCNetworkReachability与其结合,当网络环境改变时,判断当前连接的是什么网络环境,写法欠佳(因为将其与WebRTC的其他逻辑柔和在了一个类)。其实...

iOS开发中WiFi相关功能总结

iOS 开发中难免会遇到很多与网络方面的判断,这里做个汇总,大多可能是与WiFi相关的。 1.Ping域名、Ping某IP 有时候可能会遇到ping 某个域名或者ip通不通,再做下一步操作。这里的ping与传统的做get或者post请求还是有很大区别的。比如我们连接了某个WiFi,测试ping www.baidu.com,如果能ping 通,基本可以断定可以上网了,但是如果我们做了一个g...

iOS 中的CIFilter(基础用法)

本文大部分内容均来自:Core Image Tutorial: Getting Started Core Image 是一个很强大的库,PS图片时用到的各种滤镜就是在这个库中。而我们创建二维码、创建条形码用这里的滤镜,只需要短短几行代码就可以撸出来(后面会讲怎么用CIFilter绘制二维码、条形码)。 文中有提到在iOS 8 上,CIFilter 的API 里有126种滤镜可用,在 同时...

iOS Bluetooth 打印小票(二)

在上一篇中介绍了打印小票所需要的命令,这一篇介绍Bluetooth连接蓝牙和打印小票的全过程。 CoreBluetooth的封装 因为CoreBluetooth中的代理太多,而每一次操作又比较依赖上一次操作的结果,方法又比较零散,所以我做了粗略封装,把代理改成了block方式回调。 1.获取蓝牙管理单例 HLBLEManager *manager = [HLBLEManager sh...

iOS Bluetooth 打印小票(一)

在iOS app中连接蓝牙打印机打印商品小票,在没有电脑只有手机的情况下,感觉非常实用,而且最近经常最近公司正好也在做这个功能,所以就研究了下。这一篇主要讲一下打印机的一些命令,以便下一篇文章中使用。 蓝牙打印机命令 在蓝牙打印中,比较麻烦的不是搜索,连接蓝牙设备,而是小票的排版。而要弄出好看的小票排版,就得先熟知蓝牙打印机的各种命令。我是在demo基本完成之后,才找到了详细的命令表,如果...

iOS CoreBluetooth 的使用讲解

最近研究了iOS下连接蓝牙打印机,实现打印购物小票的功能,对iOS中BLE 4.0的使用有了一定的了解,这里记录一下对BLE 4.0的理解。 由于很多文章同时讲CBCentralManager和CBPeripheralManager,所以很容易傻傻分不清楚。很少把iPhone作为蓝牙外设在广播发送数据的情形,今天我就从iOS app开发的角度讲一些BLE 4.0的使用。 概念 CBPer...

SDWebImageV3.7.5源码解析

SDWebImage更新到如今这个版本,过程做了许多改进,性能已经非常的好了。以前就粗略的看过SDWebImage的源码,但是未做记录整理。每次阅读还是受益良多,故做此记录。SDWebImage的结构比较混乱,所以解析其调用顺序也是相当的绕,比较难以理解。 SDWebImage使用场景 SDWebImage通过添加category的方式,为UIImageView、UIButton、MKAn...

iOS动画(补充)--特殊Layer动画

iOS中有一些特殊的layer,也可以做一些动画效果,本文就补充两个可以做动画效果的layer: CAEmitterLayer 和 CAReplicatorLayer。 CAEmitterLayer Emitter 发射器,因为可以用它来做爆炸、发射、下雪等效果。 比如,这个下雪效果: - (void)setEmitter {     CAEmitterLayer *snowEmitte...

iOS动画三板斧(三)--UIDynamic动画

终于到了动画三板斧第三篇了,这里用UIDynamic来实现动画。UIDynamic是iOS 7之后新添加的一些物理仿真动画库,包含在UIKit框架中。 介绍 使用UIDynamic,需要理解几个概念:1、UIDynamicAnimator,2、UIDynamicBehavior,3、UIDynamicItem。 UIDynamicAnimator 相当于动画引擎。它初始化...