MacOSXを使用して簡単なDVDプレーヤーを作成しようとしていますDVDPlayback.framework
。DVDをウィンドウ内で再生することはできますが、最終的にはこれをフルスクリーンアプリとして実行したいと思います。
DVDの再生中にメディアコントロールを表示するためのサブビューを追加するのに問題があります(一時停止/再生、ムービーをスクロールするための進行状況スライダー、チャプターの変更など)。
DVDフレームワークで使用されているウィンドウ内にサブビュー()を作成すると、最上位にあるNSView
ように指示しても、常にDVDコンテンツに遅れをとっているように見えます。NSView
これは、ウィンドウの領域内に白いサブビューを作成しようとする単純化されたコードです。
(10.6と10.7で同じ結果のコードを試しました)。
const BOOL PLAY_DVD = YES;
@interface ControlsView : NSView {
}
@end
@implementation ControlsView
- (void)drawRect:(NSRect)rect {
[[NSColor whiteColor] set];
NSRectFill(rect);
}
@end
@implementation AppDelegate
@synthesize window = _window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSView *view = self.window.contentView;
if (PLAY_DVD) {
NSLog(@"%@ Playing DVD video", [self class]);
// Register error handler
OSStatus err;
err = DVDInitialize();
if (err != noErr) {
NSLog(@"DVDInitialise failed with error code %d", err);
[NSApp terminate:self];
}
// Set window to be the main window
err = DVDSetVideoWindowID([self.window windowNumber]);
// Set the display...
CGDirectDisplayID display = (CGDirectDisplayID) [[[[self.window screen] deviceDescription] valueForKey:@"NSScreenNumber"] intValue];
Boolean isSupported;
err = DVDSwitchToDisplay(display, &isSupported);
// Set video bounds
NSRect frame = [self.window frame];
CGRect rect = CGRectMake(0, 0, frame.size.width, frame.size.height);
err = DVDSetVideoCGBounds(&rect);
FSRef ref;
DVDOpenMediaFileWithURL([NSURL URLWithString:@"file:///Path/to/my/TestDVD/VIDEO_TS"]);
DVDOpenMediaFile(&ref);
DVDPlay();
}
// Attempt to add a subview to show the controls...
ControlsView *controls = [[ControlsView alloc] initWithFrame:NSMakeRect(20, 20, 100, 50)];
[view addSubview:controls positioned:NSWindowAbove relativeTo:nil];
}
@end
の場合、サブビューは正しくレンダリングされます(他のサブビューを作成して、順序が正しいことを示すことができます)PLAY_DVD
。NO
の場合、メディアPLAY_DVD
はYES
再生を開始しますが、サブビューは常にビデオより遅れているように見えるため、サブビューは表示されません。
私が見つけたDVD再生の唯一の例は、2番目のウィンドウにコントロールがありましたが、フルスクリーンアプリケーションの場合、コントロールをフルスクリーンビューの一部にし、フェードイン/フェードアウトしたいと思います。必要な場合に。
誰かがこれを行うための最良の方法を知っていますか?フルスクリーンコントロールは、フルスクリーンウィンドウの上に浮かぶ別のウィンドウに配置する必要がありますか?コントロールとDVD再生が同じウィンドウにある例を見つけることができませんでした。
よろしくお願いします!