Macos 如何通知我某部电影已被确定为非电影?
我正在编写一个Mac应用程序,使用AVPlayer播放MPEG-4电影 我的应用程序通过“打开位置”对话框支持本地电影和来自互联网的电影。在后一种情况下,当用户输入URL并按下OK按钮时,“我的应用程序”将URL作为文档打开 本地文件很容易启动。启动服务会告诉Finder、Dock等不要为任何不是.mp4或类似文件的本地文件启动我的应用程序。如果用户强制我的应用程序打开某个随机文件(例如,按住⌘ 当把它拖到我的应用程序上时),那是他们自己的错 非本地(如互联网)URL是问题所在。如果我提供的URL不指向MPEG-4,我需要显示警报并关闭文档 当然,我不是自己下载网址;我只是把它交给AVPlayer 所以我需要一种方式让我的AVPlayer通知我,我给它的不是电影Macos 如何通知我某部电影已被确定为非电影?,macos,avfoundation,avplayer,Macos,Avfoundation,Avplayer,我正在编写一个Mac应用程序,使用AVPlayer播放MPEG-4电影 我的应用程序通过“打开位置”对话框支持本地电影和来自互联网的电影。在后一种情况下,当用户输入URL并按下OK按钮时,“我的应用程序”将URL作为文档打开 本地文件很容易启动。启动服务会告诉Finder、Dock等不要为任何不是.mp4或类似文件的本地文件启动我的应用程序。如果用户强制我的应用程序打开某个随机文件(例如,按住⌘ 当把它拖到我的应用程序上时),那是他们自己的错 非本地(如互联网)URL是问题所在。如果我提供的UR
- 我试着观察玩家的
。设置为状态
AVPlayerStatusReadyToPlay
- 我试着观察玩家的
曲目。至少在Lion上,对于无效的电影,项目的currentItem
永远不会改变。(这是可以理解的,它改变的唯一原因是即将出现的曲目,根据定义,这对于非电影来说是不可能的。)轨道
- 当
改变时,我不能只检查状态
,因为这可能还没有设置(在小牛上,轨迹
在状态
改变之前)轨迹
那么,我的AVPlayer如何通知我,它已经确定URL所指的内容不是它可以播放的内容?这绝对不是确定的,但根据我的经验,当播放器的
状态变为AVPlayerStatusReadyToPlay
时,您可以检查玩家的currentItem
的asset
的playable
属性。如果playable
为YES
,则可以假定URL指向可行的MP4。如果没有,你可以假设它没有
- (void) observeValueForKeyPath:(NSString*)keyPath
ofObject:(id)object
change:(NSDictionary*)change
context:(void*)context
{
if( [keyPath isEqualToString:@"status"] ) {
if( self.player.status == AVPlayerStatusReadyToPlay &&
self.player.currentItem.asset.playable ) {
[self.playerView.player play];
}
else {
// TODO: show an error dialog here.
[self.window close];
}
}
}
我在我的一个应用程序中编写了类似于上面的代码,在我尝试过的每种情况下,它似乎都能按预期工作。如果你愿意,我可以用它制作一个测试应用程序。这在大多数情况下都有效,但我只是遇到了一部它不适用的电影:电影是可播放的(在没有提供此表的较旧版本中验证),但资产的可播放的
在特定时间点不是真的。