ios Objective C应用程序上的AVPlayer不播放视频

Posted

技术标签:

【中文标题】ios Objective C应用程序上的AVPlayer不播放视频【英文标题】:AVPlayer on ios Objective C app does not play video 【发布时间】:2017-11-30 00:28:42 【问题描述】:

您好,我有一个不使用 Storyboard(它使用 XIB 文件)的 ios Objective-C 应用程序

我想添加一个闪屏来播放视频,所以我添加了一个从 UIViewController 派生的新 Coca Touch 类(并勾选了“同时创建 XIB 文件)。

我已将此类替换为我的新主屏幕,它可以正常加载但不播放视频。我已经添加了 AVFoundation 框架等,所以这不是问题。

这是我的代码。

.h 文件

#import <UIKit/UIKit.h>

@interface VideoIntroViewController : UIViewController
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@end

.m 文件

import <AVFoundation/AVFoundation.h>

static const float PLAYER_VOLUME = 0.0;

@interface VideoIntroViewController ()

@property (nonatomic) AVPlayer *player;
@property (weak, nonatomic) IBOutlet UIView *playerView;

@end

@implementation VideoIntroViewController

- (void)viewDidLoad

    [super viewDidLoad];
    [self createVideoPlayer];


- (void)createVideoPlayer
 
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"welcome_video" ofType:@"mp4"];
    NSURL *url = [NSURL fileURLWithPath:filePath];

    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];

    self.player = [AVPlayer playerWithPlayerItem:playerItem];
    self.player.volume = PLAYER_VOLUME;

    AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
    playerLayer.videoGravity = UIViewContentModeScaleToFill;
    playerLayer.frame = self.playerView.layer.bounds;
    [self.playerView.layer addSublayer:playerLayer];

    [self.player play];

屏幕启动但没有视频播放。

可能出了什么问题?

【问题讨论】:

你做了什么调试? createVideoPlayer 方法在运行时实际发生了什么?您分配给playerLayer.frame 的实际框架是什么?有什么nil 我在模拟器中调试,createVideoPlayer 中没有任何内容为空。我在调试输出窗口中看到很多 AQDefaultDevice 跳过输入流 0 0 0x0 消息。 【参考方案1】:

试试这个代码:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"welcome_video" ofType:@"mp4"];
NSURL *url = [NSURL fileURLWithPath:filePath];

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
self.player = [AVPlayer playerWithPlayerItem:playerItem];

CALayer *superlayer = self.playerView.layer;
self.player.volume = 1.0;

AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;// you can also use AVLayerVideoGravityResizeAspect to clip video to view's bound
playerLayer.frame = self.playerView.layer.bounds;

[superlayer addSublayer:playerLayer];
[self.player seekToTime:kCMTimeZero];
[self.player play];

我已经检查了它的其他视频文件,它工作正常。

【讨论】:

【参考方案2】:

在我的主 XIB 文件中,我没有放置 View 控件。 当我放置一个视图控件,然后 CTL+右键单击并将其连接到我的 playerView 时,它会播放视频。

【讨论】:

以上是关于ios Objective C应用程序上的AVPlayer不播放视频的主要内容,如果未能解决你的问题,请参考以下文章

iOS: ios视频播放(MPMediaPlayerController,AVPlayer,AVPlayerViewcontrollerffmpeg-AVPlayer)

什么是 Cocoa,和 Objective-C 有什么关系

iOS 上的 Objective-C 套接字发送和接收

Objective-C学习笔记

objective-c入门

iOS - 如何通过 Objective-C 定位我的 iPad/iPhone 上的所有文件