3

我正在尝试在某个时间点查找视频文件。假设视频时长为 5 分钟,而我在 110 秒时开始播放。

当我从头开始播放时,一切正常,但是,当我尝试查找文件时,我可以听到音频但看不到视频。我首先认为这可能是我加载子视图的顺序问题,但我仍然可以看到(并使用)播放器的控件。滑回 0:00 开始播放视频。

以下是我的视频课程中的代码。initIntoView 方法接受 aUIView然后返回修改后的副本,然后将其写入主视图。提前为凌乱的代码道歉。我对Objective-C还是很陌生。

初始化视频视图

- (WWFVideo*) initIntoView: (UIView*) view withContent:(NSDictionary*)contentDict{
    self=[super init];
    viewRef=view;
    contentData = contentDict;
    NSURL *videoUrl = [[NSURL alloc]initWithString:[contentDict objectForKey:@"cnloc"]]; //Returns a HTTP link to my video file (MP4, H.246, AAC Audio)
    videoController = [[MPMoviePlayerController alloc] init];
    videoController.movieSourceType = MPMovieSourceTypeFile;
    [videoController setContentURL:videoUrl];   
    videoController.view.frame = viewRef.bounds;
    [videoController.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
    [viewRef addSubview:videoController.view];
    return self;
}

开始播放视频

-(void)play:(int)offset { //Offset is "110"
    [videoController setInitialPlaybackTime:offset];
    [videoController play];
}

我尝试viewRef在视频开始播放之前和之后添加 videoController,但结果相同。

我也尝试过使用MPMoviePlayerViewController无济于事。

我尝试的另一件事是将流类型更改为,MPMovieSourceTypeStreaming但似乎没有效果。

如果我错过了任何更重要的代码,请询问,我会看看我能做什么。

编辑:
Xcode 4.6.3
iOS 6
在 iPad 2 上测试

编辑#2:
在模拟器上完美运行,只是在设备上不行。

4

1 回答 1

2

在尝试拼凑一个示例应用程序以上传到这里后,我发现Big Buck Bunny 的 w3 版本运行良好。这表明这是一个编码问题,而不是一个客观的 C 问题。

我已经重新编码了我之前尝试播放的相同文件,但现在使用baseline以下命令使用配置文件:

ffmpeg -i {filename} -acodec aac -ac 2 -strict experimental -ab 160k -s {ssize} -vcodec libx264 -preset slow -profile:v baseline -level 30 -maxrate 10000000 -bufsize 10000000 -b 1200k -f mp4 -线程 0 {文件名}.ipad.mp4

我通过这个 Stack Overflow 帖子在这里找到了这段代码。

主要针对需要额外数据丢失鲁棒性的低成本应用程序,此配置文件用于一些视频会议和移动应用程序。此配置文件包括受约束的基线配置文件中支持的所有功能,以及可用于损失鲁棒性(或用于其他目的,例如低延迟多点视频流合成)的三个附加功能。自 2009 年约束基线配置文件定义以来,此配置文件的重要性已有所减弱。所有约束基线配置文件比特流也被视为基线配置文件比特流,因为这两个配置文件共享相同的配置文件标识符代码值。

-来自维基百科

我意识到这可能对这里寻求 Objective-C 帮助的任何人都没有帮助,但如果它只为我节省了我今天花费 5 个小时试图让它工作的人,这将是值得的。

于 2013-09-03T15:30:28.540 回答