我有一个播放HLS视频流的AVPlayer.我的用户界面提供了一行按钮,一个用于视频中的每个"章节"(按钮标记为"1","2","3").该应用程序从服务器下载一些元数据,该服务器包含以秒表示的章节切入点列表.例如,一个视频的长度为12分钟 - 章节切入点的列表为0,58,71,230,530等,等等.
当用户点击其中一个"章节按钮"时,按钮处理程序代码执行以下操作:
[self.avPlayer pause];
[self.avPlayer seekToTime: CMTimeMakeWithSeconds(seekTime, 600)
toleranceBefore: kCMTimeZero
toleranceAfter: kCMTimeZero
completionHandler: ^(BOOL finished)
{
[self.avPlayer play];
}];
Run Code Online (Sandbox Code Playgroud)
其中"seekTime"是包含切入点的局部变量(如上所述).
问题是视频并不总是从正确的点开始.有时确实如此.但有时它会在请求的seekTime之前的任何时间从十分之一秒到2秒.它永远不会在请求的seekTime之后启动.
以下是视频编码的一些统计信息:
编码器:handbrakeCLI编解码器:h.264帧率:24(实际上,23.976 - 与拍摄方式相同)视频比特率:多比特率(64/150/300/500/800/1200)音频比特率:128k关键帧:23.976(每秒1次)
我当然使用Apple mediafilesegmenter工具和variantplaylistcreator来生成播放列表.
这些文件是从Amazon Cloud/S3存储桶提供的.
我仍然不清楚的一个领域是CMTimeMakeWithSeconds - 我已经根据我读过的不同文章/文档尝试了几种变体.例如,在上面的摘录我使用:
CMTimeMakeWithSeconds(seekTime,600)
我也尝试过:
CMTimeMakeWithSeconds(seekTime,1)
我不知道哪个是正确的,虽然两个似乎产生相同的不一致结果!
我也尝试过:
CMTimeMakeWithSeconds(seekTime,23.967)
有些文章声称这就像分子/分母一样,所以n/1应该是正确的,其中'n'是秒数(如CMTimeMakeWithseconds(n,1)).但是,代码最初是由一个不同的程序员(现在已经不在了)创建的,他使用600数字作为preferredTimeScale(即CMTimeMakeWithseconds(n,600)).
任何人都可以提供任何关于我做错的线索,或者即使我想要实现的那种准确性甚至可能吗?
如果有人想要提供"替代"解决方案,我们已经在考虑将视频分成不同的流,每章一个,但我们不相信这会给我们带来相同的性能,因为更改章节需要更长的时间因为新的AVPlayerItem必须被创建和加载等等,所以如果你认为这是唯一可行的解决方案(我们希望这将达到我们想要的结果 - 即每一章都会准确地开始我们想要的地方)随意说出来.
提前致谢!
我在XCode中找到了几个对构建设置的引用,名为EXCLUDED_SOURCE_FILE_NAMES - 下面的模式暗示了它的工作原理.但我无法弄清楚如何在XCode(4.02)中使用此选项.
"EXCLUDED_SOURCE_FILE_NAMES [sdk = iphoneos*] [arch =*]"= ...
目标是在目标是模拟器时编译一个或多个源文件,并在目标是iOS设备时编译不同的源文件集.
我想我需要告诉xcode每个目标的文件列表.那么,我如何使用此设置实现它?它在XCode中的位置如何?有没有关于如何做到这一点的文件?
我还需要使用静态lib做同样的事情.具体来说 - 我有一个静态库我希望包含在我的项目中,但是lib只支持arm而不是i386,因此,在为模拟器构建时,我需要将此文件排除在链接之外!
可以这样做吗?
在iphone应用程序中,我创建了一个MPMoviePlayerController并指示它开始以全屏模式播放视频(我认为除了iPhone上的F/S模式之外没有任何选项,就像你可以在ipad上一样).
一旦全屏播放器出现,整个屏幕都是黑色的,有时几秒钟内没有可见的控件(设置为MPMovieControlStyleDefault).
在一秒钟或三秒后,控件出现并显示视频的第一帧,然后视频开始缓冲并正确显示自动播放.
我已经尝试将它添加为电影播放器视图的子视图,即电影播放器的背景视图,作为电影播放器视图的超级视图的子视图(我当然没想到它会工作).我认为这里的关键是F/S电影播放器视图与不在F/S模式下的电影播放器视图不同.是?有没有办法访问全屏视图?
2.如果玩家以全屏模式启动,应该能够更快地看到控件(使用DONE按钮)吗?当全屏电影播放器启动时,只有黑屏会有相当长的延迟,所以如果用户变得不耐烦,用户就无法点击完成按钮(因此唯一的其他选择是退出应用程序 - 更愿意提供选项如果他们想要取消播放.
提前致谢!
我试图在一个图层上放置一系列精灵,但由于我想将所有精灵作为一组移动,我创建了一个CocosNode,将其设置为与屏幕相同的大小并将其放置在屏幕的中心.屏幕,然后将Sprite添加到该节点(lightNode),而不是将它们添加到图层.
我所看到的是,与将它们放在图层而不是在lightNode中相比,精灵不会出现在正确的(相同的?)位置.
我使用XCode Cocos2d应用程序模板"Hello World"制作了一个测试程序来显示问题 - 然后我用这段代码替换了HelloWorldScene.m中HelloWorld类的-init()方法.
-(id) init
{
if( (self=[super init] ))
{
// create my parent node that will contain all the related sprites
lightPane = [[CocosNode alloc] init];
CGSize paneSize = { 480, 320 };
[lightPane setContentSize:paneSize];
[lightPane setPosition:ccp(240, 160)];
// add pane to layer
[self addChild:lightPane z:0];
// add a series of sprites to demonstrate the problem
int y = 40;
int x;
for (x=30; x<300; x+=20)
{
Sprite *sp = [Sprite spriteWithFile:@"pause.png"];
[sp setPosition:ccp(x, …Run Code Online (Sandbox Code Playgroud)