24

(ローカル) ビデオの長さを取得し、個々のフレームにUIImages としてアクセスする必要があります。今まではこれを使っていましMPMoviePlayerControllerた。

最初にMPMovieDurationAvailableNotificationイベントに登録してから、 を呼び出しますprepareToPlay。イベントが受信されたら、動画の長さを記録し、. 経由でフレームをリクエストしrequestThumbnailImagesAtTimesます。

これは機能しますが、ビューに追加していなくてもビデオの再生が開始されるようです (バックグラウンドでオーディオの再生が聞こえます)。

実際にビデオを再生せずにビデオの長さとフレームを取得する方法はありますか?

4

4 に答える 4

42

期間を取得するには:

NSURL *sourceMovieURL = [NSURL fileURLWithPath:somePath];
AVURLAsset *sourceAsset = [AVURLAsset URLAssetWithURL:sourceMovieURL options:nil];
CMTime duration = sourceAsset.duration;

フレームグラブを取得するには:

AVAssetImageGenerator* generator = [AVAssetImageGenerator assetImageGeneratorWithAsset:destinationAsset];

//Get the 1st frame 3 seconds in
int frameTimeStart = 3;
int frameLocation = 1;

//Snatch a frame
CGImageRef frameRef = [generator copyCGImageAtTime:CMTimeMake(frameTimeStart,frameLocation) actualTime:nil error:nil];
于 2013-02-07T05:22:10.403 に答える
11

このようにすんなり入ることができます

func getMediaDuration(url: NSURL!) -> Float64{
    let asset : AVURLAsset = AVURLAsset(URL: url) as AVURLAsset
    let duration : CMTime = asset.duration
    return CMTimeGetSeconds(duration)
}
于 2015-03-09T14:33:13.980 に答える
6

呼び出しsetShouldAutoPlay:NOは、MPMoviePlayerControllerでトリックを行います。

 moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL: movieURL];
[moviePlayerController setShouldAutoplay:NO];   
[moviePlayerController prepareToPlay];

編集:私は説明なしで反対票を投じていますが、私はこの答えを支持します。使用する必要がある場合MPMoviePlayerController、これによりメディアの自動再生が妨げられますが、それでも私の元の質問に従って期間とサムネイルを取得できます。

于 2013-02-07T04:48:14.033 に答える