簡體   English   中英

添加子層AVPlayer共享實例/管理器時出錯

[英]Error adding sublayer AVPlayer Shared Instance/Manager

我收到一個錯誤

沒有可見的@interfcae 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就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM