术语方面我会采用英文表述,方便交流和沟通。下面是第一篇的正文:
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
4. GStreamer后端
所有的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
5. 视图
这个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
6. 结论
第一个iOS教程结束了。主要是为了说明因为C和ObjC的兼容,GStreamer支持iOS的应用和支持桌面应用一样简单。为了编码的清晰增加了一个ObjC的封装(GStreamerBackend类),但在应用中直接调用GStreamer的framework也是可以的。