術語方面我會采用英文表述,方便交流和溝通。下面是第一篇的正文:
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@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@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也是可以的。