术语方面我会采用英文表述,方便交流和沟通。下面是第一篇的正文:
1. 目标
第一个iOS的教程非常简单,仅仅是获得GStreamer的版本并在界面上显示出来。主要是演示一下xCode下如何使用GStreamer的库。
2. Hello GStreamer!
这个项目的代码是使用“GStreamer Single View Application template”来生成的,具体代码可以在安装包里找到。这个View里面仅仅包含一个用来显示GStreamer版本的UILabel控件。
3. UI界面
UI方面使用storyboards来显示一个singleView,其中包括一个居中的UILabel。在ViewController的代码里面包含一个IBOutlet的label变量。
ViewController.h
#import <UIKit/UIKit.h> @interface ViewController : UIViewController { IBOutlet UILabel *label; } @property (retain,nonatomic) UILabel *label; @end
所有的GStreamer代码都维护一个ObjC的类——GStreamerBackend。在后续的教程里面这个类会逐渐包含更多内容,目前它仅仅包含一个获得GStreamer版本的方法。
GStreamerBackend是用ObjC写的,所以需要注意一下C和ObjC之间的转化问题(译者注:GStreamer是基于C写就的)。有了这个类会让UI调用起来更方便,有点类似于Android版本上的JNI代码所起到的作用。
GStreamerBackend.m
#import "GStreamerBackend.h" #include <gst/gst.h> @implementation GStreamerBackend -(NSString*) getGStreamerVersion { char *version_utf8 = gst_version_string(); NSString *version_string = [NSString stringWithUTF8String:version_utf8]; g_free(version_utf8); return version_string; } @end
这个ViewController实例化了GStreamerBackend类,并且获得GStreamer的版本在Label上显示出来,就这么简单!
ViewController.m
#import "ViewController.h" #import "GStreamerBackend.h" @interface ViewController () { GStreamerBackend *gst_backend; } @end @implementation ViewController @synthesize label; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. gst_backend = [[GStreamerBackend alloc] init]; label.text = [NSString stringWithFormat:@"Welcome to %@!", [gst_backend getGStreamerVersion]]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
第一个iOS教程结束了。主要是为了说明因为C和ObjC的兼容,GStreamer支持iOS的应用和支持桌面应用一样简单。为了编码的清晰增加了一个ObjC的封装(GStreamerBackend类),但在应用中直接调用GStreamer的framework也是可以的。