搜索文件时 MPMoviePlayer 播放音频但不播放视频

Posted

技术标签:

【中文标题】搜索文件时 MPMoviePlayer 播放音频但不播放视频【英文标题】:MPMoviePlayer playing audio but not video when seeking into a file 【发布时间】:2013-09-03 13:32:44 【问题描述】:

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

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

以下是我的视频课程中的代码。 initIntoView 方法接受UIView,然后返回修改后的副本,然后将其写入主视图。提前为凌乱的代码道歉。我对 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];

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

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

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

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

编辑: Xcode 4.6.3 ios 6 在 iPad 2 上进行测试

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

【问题讨论】:

在播放前添加以下行可能会加快转换速度。 [videoController prepareToPlay]; 【参考方案1】:

在尝试拼凑一个示例应用程序以上传到此处后,我发现w3 version of Big Buck Bunny 工作正常。这表明这是一个编码问题,而不是一个客观的 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 -threads 0 文件名.ipad.mp4

我在here 到this Stack Overflow post 上找到了此代码。

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

-From Wikipedia

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

【讨论】:

以上是关于搜索文件时 MPMoviePlayer 播放音频但不播放视频的主要内容,如果未能解决你的问题,请参考以下文章

MpMoviePlayer 在停止事件后加载音频

在后台使用 MPMoviePlayer 播放 mp3 文件

使用 MPMoviePlayer 播放视频

帮我选择合适的 iPhone 音频类 - MPMoviePlayer vs AVAudioPlayer vs MPMusicPlayer

如何将 KVO 添加到 MPMoviePlayer currentPlaybackTime?

如何通过内置听筒扬声器播放音频