IJKPlayer简析

来源:互联网 发布:valk魔方淘宝官网 编辑:程序博客网 时间:2024/04/29 08:10

IJKPlayer通过IJKFFMoviePlayerController管理播放器。

IJKFFMoviePlayerController里的代码过多,无法梳理。通过删除代码,保留核心,可以了解其调用方式。

#import "IJKMediaPlayback.h"#import "IJKFFOptions.h"@interface LivePlayerController : NSObject <IJKMediaPlayback>- (id)initWithContentURL:(NSURL *)aUrl withOptions:(IJKFFOptions *)options;@end
#import "LivePlayerController.h"#import <UIKit/UIKit.h>#import "IJKFFMoviePlayerDef.h"#import "IJKAudioKit.h"@implementation LivePlayerController{    IjkMediaPlayer * _mediaPlayer;    IJKSDLGLView * _glView;    NSString * _urlString;}@synthesize view = _view;- (instancetype)initWithContentURL:(NSURL *)aUrl withOptions:(IJKFFOptions *)options {    if (aUrl == nil) {        return nil;    }    // Detect if URL is file path and return proper string for it    NSString *aUrlString = [aUrl isFileURL] ? [aUrl path] : [aUrl absoluteString];        self = [super init];    if (self) {        // 初始化        ijkmp_global_init();                _urlString = aUrlString;                // 创建播放器(结构体类型的对象)        _mediaPlayer = ijkmp_ios_create(copy_media_player_msg_loop);                // 创建播放控件(画面将在这个控件中显示)        _glView = [[IJKSDLGLView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];        // 播放控件右侧不显示调试信息        _glView.shouldShowHudView = NO;        // 公开播放控件,使其可调用于其他页面        _view = _glView;                // 关联播放器和播放控件(播放控件的画面将由播放器管理)        ijkmp_ios_set_glview(_mediaPlayer, _glView);                // 初始化音频        [[IJKAudioKit sharedInstance] setupAudioSession];    }    return self;}- (void)prepareToPlay {    if (!_mediaPlayer) {        return;    }        // 设置播放器的数据来源(直播地址)    ijkmp_set_data_source(_mediaPlayer, [_urlString UTF8String]);    // 开始播放    ijkmp_prepare_async(_mediaPlayer);}- (void)shutdown {    if (!_mediaPlayer) {        return;    }        // 停止播放    ijkmp_stop(_mediaPlayer);    // 关闭播放器    ijkmp_shutdown(_mediaPlayer);    // 销毁播放器    ijkmp_dec_ref_p(&_mediaPlayer);}int copy_media_player_msg_loop(void * arg) {    return 0;}@end

原创粉丝点击