ios多媒体开发框架,iOS混合开发-成都快上网建站

ios多媒体开发框架,iOS混合开发

Gstreamer使用说明

Application Development Manual

成都创新互联公司专业为企业提供庆元网站建设、庆元做网站、庆元网站设计、庆元网站制作等企业网站建设、网页设计与制作、庆元企业网站模板建站服务,10年庆元做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

Gstreamer是一个支持Windows,Linux,Android, iOS的跨平台的多媒体框架,应用程序可以通过管道(Pipeline)的方式,将多媒体处理的各个步骤串联起来,达到预期的效果。每个步骤通过元素(Element)基于GObject对象系统通过插件(plugins)的方式实现,方便了各项功能的扩展。

GStreamer 的核心功能是为插件、数据流和媒体类型处理/协商提供框架。它还提供了一个 API 来使用各种插件编写应用程序。

GStreamer 提供

Gstreamer框架根据各个模块的成熟度以及所使用的开源协议,将core及plugins置于不同的源码包中:

Element是Gstreamer中最重要的对象类型之一。一个element实现一个功能(读取文件,解码,输出等),程序需要创建多个element,并按顺序将其串连起来(使用管道 ! ),构成一个完整的pipeline。

官方Elements与Plugins Lists

element主要有三种:

pads 是元素与外界的接口,有两个属性定义:方向和可用性。两个element必须通过pad才能连接起来,在element通过pad连接成功后,数据会从上一个element的src pad传到下一个element的sink pad然后进行处理。一个element可以同时拥有多个相同的pad。

bin 是一个容器元素,用于管理多个element。由于 bin 本身就是一个元素,因此可以以与任何其他元素相同的方式处理 bin。改变bin的状态时,bin会自动去修改所包含的element的状态,也会转发所收到的消息。如果没有bin,我们需要依次操作我们所使用的element。通过bin降低了应用的复杂度。

Pipeline继承自bin,为程序提供一个bus用于传输消息,并且对所有子element进行同步。当将pipeline的状态设置为PLAYING时,pipeline会在一个/多个新的线程中通过element处理数据。

示例:通过下面的命令播放文件时,会创建如下pipeline:

这个pipeline由8个element构成,每个element都实现各自的功能:

filesrc读取文件,oggdemux解析文件,分别提取audio,video数据,queue缓存数据,vorbisdec解码audio,autoaudiosink自动选择音频设备并输出;theoradec解码video,videoconvert转换video数据格式,autovideosink自动选择显示设备并输出。

参考 Installing on Linux

API reference

示例应用helloworld.c

编译应用

ios 系统架构分为哪四层?uikit框架属于哪一层

千峰扣丁学堂iOS开发为您解答:

1、Core

OS层:位于iOS框架的最底层,主要包含内核、文件系统、网络基础架构、安全管理、电源管理、设备驱动、线程管理、内存管理等。简而言之,该层提供了最低级的、系统级的服务。

2、Core

Services层:可称之为核心服务层,顾名思义,它提供诸如字符串管理、集合管理、网络操作、URL实用工具、联系人管理、偏好设置等服务。除此之外,它还提供很多基于硬件特性的服务,如GPS、加速仪、陀螺仪等。该层包含了Core

Location、Core Motion、SystemConfiguration、Foundation与Core

Foundation子模块。其中Foundation与Core Foundation子模块提供了对公共数据类型(字符串、集合等)的抽象,Core

Foundation中的Core Data子模块可以实现对象图形管理与对象持久化。

3、Media层:依赖于Core

Services层提供的功能,主要负责图形与多媒体服务。它包含了CoreGraphics、Core Text、OpenGL ES、Core

Animation、AVFoundation、Core Audio等与图形、视频和音频相关的功能模块。

4、Cocoa

Touch层:是直接向iOS应用程序提供各种基础功能的支持。其中的UIKit框架提供各种可视化控件供应用程序使用,如窗口、视图、视图控制器与各种用户控件等。另外UIKit也定义了应用程序的默认行为和事件处理结构。

iOS系统架构层次结构

iOS操作系统除过最底层的内核,其上总共分为四层,从上到下依次是:

最上层的Cocoa Touch层直接和用户进行交互,比如最常用的UIKit中的各种控件就属于此层,以及最核心的基础服务Foundation框架,以及地图MapKit等。

Media媒体层为上层的Cocoa Touch提供画图和多媒体服务,比如文字、图像、音视频处理等。

核心服务层为Application提供基础的系统服务,比如数据存储框架Core Data、安全服务Security、网络访问CFNetwork等,以及最重要的Foundation和CoreFoundation,它们是Objective-C的核心。

核心操作系统层为其上所有层提供最基础的服务,比如内存管理、线程管理、本地认证、文件系统、电源管理等,是底层的硬件和上层各种服务之间的接口。

ios avfoundation框架下面有哪些类

使用AVFoundation拍照和录制视频

需要开发自定义的拍照和录制视频功能,可借助于AVFoundation框架来实现,该框架提供了大量的类来完成拍照和录制视频.主要使用如下类:

AVCaptureDevice :该对象代表物理输入设备,包括摄像头和麦克风.开发者可通过该对象来配置底层物理设备的属性.需要指出的是,

我们不能直接创建该类的实例,只能通过该类的 devices、defaultDeviceWithMediaType:(NSString *)mediaType、

devicesWithMediaType:(NSString *)mediaType方法 来获取对应的输入设备数组,接下来即 可获取前置摄像头、后置摄像头或麦克风,

程序就可设置该对象的对焦模式、闪光灯模式、曝光补偿、白平衡 等各种拍照相关属性。

注意:

在配置摄像头的相关属性之前,必须先调用lockForConfiguration:方法执行锁定,配置完成后调用unlockForConfiguration方法解锁。

AVCaptureSession :该对象负责把AVCaptureDevice捕捉得到的视频或声音数据输出到输出设备中.不管执行实时的还是离线的录制,开发者都必须创建AVCaptureSession对象,并为该对象添加输入设备(负责捕捉数据)和输出端(负责接收数据).例如如下代码片段

AVCaptureDeviceInput [BL2] :它是AVCaptureInput的子类,使用该对象从AVCaptureDevice设备获取数据,该对象将会被添加给AVCaptureSession管理.

AVCaptureScreenInput [BL3] :它是AVCaptureInput的子类,使用该对象从屏幕获取数据(用于录制屏幕动作).该对象将会被添加给AVCaptureSeesion管理

AVCaptureAudioDataOutput、AVCaptureAudioPreviewOutput、AVCaptureFileOutput [BL4] 、AVCaptureStillImageOutput、AVCaptureVideoDataOutput:它们都是AVCaptureOutput的子类,用于接收各种数据.该对象也会被添加给AVCaptureSession管理.其中AVCaptureFileOutput依然代表输出到文件的输出端,

AVCaptureAudioFileOutput [BL5] 、AVCaptureMovieFileOutput [BL6] :它们都是AVCaptureFileOutput的子类,分别代表输出到音频文件、电影文件的输出端。

AVCaptureVideoPreviewLayer:该对象是CALayer的子类,开发者只要创建它的实例,并为它设置AVCaptureSession,就可以非常方便地用它来实现拍摄预览.

使用AVFoundation实现拍照和录制视频的大致步骤如下

1

使用AVCaptureDevice的静态方法获取设备,包括摄像头和麦克风都可通过这种方式来获取

2

利用AVCaptureDevice初始化AVCaptureDeviceInput对象,无论摄像头还是麦克风都可通过这种方式转换为AVCaptureInput对象

3

初始化输出端.如果只是拍照,则初始化AVCaptureStillImageOutput输出端即可;如果要捕捉视频,则初始化AVCaptureMovieFileOutput输出端.

4

创建AVCaptureSession对象,使用该对象来添加输入设备和输出端.调用AVCaptureSession的startRunning方法开始捕捉画面或声音数据.

5

将捕捉的数据(照片、视频数据)输出到指定文件。

框架

AVFoundation.framework框架,AssetsLibrary.framework,CoreMedia.framework框架

使用AVFoundation生成视频缩略图

AVFoundation可用来生成视频缩略图.

AVFoundation生成视频缩略图主要靠如下两个类.

AVURLAsset

该类是AVAsset的子类,AVAsset类专门用于获取多媒体的相关信息,包括获取多媒体的画面、声音等信息。而AVURLAsset子类的作用则是根据NSURL来初始化AVAsset对象。

AVAssetImageGenerator [BL7]

该类专门用于截取视频指定帧的画面。

使用AVFoundation生成视频缩略图的步骤如下:

1

根据视频的NSURL创建AVURLAsset对象

2

根据AVURLAsset对象创建AVAssetImageGenerator对象

3

调用AVAssetImageGenerator对象的copyCGImageAtTime:actualTime:error:方法来获取该视频指定时间点的视频截图.该方法的第一个CMTime参数用于指定获取哪个时间点的视频截图,第2个CMTime参数用于获取实际截图 位于哪个时间点.

其中CMTime是专门用于标识电影时间的结构体,通常用如下两个函数来创建CMTime.

CMTimeMake(int64_t value, int_32 timescale): 第1个参数代表获取第几帧的截图,第2个参数代表每秒的帧数.因此实际截取的时间点是value/timescale.

CMTimeMakeWithSeconds(Float64 seconds, int32_t preferredTimeScale): 第1个参数代表获取第几秒的截图,第2个参数则代表每秒的帧数.

代码片段

// 为增加UIImage增加一个类别,通过在该类别中为UIImage增加一个imageWithVideo:方法来获取视频的缩略图

// UIImage + Video.m

@implementation UIImage (Video)

+ (UIImage *)imageWithVideo:(NSURL *)vidoURL

{

// 根据视频的URL创建AVURLAsset

AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];

// 根据AVURLAsset创建AVAssetImageGenerator对象

AVAssetImageGenerator* gen = [[AVAssetImageGenerator alloc] initWithAsset: asset];

gen.appliesPreferredTrackTransform = YES;

// 定义获取0帧处的视频截图

CMTime time = CMTimeMake(0, 10);

NSError *error = nil;

CMTime actualTime;

// 获取time处的视频截图

CGImageRef image = [gen copyCGImageAtTime: time actualTime: actualTime error:error];

// 将CGImageRef转换为UIImage

UIImage *thumb = [[UIImage alloc] initWithCGImage: image];

CGImageRelease(image);

return thumb;

}

@end

ViewController.m

@interface ViewController: UIViewController

@property (nonatomic, strong) UIImageView *iv;

@end

@implementation ViewController

- (void)viewDidLoad

{

[super viewDidLoad];

// 获取URL

NSURL *videoUrl = [[NSBundle mainBundle]

URLForResource:@”movie” withExtension:@”mp4”];

// 生成视频的缩略图

UIImage *image = [UIImage imageWithVideo:videoUrl];

self.iv.image = image;

}

@end

[BL1] Session: 会议

[BL2] 设备获取数据

[BL3] 用于录制屏幕动作

[BL4] 代表输出到文件的输出端

[BL5] 输出到音频文件的输出端

[BL6] 输出到电影文件的输出端


本文标题:ios多媒体开发框架,iOS混合开发
转载来源:http://kswjz.com/article/dsgojhg.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流