- 博客(25)
- 收藏
- 关注
原创 工程swift与OC混编改造
因此无论A和B是用什么语言编写的,只要编译器B本身能够识别出对应的语言A的声明,那么就可以在B的编译过程中标记A.function,并产出规定格式的.o文件。编译阶段,B.m将B自身的方法地址全部编入符号表,但是编译的过程会碰到对A.function的调用,这个时候编译器检查A.function是否有声明,明确有(跟着A.h头文件copy过来的),但是并没有相应的实现,因此会将A.function的引用做一个特殊标记,并在重定位表中记录,等待静态链接成功后修改为指向A.function真实所在的地址。
2023-06-01 15:20:43 1852
原创 音视频入门(学习ffmpeg tutorial之iOS 音视频同步)
基本原理音频和视频流内部有信息来控制播放的时机以及速度,音频内部有采样率,视频有帧率,表明每秒播放帧数,但是呢这两个数值很明显是不同的,比如音频一般是44100HZ,而fps一般标准是60,那么要想让音视频同步,就需要使音频流和视频流往同一个标准时间上靠近。这里我们选择音频流的时间作为标准。如何往音频流时间靠,需要一些比较细的计算方式,一般采用PTS和DTS,也就是展示时间戳和解码时间戳(也就...
2019-12-31 18:25:18 445
原创 音视频入门(学习ffmpeg tutorial之 iOS 视频多线程)
FFmpeg视频多线程接上一章节使用多线程来播放音频,这里讲讲如何使用多线程来播放视频,首先需要明确的是,多线程播放视频比多线程播放音频要复杂,因为音频的播放可以直接使用audio_callback方法来控制音频硬件读取的缓存区大小,没有数据了就直接调用这个方法读一批数据进来,但是视频硬件读取数据是需要代码来控制视频缓冲区的读取的,因此需要再弄一个生产者消费者模式代码来展示图片帧。具体流程图如下...
2019-12-29 21:16:43 336 1
原创 音视频入门(学习ffmpeg tutorial之 iOS音频解码与播放)
隔了好久好久。。。。,其实ffmpeg是有专门的教程的,只是其中很多内容过期了,我这里也只是当作一个学习的过程,然后记录下来。音视频开发需要具备的知识点如下(从他人处copy过来的)rtsp、sdp、tcp、udp、ip协议(rtsp的DESCRIBE、OPTION、SETUP、PLAY、PAUSE、TEARDOWN;tcp连接的三次握手/断开的四次握手)socket多线程opengl ...
2019-12-18 16:04:41 473 4
原创 关于protobuf的一些总结
最近面试中被问protobuf的加解码原理,非常的尴尬,因为我没了解过,这里稍作总结proto文件每一个proto文件其实对应着我们正常的一个模型(也就是model),只是proto文件是用来描述这样的一个模型的文件,并非实际上的工程model。举个例子,文件Person.proto:message Person{ required int32 id = 1; optional str...
2019-08-16 20:26:55 1610
原创 iOS中Block实现原理回顾
重新回顾了一下iOS内存管理一书的Block部分,为了加深一下自己对block的理解,这里将其实现总结到这篇博客。准备工作xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc XXXX.m 使用该命令将OC写的代码改用C++来表示,所以接下来将使用此命令完成对block的探究new一个文件DemoClass#import "DemoCl...
2019-06-18 21:04:52 838
原创 iOS 如何通过变量获取对应的变量名
最近在整理项目代码中key-value中的key,原来的老的代码处理的比较简单,直接使用#define kFirstSplash @"kFirstSplash"虽然目前这样的字符串define已经都整理到了一个文件中,但是我还是觉使用define的方式不够“面向对象”(强行找理由),另外每次定义一个key,还要专门写两遍一模一样的字符串,因此就在思考,怎么样在OC的代码中直接通过变量获取到这...
2019-02-24 17:53:52 1437
原创 音视频入门(学习ffmpeg tutorial之 iOS视频解码及展示)
使用ffmpeg进行解码的流程是固定的,就如同iOS开发一样,从viewDidLoad,viewWillApear,viewDidAppear,苹果都已经把需要调用的方法顺序告诉我们了,需要我们做的就是把自己业务代码合理的放到对应的位置。视频解码基本流程注册需要支持的文件格式以及对应的编解码器打开文件从文件中提取数据流信息从数据流(视频数据流/音频数据流/字幕数据流)中找到对应的视频数...
2019-01-30 18:00:17 342
原创 音视频入门(学习ffmpeg tutorial之iOS 环境搭建)
目前做的事情就是按照ffmpeg tutorial上的内容学习写一个简单的播放器,这本教程虽然已经过时了,但是针对ffplayer(ffplayer是ffmpeg官方给出的示例播放器,ijkplayer就是根据ffplayer改造的播放器)中的编解码流程描述依然是正确的,所以在学习此教程的时候有很多老的API需要修改,尤其是针对SDL的api。目前我用的SDK版本是ffmpeg4.0.2以及sdl...
2019-01-22 18:25:20 10738
原创 音视频入门(iOS编译ffmpeg的configure配置)
本篇文章接之前的x264编译configure选项,写一下ffmpeg的configure选项。ffmpeg的arm64架构configure选项./configure \--disable-everything \ //首先关闭所有configure选项,保证编译的时候不会需要引入很多多余的代码模块--enable-gpl \ //使用gpl协议,如果是公司产品要...
2019-01-10 11:24:14 8732
原创 音视频入门(iOS的x264的交叉编译)
本篇记录我编译x264包的过程。概念在上一篇iOS上fdk-aac的交叉编译已经介绍了,所以这里简单粗暴的上configure:export CC="xcrun -sdk iphoneos clang"export AS="gas-preprocessor.pl xcrun -sdk iphoneos clang"./configure \--enable-static \--en...
2018-12-23 18:18:21 2623
原创 音视频入门 (iOS上fdk-aac的交叉编译)
前篇音视频入门记录了我对音视频的一些基础理解。现在将我在交叉编译ffmpeg之前的一些准备工作记录一下。本文记录fdk-aac的交叉编译,首先需要说明几个问题:基本概念交叉编译:有过移动开发经验或者嵌入式开发经验的对这个行为应该是非常熟悉的,所谓交叉编译就是在平台A(比如电脑)上利用提供的编译链工具编译出能够运行在平台B(比如手机)的代码的整个过程。iOS提供的编译工具链就是xcode...
2018-07-30 22:46:53 1149
原创 音视频入门
最近在熟悉iOS音视频相关的内容。音视频主要内容包括:编解码、封装与解封装、相关网络传输协议以及音视频同步。大致关系如下图(从网上搜到的): 协议:类似于http一样,音视频通讯有rtmp、hls等网络应用层协议,这些应用层协议规定了按照怎样的规则对数据进行传输。比如hls就规定将数据进行分段,然后首先拉取一个根index文件,之后根据这个索引文件拉取次级索引文件,最后根据这些...
2018-07-04 22:31:21 561
原创 iOS的一种多tableview左右滚动,以及tableview上下滚动悬挂效果(嵌套scrollview布局)
项目中碰到了这种效果,以qq为例 该页面需要实现的效果是好友,群聊,设备,通讯录以及公众号五个tab能实现左右滚动,并且还需要能够从新朋友开始上下滑动。并最终将前面的五个tab悬挂在顶部。在网上查了一下,找到了两种比较合适的解决方案。1.这种页面布局比较容易想到,也确实能够实现所需要的效果,但是需要解决的问题就是上下的两个tableview之间的手势冲突,保证滑动绿色的第一个tableview...
2018-04-07 16:03:06 7685 1
原创 自定义tableview移动
关于tableview的移动,apple提供了官方的做法,但是无法做扩展,生成的cell往往不符合实际需求,所以这里提供自定义移动操作://为tableview添加对应的手势来模拟移动手势。UILongPressGestureRecognizer* longPressGesture=[[UILongPressGestureRecognizer alloc]initWithTarget:self
2018-03-13 14:37:06 405
原创 iOS 二维码扫描登录
二维码扫描方面,其实客户端能做的事情相对有限,基本上只需要完成扫描二维码,获取二维码中的字符串然后将该字符串以及用户id发给后端处理就好了。首先介绍一下扫描登录的基本流程。 网页向服务器请求二维码生成。服务器生成一个qrcodeID,全局唯一,能够标志该二维码,并使用该qrcodeID生成一个二维码。用户使用手机扫描该网页上的二维码(二维码其实就是一串字符)获得该qrcodeID。手
2017-11-05 10:27:47 3324
原创 git合并导致项目无法打开(project.pbxproject)
最近经历了一次分之合并导致项目打不开的情况。按照网上的说法,找到了问题的根源project.pbxproject文件,该文件位于项目文件.xcodeproj中,使用右键查看包内容就可以找到。 但是网上说的是这个文件中会出现conflicts,和平常的conflicts一样存在有>>>这样的符号,但是我的pbxproject文件中完全没有这样的符号。估摸着是merge的时候git觉得没啥冲突直接就
2017-10-12 22:53:12 1527
原创 error: warning: Stopped in a context claiming to capture an Objective-C object pointer,
如图所示,选中工程,选择target然后在build setting中搜索modules,将Enable Clang Module Debugging改成NO(注意并非图中被选中的那一行)
2017-04-24 20:37:49 924 1
原创 win10的VMware安装虚拟机以后无法上网
这里介绍一个原因:虚拟机要上网需要在电脑服务(右键我的电脑->管理->服务)里面找到Vmware DHCP服务和Vmware NAT服务然后打开: 一般来说如果初始安装完虚拟机以后没有生成相应的服务,可以到vmware的菜单栏->编辑->虚拟网络编辑中点击VMnet8然后选择恢复初始设置(在左下角)来重新卸载安装
2016-12-19 17:19:51 4732
原创 Mac使用bootcamp安装windows双系统以及mac系统全新重装
mac使用bootcamp安装windows双系统以win 10专业版,OS X EI Capitan,2015版macbook pro为例,为防止发生一些莫名其妙的问题电脑所有的外设最好都去掉,只剩下电源(如果需要使用U盘作为启动盘,还可以留下这个U盘)。另外我记得网上有提到一点:在使用bootcamp装windows系统之前要将mac os中所有的软件更新到最新版本(不知真假,因为我测试的
2015-10-20 19:47:55 15357 1
原创 重装系统
下面介绍一下重装操作系统的步骤:1.用U盘启动首先在刚按下物理开机键后立即按f12或者f2(或者del)进入bios的设置,自己找找从中找到boot priority order 然后将usb开头的往前移(移动的方法:键盘的+-符号可以将对应的选项往上或者往下移动,注意参考bios旁边的操作说明)2.制作启动U盘首先备份u盘中的资料,然后去网上下载一个upanok软件(直接
2015-08-25 17:41:19 781
原创 L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误
这个问题网上很多都是修改注册表,但是我自己的电脑上相应注册表的选项是存在的,所以没用,可以做以下尝试1.在我的电脑->管理->服务->IPsec Policy Agent 开启服务2.将安全软件中的启动项中的系统服务的IPsec Policy Agent打开3.重启电脑后连接就可以用了
2015-08-10 11:11:10 46013 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人