UIView内にAVPlayerを埋め込み、URLからmp4ビデオファイルを再生しようとしています。問題は、黒い空白のビューしか表示されないことです(スクリーンショットを参照)
以前のiOSバージョンでは機能しましたが、iOS9にアップグレードしてからこの問題が発生しました。
私の.hファイルは次のようになります。
@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIView *viewPlayerContainer;
一方、実装ファイルには次のものが含まれています。
@import AVFoundation;
@import AVKit;
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init];
NSURL *url = [NSURL URLWithString:@"http://techslides.com/demos/sample-videos/small.mp4"];
AVURLAsset *asset = [AVURLAsset assetWithURL: url];
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset: asset];
AVPlayer * player = [[AVPlayer alloc] initWithPlayerItem: item];
[playerViewController.view setFrame:CGRectMake(0, 0, _viewPlayerContainer.bounds.size.width, _viewPlayerContainer.bounds.size.width)];
playerViewController.showsPlaybackControls = NO;
[_viewPlayerContainer addSubview:playerViewController.view];
[player play];
}
ここで何か不足していますか?
前もって感謝します!
@implementation ViewController{
AVPlayerViewController *playerViewController;
}
- (void)viewDidLoad {
[super viewDidLoad];
playerViewController = [[AVPlayerViewController alloc] init];
}
- (IBAction)playVideo:(id)sender {
NSURL *url = [NSURL URLWithString:@"http://techslides.com/demos/sample-videos/small.mp4"];
AVURLAsset *asset = [AVURLAsset assetWithURL: url];
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset: asset];
AVPlayer * player = [[AVPlayer alloc] initWithPlayerItem: item];
playerViewController.player = player;
[playerViewController.view setFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.width)];
playerViewController.showsPlaybackControls = YES;
[self.view addSubview:playerViewController.view];
[player play];
}
ビデオが再生されない理由は、tls
がHTTP
の場合に古すぎるためです。参照 App Transport Security
1つのURLからビデオを再生する場合は、AVURLAssetを使用する必要はありません。多数の動画またはURLがある場合は、AVURLAssetを使用する必要があります。 (しかし、両方の方法が機能します)
次のメソッドは、1つのURLがある場合は正常に機能します。
NSURL *url = [NSURL URLWithString:@“<your_url_here>”];
AVPlayer *player = [[AVPlayer alloc] initWithURL: url];
AVPlayerViewController *controller = [[AVPlayerViewController alloc]init];
controller.player = player;
controller.delegate = self;// if you want to use delegates...
controller.showsPlaybackControls=YES;
controller.view.frame = self.view.frame;
[self.view addSubview:controller.view];
[player play];
あなたにはあなたのこのコード行がありません
playerViewController.player = player;
AVPlayerViewControllerを、それを提示するビューコントローラーのプロパティとして作成し、viewDidLoad内に割り当てます。