GStreamer iOS教程1 —— GStreamer连接

        GStreamer是相当高大上的一个流媒体应用程序开发框架,目前中文的资料不多,自己在学习中诞生了一个把官方的Tutorial翻译成中文的一个念头,一方面可以推广这个东西,让其他有兴趣的程序员快速上手,另一方面也能让自己得到锻炼。在这里立个碑,希望自己能坚持下去。

       术语方面我会采用英文表述,方便交流和沟通。下面是第一篇的正文:

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也是可以的。

你可能感兴趣的:(tutorial,gstreamer)