添加子层AVPlayer共享实例/管理器时出错



报错

不可见@ intercae GlobalMediaPlayer声明选择器添加子层

. h

    #import <Foundation/Foundation.h>
    #import <AVFoundation/AVFoundation.h>
    @interface GlobalMediaPlayer : NSObject
    +(GlobalMediaPlayer *)sharedInstance;
    -(void)playFromURL:(NSString *)url;

m

#import "GlobalMediaPlayer.h"

static GlobalMediaPlayer *sharedInstance = nil;
@interface GlobalMediaPlayer ()
{
    AVPlayer *avPlayer;
}
@end
@implementation GlobalMediaPlayer
-(id)init{
    if(self = [super init]){
    }
    return self;
}

+(GlobalMediaPlayer *)sharedInstance{
    if(!sharedInstance){
        sharedInstance = [[[self class] alloc] init];
    }
    return sharedInstance;
}
-(void)playFromURL:(NSString *)url{
    avPlayer = [AVPlayer playerWithURL:[NSURL URLWithString:@"http://www.someurl/something.mp3"]];

    AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer];
    avPlayerLayer.frame = CGRectMake(0, 0, 1920, 1020);
    //[self addSublayer:avPlayerLayer]; <---- No visible @interfcae GlobalMediaPlayer declares selector add sublayer error
    [avPlayer play];
}

使用它
[[GlobalMediaPlayer sharedInstance] playFromURL:resourceUrl];

AVPlayer代码包装在单个元素中并没有真正的优势,因为玩家需要能够在CALayer中呈现其视频,所以通常最好将玩家代码放在将呈现内容的UIViewController中。

所以在你的视图控制器中:
@interface MyViewController: UIViewController
@property (nonatomic, strong) AVPlayer *player;
@property (nonatomic, weak) AVPlayerLayer *playerLayer;
@end
- (void)playFromURL:(NSString *)url {
    //Instantiate the player and player layer
    AVPlayer *player = [AVPlayer playerWithURL:url];
    AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
    //Add the player layer as a sublayer of the desired view or subview
    playerLayer.frame = self.view.frame;
    [self.view.layer addSublayer:playerLayer];
    [player play];
    //Retain a reference to the player and player layer for controls/removal
    self.avPlayer = player;
    self.playerLayer = playerLayer;
}

编辑我注意到从您的示例代码URL指向MP3。在这种情况下,您根本不需要担心创建AVPlayerLayer。简单地实例化播放器并调用play就足够了。

相关内容

最新更新