在 OSX 中播放视频

Posted

技术标签:

【中文标题】在 OSX 中播放视频【英文标题】:Playing a video in OSX 【发布时间】:2014-09-04 09:18:22 【问题描述】:

我正在开发一个需要在应用程序本身中播放教程视频的 Mac 应用程序。 当用户按下应用程序上的按钮时,它应该播放视频 这是 xcode 4.3 的代码(与 xcode 5.1 不兼容)

@synthesize movieView;
-(IBAction)playVideo:(id)sender 
NSString *videoPath = [[NSBundle mainBundle] pathForResource:"video name" ofType:@"mp4";
NSURL *videoURL = [NSURL fileURLWithPath: videoPath];
NSError *error = nil;

NSDictionary *attrib = [NSDictionary dictionaryWithObjectsAndKeys:
                       [NSNumber  numberWithBool:YES],
                        QTMovieOpenForPlaybackAttribute,
                        videoURL, QTMovieURLAttribute,
                        [NSNumber numberWithBool:YES],
                        QTMovieOpenAsyncRequiredAttribute, nil];
QTMovie *newMovie = [[QTMovie alloc] initWithAttributes: attrib error: &error];
[movieView setMovie:newMovie];
[movieView play:newMovie];


我将 xcode 5.1 用于 osx 10.8

【问题讨论】:

【参考方案1】:

Apple 从 OS X 10.7 开始从 QuickTime API(包括 QTKit)过渡到 AVFoundation。有一个 detailed technical note 关于该转换。

在现代 Mac 应用中播放视频的最简单方法是通过 AVKit(自 10.9 起可用)。 要获得显示与您的应用捆绑的视频的基本视图,您必须:

    将 AVKit 和 AVFoundation 添加到项目的“链接框架和库”部分 将 AVPlayerView 拖到 Interface Builder 中的窗口 将 Outlet 连接到您的一个控制器中的播放器视图 实例化一个AVPlayer,从你的包中加载视频资源

这是加载资产的代码:

NSURL* videoURL = [[NSBundle mainBundle] URLForResource:@"video name" withExtension:@"mp4"];
self.playerView.player = [AVPlayer playerWithURL:videoURL];

【讨论】:

如果窗口加载,如何在自动播放中播放视频?【参考方案2】:

Thomas 在 Swift 5 中回答

if let videoURL = Bundle.main.url(forResource: "video",
                                  withExtension: "mp4") 
  self.playerView.player = AVPlayer.init(url: videoURL)
  self.playerView.player?.play()

【讨论】:

以上是关于在 OSX 中播放视频的主要内容,如果未能解决你的问题,请参考以下文章

如果定位在视口之外,html5 视频不会在 OSX Safari 中自动播放

如何防止 html5 视频在 OSX 上休眠

无法使用 QMediaPlayer 播放某些视频

在 OS X 上防止屏幕变暗和显示睡眠

Android主流视频播放及缓存实现原理调研

第九章 视频播放器开发之图片播放