• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

CocoaでAVFoundationを使うサンプル


Commit MetaInfo

Revisionb857b11b4a45fa242de0d4185893afe26b5e6c28 (tree)
Time2012-06-12 02:44:26
AuthorHori <masaki@MBP....>
CommiterHori

Log Message

timeObserver

Change Summary

Incremental Difference

--- a/testAVFoundation/HMDocument.m
+++ b/testAVFoundation/HMDocument.m
@@ -17,6 +17,7 @@
1717 @property (retain, nonatomic) AVURLAsset *asset;
1818 @property (retain, nonatomic) AVPlayerItem *item;
1919 @property (retain, nonatomic) AVPlayer *player;
20+@property (retain, nonatomic) id timeObserver;
2021
2122 @property (retain, nonatomic) CATextLayer *captionLayer;
2223 @property (copy, nonatomic) NSString *caption;
@@ -31,6 +32,7 @@
3132 @synthesize asset = _asset;
3233 @synthesize item = _item;
3334 @synthesize player = _player;
35+@synthesize timeObserver = _timeObserver;
3436 @synthesize captionLayer = _captionLayer;
3537 @synthesize caption = _caption;
3638
@@ -136,7 +138,7 @@
136138 [_asset autorelease];
137139 _asset = [asset retain];
138140
139- [_asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject: @"tracks"]
141+ [_asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"]
140142 completionHandler:
141143 ^ {
142144 dispatch_async(dispatch_get_main_queue(),
@@ -177,6 +179,8 @@
177179 if(_player) {
178180 [_player removeObserver:self forKeyPath:@"rate"];
179181 [_player pause];
182+ [_player removeTimeObserver:self.timeObserver];
183+ self.timeObserver = nil;
180184 }
181185 [_player autorelease];
182186 _player = [player retain];
@@ -187,13 +191,13 @@
187191 forKeyPath:@"rate"
188192 options:0
189193 context:_player];
190-
191- [_player addPeriodicTimeObserverForInterval:CMTimeMake(4, 100)
192- queue:dispatch_get_main_queue()
193- usingBlock: ^(CMTime time) {
194- Float64 seconds = CMTimeGetSeconds(time);
195- self.currentTime = seconds;
196- }];
194+ self.timeObserver = [_player addPeriodicTimeObserverForInterval:CMTimeMake(4, 100)
195+ queue:dispatch_get_main_queue()
196+ usingBlock:
197+ ^(CMTime time) {
198+ Float64 seconds = CMTimeGetSeconds(time);
199+ self.currentTime = seconds;
200+ }];
197201
198202 AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:_player];
199203 [_view setWantsLayer:YES];
@@ -259,6 +263,8 @@
259263 [_player removeObserver:self forKeyPath:@"rate"];
260264 [_item removeObserver:self forKeyPath:@"status"];
261265 [_player pause];
266+ [_player removeTimeObserver:self.timeObserver];
267+ self.timeObserver = nil;
262268 }
263269
264270 #pragma mark -
@@ -280,9 +286,10 @@
280286 }
281287 - (IBAction)changeCurrentTime:(id)sender
282288 {
289+ CMTime halfSeconds = CMTimeMake(5, 10);
283290 CGFloat timeValue = [sender doubleValue] * 1000.0;
284291 CMTime time = CMTimeMake(timeValue, 1000);
285- [_item seekToTime:time];
292+ [_item seekToTime:time toleranceBefore:halfSeconds toleranceAfter:halfSeconds];
286293 }
287294 - (IBAction)volumeUp:(id)sender
288295 {