0

私は、ビデオ録画用の厳密な「ステージ」セットを備えたプログラムに取り組んでいます... ビデオ ブースのようなものと考えてください。Cocoa で完全にコーディングされた OSX Lion でプログラムを実行しています。

「ステージ」は次のとおりです。

  1. ようこそ画面
  2. 録音開始
  3. ビデオの再生
  4. 保存・削除の確認

ステージ 1、2、4 は毎回完璧に機能します。そして、ステージ 3 は初めて完全に機能します。

プロセスを通過する 2 回目以降では、ビデオの再生 ( QTMovieViewNSPanel 内に埋め込まれた によって行われます) は、最初のランスルーからのビデオに設定されたままです。

私は 2 つの方法を設定しています。1 つはボタンを押すことによって起動され、もう 1 つはプログラム内の他のコードによって起動されます。これらの方法は両方とも発火します。私は肯定的です。私が知らないのは、なぜ[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 に答える