如何获取在 iOS 应用中观看的持续时间视频
Posted
技术标签:
【中文标题】如何获取在 iOS 应用中观看的持续时间视频【英文标题】:how to get the time duration video watched in iOS app 【发布时间】:2013-12-17 10:40:15 【问题描述】:我正在制作一个 iphone 应用程序,在该应用程序中从 url 服务器播放视频效果很好,但我想说视频是 3 分钟或 4 分钟,用户观看视频的时间是多少,就像播放视频 1 分钟一样停止。
NSURL *url = [NSURL URLWithString:newString];
NSLog(@"New File name is %@",newString);
mp = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
[[mp moviePlayer] prepareToPlay];
[[mp moviePlayer] setUseApplicationAudiosession:NO];
[[mp moviePlayer] setShouldAutoplay:YES];
[[mp moviePlayer] setControlStyle:2];
//[[mp moviePlayer] setRepeatMode:MPMovieRepeatModeOne];
[self presentMoviePlayerViewControllerAnimated:mp];
【问题讨论】:
【参考方案1】:我想,你可以在呈现MPMoviePlayerViewController
的时候启动NSTimer
,然后收听MPMoviePlayerPlaybackDidFinishNotification
或MPMoviePlayerPlaybackDidFinishReasonUserInfoKey
的通知并计算时间。
编辑
最好的方法是使用MPMoviePlayerPlaybackDidFinishNotification
通知访问MPMediaPlayback的currentPlaybackTime
属性
这将为您提供实际时间。 在您的情况下,您可以以
的身份访问此属性 NSTimeInterval time = mp.moviePlayer.currentPlaybackTime;
【讨论】:
如果网速很慢,2 分钟的视频需要 5 分钟才能播放【参考方案2】:您可以使用通知中心:
1- 在 viewDidLoad 上:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playbackStateDidChange:)
name:@"MPAVControllerPlaybackStateChangedNotification"
object:nil];
2- 实现这个方法(秒是一个整数):
- (void)playbackStateDidChange:(NSNotification *)note
NSLog(@"note.name=%@ state=%d", note.name, [[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue]);
if ([[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue] == 2)
timer= [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(increaseSeconds) userInfo:nil repeats:YES];
NSLog(@"seconds: %i", seconds);
else if([[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue] == 1)
[timer invalidate];
NSLog(@"seconds: %i", seconds);
else if([[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue] == 0)
NSLog(@"Total watched: %i", seconds);
[self dismissMoviePlayerViewControllerAnimated];
其中 MPAVControllerNewStateParameter == 2(视频开始) MPAVControllerNewStateParameter == 1(视频停止) MPAVControllerNewStateParameter == 0(视频完成或按下“完成”)
3- 最后实现这个方法:
-(void) increaseSeconds
seconds++;
【讨论】:
【参考方案3】:如果您检查参考手册MPMoviePlayerController
符合MPMediaPlayback
协议
所以MPMediaPlayback
协议包含该属性
@property(nonatomic) NSTimeInterval currentPlaybackTime
播放头的当前位置。 (必填)
示例:
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
...
NSTimeInterval timeInterval = player.currentPlaybackTime;
链接:
MPMoviePlayerController
MPMediaPlayback
希望这会有所帮助!
【讨论】:
我添加了一个例子。以上是关于如何获取在 iOS 应用中观看的持续时间视频的主要内容,如果未能解决你的问题,请参考以下文章
iOS-如何使用 AVAsset 或 AVURLAsset 获取 .mp4 文件的持续时间
IOS - 如何以编程方式阻止从另一个应用程序打开一个应用程序?