iOS音视频播放(Audio Unit播放音频+OpenGL ES绘制视频)

朝鲜语老师说过:假诺你不明了一段古文的情趣,不妨去看看它的英文翻译。

前言

有关著作:
使用VideoToolbox硬编码H.264
使用VideoToolbox硬解码H.264
使用AudioToolbox编码AAC
使用AudioToolbox播放AAC
HLS点播实现(H.264和AAC码流)
HLS推流的实现(iOS和OS
X系统)

iOS在线音频流播放
Audio Unit播放PCM文件
Audio
Unit录音(播放伴奏+耳返)

Audio
Unit播放aac/m4a/mp3等文件

奥迪o
Unit和ExtendedAudioFile播放音频

AUGraph结合RemoteI/O Unit与Mixer
Unit

下面的篇章介绍了音录像消息的加载和剖析,在此外的《OpenGLES文集》也详细介绍了OpenGL如何绘制图像。
这一次结合Audio Unit和OpenGL
ES,分别加载多媒体文件的节拍和视频信息并播放。

上面是做出来之后的功效图:

Audio Unit & OpenGL ES.gif

没悟出的是,这样的一句话竟被用到了一部电影方面。

正文

《无问西东》只看名字,还真是猜不出这会是怎么一部影片。英文名字是:forever
young。这不仅仅让我联想起前段时间一部现象级的电影:《芳华》。

一体化思路

demo包括三大片段,分别是资源加载旋律播放视频播放

  • 资源加载:是用AVURLAsset加载资源文件,再创立资源读取器AVAssetReader,然后附加音频读取接口mReaderAudioTrackOutput和录像读取接口mReaderVideoTrackOutput到资源读取器。
  • 音频播放
    :从音频读取接口mReaderAudioTrackOutput加载音频信息得到CMSampleBuffer,用方法CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer把拍子数据转成AudioBufferList格式,再采用AudioUnit播放;
  • 摄像播放:从录像读取接口mReaderVideoTrackOutput加载视频信息获取CMSampleBuffer,用方法CMSampleBufferGetImageBuffer把视频数据转成CVPixelBufferRef格式,再用OpenGL
    ES绘制图像;

    整体流程图

《芳华》的英文名字翻译为youth。讲的是一代人的年轻,在最美好的年华里暴发的事。

切实分析

而《无问西东》,是永远的年轻,是青春的继续。没有人永恒年轻,但总有青春着的人。电影的照相手法也是这般,四段年代不同交替着的小故事,是时代又一代青春的接续。

1、资源加载

资源加载用的是AVFoundation提供的法门,先加载音视频的清规戒律音讯。
下一场初叶化好音视频的格式音讯outputSettingsoutputSettingsAVAssetReaderTrackOutput初步化的必要条件之一。

在意音轨和声道的界别,比如说在ktv唱歌的时候,平常伴奏是一个音轨,录到的人声是一个音轨,最终播放的时候举办混合。而声道我们常用声道数的定义,指的是声音播放时的组合音响数量。
音轨=AudioTrack
声道=AudioChannel

一如既往拍摄手法的录像,还有《云图》《时时刻刻》《朱莉(朱莉)与朱莉娅(朱莉娅)》。多少个故事并列叙述的影片,就像下一盘很大的棋,很考验导演的基础。叙述的巧夺天工而又清晰,大获全胜;反之,叙述的歪曲而又松懈,满盘皆输。

2、音频播放

旋律播放效果用的是Audio Unit,其中的RemoteIO
Unit只可以承受PCM数据,故而要求读取出来的韵律新闻必须是PCM格式的,并且安装给Audio
Unit的格式需要与outputSettings一致。

那部电影可以说,大体上做到了。分别以陈楚生,王力宏,黄晓明章子怡,张震为主线的多少个故事,在不同的时光内并列而行。看似漫不经意,毫无关系,却在结尾处被穿成了一条线。

3、视频播放

视频播放其实就是图像音讯的绘图,从资源我们可以读取到图像消息,再把图像传给已经封装好的LYOpenGLView类,就足以绘制图像。图像信息占用内存较为明确,需要专注内存的回收。

而看起来晦涩的影视名字——无问西东。也在故事的尾声,让观众赢得了然答。

相见的问题

这时候让我下定狠心看这部电影的导火线,是一条来源于网友的短评。他说,这是黄晓明演技的极限,黄晓明在影片里永不油腻之感,仿佛为该角色而生。

1、确定Audio Unit音频格式

品尝加载资源文件的音频格式并设置给Audio Unit,但因为Audio
Unit无法接受资源文件的格式(大多数文本的音频文件格式为AAC)。
缓解方案是一向设置读取的音频格式信息为PCM,并且手动起先化ASBD,保证两端的格式一致。
一般来说,是资源文件的韵律读取格式和手动开头化的格式:

    NSMutableDictionary *outputSettings = [NSMutableDictionary dictionary];
    [outputSettings setObject:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey];
    [outputSettings setObject:@(16) forKey:AVLinearPCMBitDepthKey];
    [outputSettings setObject:@(NO) forKey:AVLinearPCMIsBigEndianKey];
    [outputSettings setObject:@(NO) forKey:AVLinearPCMIsFloatKey];
    [outputSettings setObject:@(YES) forKey:AVLinearPCMIsNonInterleaved];
    [outputSettings setObject:@(44100.0) forKey:AVSampleRateKey];
    [outputSettings setObject:@(1) forKey:AVNumberOfChannelsKey];

    AudioStreamBasicDescription inputFormat;
    inputFormat.mSampleRate = 44100;
    inputFormat.mFormatID = kAudioFormatLinearPCM;
    inputFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsNonInterleaved;
    inputFormat.mFramesPerPacket = 1;
    inputFormat.mChannelsPerFrame = 1;
    inputFormat.mBytesPerPacket = 2;
    inputFormat.mBytesPerFrame = 2;
    inputFormat.mBitsPerChannel = 16;
    self.fileFormat = inputFormat;

带着“究竟是什么的角色,成就了黄晓明的演技”的疑点,我冲进了影院。毕竟主演里还有章子怡和张震,肯定难看不到啥地方去。

2、音录像同步

demo中设有五个变量self.mAudioTimeStampself.mVideoTimeStamp,分别表示音频播放和视频播放的年华戳。
个中音频播放进度由Audio
Unit驱动,录像播放进度由CADisplayLink驱动,为了确保录像进度不超过音频进度,添加了if (self.mVideoTimeStamp < self.mAudioTimeStamp)的判断。
但在模拟器运行的时候,录像的辨析比音频解析的速度小很多,造成较为明确的不同台。
在真机运行的时候,这种现象有强烈的改正。
现阶段还没找到较好的共同模式,尽管有精晓请指教。

现已周迅被誉为“镜头下一生一世都可以演少女的妇女”,而《无问西东》中,让自己认为章子怡也能形成演一辈子的闺女。

总结

正文没有扩充更多的节奏和视频知识,通过结合四个部分文化,组成主题的音视频播放流程。
是因为岁月原因,所做的技术预研不可能好好,代码没有很好的磨擦。
demo更多是执行某些想法,如若代码存在问题,恳请指出,匡助您自我他少踩一些坑。

章子怡的演技最令人敬佩的是视力的传递。多少个漫长麻花辫,一对清澈的眸子,少女感一刹那间就迸发出来。

她的命局在剧中起伏较大。后半部分,更是下半张脸被遮盖住,只好靠眼神来传达。

从刚开端顶着一张“从没受过欺负的脸”,眼中的仅仅与直接,到新兴的到底与不安,以及最终的宁静与坚持不渝。命局压在肩膀,情感变化的百转千回,全靠一双眼在镜头中流转。

也是这部影片,让自家以为他在《演员的落地》中的严谨与毒舌,是因为具有高超的演技在襄助。

正是章子怡和黄晓明在线的演技,作育出了影视中两段令人为难抗拒的哭点之一。

而另一个哭点,来自于王力宏。

王力宏的视频我只看过《色戒》,说实话,在《色戒》中的演绎并不出彩。而《无问西东》中的角色,仿佛是为他而生。

一个富家子弟,彬彬有礼而又无所不可能。和王力宏真实的人设很类似,而王力宏自带的nerd成分,又为其角色加了分。

话不是不少,但做起事来具有不容抗拒的雷打不动。所以她扮演的人选,在结果中做出的举止,不会令人拥有刻意造势,故意赚人眼泪之嫌。

类似一切都是自但是然的发出,更能撼动人心。

看《芳华》时,曾为影片中的色彩搭配和镜头中通盘的比重所折服。而在《无问西东》中,我为电影的留白所震撼。

而外演员的词儿和上演,外界的景物也是电影大旨表明形式的一种。王力宏这段故事中,给了外围景物很长的年华来描写。河边一个垂钓的渔民,上课时突然下起的冰暴,起伏的沙包中的防空洞。

俺们透过王力宏的双即刻着这几个景点,他没有说一句话。但曾经表达出了干吗要做出这样的挑选。

一致的照相手段,推荐我们看一看越南导演陈英雄的创作——《青木瓜之味》。大片的景点描写,少量的词儿,含蓄而婉转的宣布了演员的情怀。

影视的点睛之笔,来自于结尾张震的一段独白。穿过三个故事构筑成的时光隧道,与几人物共同经历了一个个取舍走到了故事的终极章。

大家的内心不禁也初始动摇,而在深沉的自问自省事后。张震用两个字,给出了俺们问题的答案:服从你心,无问西东。