我正在研究AVFoundation,我想创建一个类似于Whatsapp的东西,例如,当我在youtube上看到一段视频时,它可以在PiP模式下播放。出于这个原因,我创建了这样的viewcontroller:
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
#import <AVKit/AVKit.h>
@interface ViewController () <AVPictureInPictureControllerDelegate>
@property (strong, nonatomic) AVPlayerViewController *playerViewController;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSURL *url = [[NSURL alloc] initWithString:@"https://www.rmp-streaming.com/media/bbb-360p.mp4"];
AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:url];
AVPlayer* playVideo = [[AVPlayer alloc] initWithPlayerItem:playerItem];
self.playerViewController = [[AVPlayerViewController alloc] init];
self.playerViewController.player = playVideo;
self.playerViewController.player.volume = 0;
self.playerViewController.view.frame = self.view.bounds;
[self.view addSubview:self.playerViewController.view];
self.playerViewController.showsPlaybackControls = YES;
self.playerViewController.allowsPictureInPicturePlayback = YES;
self.playerViewController.videoGravity = AVLayerVideoGravityResizeAspect;
[playVideo play];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
在AppDelegate中,我这样做了:
NSError *errore = nil;
AVAudioSession *sessioneAudio = [AVAudioSession sharedInstance];
[sessioneAudio setActive:YES error:&errore];
[sessioneAudio setCategory:AVAudioSessionCategoryPlayback error:&errore];
我还在项目的功能中启用了音频、AirPlay和图片背景模式。
我的问题是:
如果我在iPad设备上运行app,我会看到PiP按钮,并且我可以启用PiP模式。如果我在iPhone设备上运行应用程序,我看不到PiP按钮,但我不明白为什么。
发布于 2019-04-15 23:21:28
我已经实现了在iPhones上启用PiP模式的PiPhone框架。我想它可以解决你的问题。
发布于 2020-10-21 21:38:56
NSString *path = [NSBundle mainBundle路径资源:@“视频”mp4类型:@“mp4”];NSURL *url = NSURL文件fileURLWithPath:路径;self.AVPlayer = AVPlayer播放器mainBundle:url;self.layer = AVPlayerLayer playerLayerWithPlayer:_AVPlayer;
self.layer设置:CGRectMake( 0,0,self.view.frame.size.width-100,self.view.frame.size.height-72);self.layer设置视频重力:AVLayerVideoGravityResize;self.view.layer addSublayer:_layer;
_AVPlayer play;
-(空)setupSuport{ if(AVPictureInPictureController isPictureInPictureSupported) {
_AVPictureInPictureController = [AVPictureInPictureController alloc initWithPlayerLayer:_layer];_AVPictureInPictureController.delegate = self;} else { //此处不支持PIP开始按钮}
}
PiP的
-(IBAction)actionPIPStart:(UIButton*)发送者{
if (_AVPictureInPictureController.pictureInPictureActive) {
[_AVPictureInPictureController stopPictureInPicture];
NSLog(@"no PIP!");
}
else {
[_AVPictureInPictureController startPictureInPicture];
NSLog(@"PIP!");
}
}
https://stackoverflow.com/questions/51629755
复制相似问题