[英]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.