0

我正在开发一个程序,该程序具有一组严格的视频录制“阶段”……可以将其想象成一个视频展台。我在 OSX Lion 上运行程序,完全用 Cocoa 编码。

“阶段”如下:

  1. 欢迎屏幕
  2. 开始录音
  3. 播放视频
  4. 确认保存/删除

阶段 1、2 和 4 每次都能完美运行。第 3 阶段第一次完美运行。

在第二次或更晚的时间通过该过程,视频播放(由QTMovieView嵌入在 NSPanel 中完成)仍设置为来自第一次运行的视频。

我设置了两种方法,一种是通过按下按钮激活,另一种是通过程序中的其他代码激活。这两种方法都有效,我很肯定。我不知道为什么[mPlaybackView setMovie: lclMov]不设置新电影...

澄清(基于下面的代码):

  • 在开始播放之前,我已经查看以确保文件TEMP_STORE确实存在(并且是新文件,而不是旧文件)
  • 我也尝试过替换[QTMovie movieWithFile:TEMP_STORE error:&err];[[QTMovie alloc] initWithFile:TEMP_STORE error:&err]根据我在某处网上看到的建议)
  • 该文件TEMP_STORE是我程序中另一个代码段记录的“.mov”文件

任何和所有的帮助表示赞赏!!!

代码

- (IBAction) startPlayback: (id) sender {
    NSError *err;
    QTMovie *lclMov = [QTMovie movieWithFile:TEMP_STORE error:&err];

    [instrPlayback orderOut:nil];

    if (err != nil) {
        [errorMessage setStringValue:[NSString stringWithFormat:@"%@", [err localizedDescription]]];
        [errorDialog makeKeyAndOrderFront:nil];
    } else {
        [self writeString: CMD_PROCEED];

        [mPlaybackView setMovie:lclMov];
        [mPlaybackView gotoBeginning:nil];
        [playbackDialog makeKeyAndOrderFront:nil];
    }
}

- (void) stopPlayback {
    QTMovie *lclMov = [mPlaybackView movie];
    if ([lclMov canUpdateMovieFile]) {
        if (![lclMov updateMovieFile]) {
            [errorMessage setStringValue:@"Error Applying Updates to MOV File.\nAsk Lab Attendant for Help."];
            [errorDialog makeKeyAndOrderFront:nil];
            }
        }

        [playbackDialog orderOut:nil];
}
4

1 回答 1

0

对于将来遇到此问题的人,这是我的解决方案:

我想我有点愚蠢......但我知道这与从内存中释放视频有关。我得到的解决方案是导入 QuickTime 框架(我不知道它与 QTKit 框架不同)并DisposeMovie()使用Movies.h

这么简单的解决方案,却给我带来了很多麻烦。

祝所有可能遇到同样问题的开发人员好运:)

于 2012-04-27T13:46:59.967 回答