Xcode多Target设置

* 还有个事情就是图标,其实也足以设置的。

打开 Assets.xcassets,会发现早已有一个 AppIcon
了,我们再copy一份出来,然后改个名字,换一下图标,就是这么的效果。

QQ20161001-5.png

理所当然并从未完毕,因为大家只是添加了资源,并没有用到。如故在工程安装里面,有个
App Icons Source
,拔取一下就足以了。当然,大家仍能够配备启动画面等等,那里就不演示了。

QQ20161001-6.png

终极放一张多个 App 的图标,注意修改
Bundle Identifier,不然你不会运作出三个 App 的。

QQ20161001-9.png

扫码关心群众号

初稿链接

<推广>
汇总总结器
是一款多职能总结器,可以测算房贷、个税、年初奖、利息、BMI指数以及大小金额的总括器,再也不用下载多少个计算器找来找去了。还协理实时更新贷款利率哦~。

学习 FFmpeg ,就不得不提到一位大神,就是
雷霄骅,可惜天妒英才,在此地也先思念一下,同时也多谢他在视音频领域以及
FFmpeg 解析上做出的进献。

* 首先大家得有一个工程,这里我就新建一个主题的沙盘工程。

工程的样子应该是那样。(我早就提高到 Xcode8
了,有怎么着不相同之处请不要只顾。)

QQ20161001-0.png

pCodecCtx = avcodec_alloc_context3(NULL);
avcodec_parameters_to_context(pCodecCtx, pFormatCtx->streams[videoStream]->codecpar);
pCodec = avcodec_find_decoder(pCodecCtx->codec_id);

以此时候我们就能够用多 Target 来操作了。具体方法且听我一一道来。

好了,说了那样多理论,说点实在的。 FFmpeg 解码流程所急需调用的 API
依次为:

* 接下来首先想到的相应是改名字,终归 XXX copy 不怎么友好。

如今自身所知晓的方法唯有一个一个的改。

囧。

假使您有好的点子,可以留言给本人。

改完 plist 的名字后,须求在工程安装里面重新选用一下 Info.plist
。改完事后就如下图一律。我列了瞬间自身改的多少个地点。但是自身纪念早期版本的
Xcode 好像还索要修改 Build Settings 里面的局地东西。然而本身的
Xcode8 好像不需求了。大家在做的时候注意一下。

QQ20161001-3.png

PS:忘了修改Bundle Identifier了,大家记得改一下

pCodecCtx = pFormatCtx->streams[videoindex]->codec;  
pCodec = avcodec_find_decoder(pCodecCtx->codec_id);  

* 然后大家进来工程安装,右击中间的 TARGETS ,会有个挑选让您 Duplicate 还是 Delete ,那里大家挑选 Duplicate

QQ20161001-1.png

结果就是下面这几个样子了,多个一个 TargetMultiTarget copy
,还多了一个 plist 文件叫 MultiTarget copy-Info.plist

QQ20161001-2.png

广播一个互连网上的视频文件,须求通过以下多少个步骤:解协议,解封装,解码视音频,视音频同步。
万一播放本地文件则不须求解协议,为以下多少个步骤:解封装,解码视音频,视音频同步。

* 最后一步就是做版本有别了。

先是大家在 PRO 版本中定义一个宏 PRO_VERSION,写在 Build Settings
里面。一定记得先接纳 PRO
Target。那几个职能就是报告编译器,大家在编译该 Target
时会有个全局的宏叫做
PRO_VERSION。这几个时候我们就足以动用那些宏来做一些代码区分了。

QQ20161001-4.png

透过上述的手续,获取到 frame
数据就是解码后的原本摄像数据。前边大家的囤积可能播放也都是基于那几个数量的。

* 最终大家测试一下。

我们在 ViewController 里面扩充一个 UILabel ,方便起见,我就直接写
frame 了,在多个例外版本显得差距的文书。代码如下。

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 50, CGRectGetWidth([UIScreen mainScreen].bounds), 80)];
    label.textAlignment = NSTextAlignmentCenter;
    [self.view addSubview:label];

#ifdef PRO_VERSION
    label.text = @"这是PRO版本";
#else
    label.text = @"这是NORMAL版本";
#endif

理所当然,编译哪个版本需要选拔相应的 Scheme。上边放两张截图。

PRO版本

NORMAL版本 ![Uploading QQ20161001-9_892356.png . . .]

参考文章列表:

扫码关注群众号

原文链接

<推广>
归咎总计器
是一款多职能统计器,可以测算房贷、个税、年初奖、利息、BMI指数以及大小金额的计算器,再也不用下载三个计算器找来找去了。还援救实时更新贷款利率哦~。

偶尔一个项目会分成三个版本,比如免费版、收费版,或者对于差距的客户定制不相同版本。但是大体上效益都是大抵,只是有些页面稍有分别。若是每种版本都建一个工程又显得麻烦了,都位居一个
Target
又得写一堆的代码去分别甄别,而且在卷入的时候很或许因为参数配置错误需求延续、一连的卷入。


正文重点谈论的是解封装、解码视频。对于音频的拍卖先不管。

下边的流水线参考
笔谈FFmpeg(一),其中有多少个函数弃用了,所以我更新了一晃。
粗略的说一下更新的几个函数,其余的网上介绍的很多了,前面我也会推荐几篇文章。

上面是改变之后的用法:

有关种种步骤的含义如故去雷公的稿子去看,那里就不啰嗦了。


开始—->
av_register_all();
avformat_open_input();
av_find_stream_info();
av_find_best_stream();
avcodec_find_decoder();
while(av_read_frame()) {
    获取到packet—->
    avcodec_send_packet();
    avcodec_receive_frame();
    获取到frame
}

  • av_find_best_stream()
    事先用的都是如此的章程:
    穷举所有的流,查找其中种类为CODEC_TYPE_VIDEO
    。所以看人家的稿子会有个 while 的循环。
  • avcodec_send_packet();avcodec_receive_frame();
    事先用的是 avcodec_decode_video2() 。后来 FFmpeg 把函数拆分了。
  • 还有个须要小心的,avcodec_find_decoder();
    步骤中所用到的也装有变更。上边是原先的用法:

20140201120523046.jpeg

解码的效应,就是将视频/音频压缩编码数据,解码成为非收缩的视频/音频原始数据。音频的压缩编码标准包罗AAC,mp3,AC-3等等,摄像的压缩编码标准则含有H.264,MPEG2,VC-1等等。解码是一切系统中最要紧也是最复杂的一个环节。通过解码,压缩编码的摄像数据输出成为非减弱的颜料数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非减弱的韵律抽样数据,例如PCM数据。

大家先精通一下视频播放的流水线,那里关键参考的是雷公的稿子,[总结]视音频编解码技术零基础学习方法
。进程见下图(图片相同来自雷神的稿子,蓝色框框是本身注明的)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注