iOS不能播放Mp4视频和tableView刷新抖动问题全解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS不能播放Mp4视频和tableView刷新抖动问题全解相关的知识,希望对你有一定的参考价值。

参考技术A

播放异常的视频(埃及四千年)

异常表现 :视频加载缓慢,播放时,有音频无页面或无音频无画面
单品视频地址: http://imgv36.ddimg.cn/video/item/228e8afb16ab45c58d47d3ee8f9dfd48.mp

若编码格式有问题 建议按照编码格式 h.264/aac,重新编码,导出视频。

去一个例子:
参照正常播放的单品:( 孙俪遇见你,陪伴你)
单品视频地址: http://imgv37.ddimg.cn/video/item/d0771333d8f7441d961d7c4eae67c049.mp4
视频导出时的 扫描方式:逐行扫描

问题视频的视频导出时的 扫描方式:隔行扫描 或 ”上场优先“等

①、剪辑视频时,调整导出设置,请谨慎调整导出设置。
②、导出视频的设置正确后,还未能解决,建议按照编码格式 h.264/aac,重新编码,导出视频。

因为ios 11后系统默认开启Self-Sizing,首先要知道Self-Sizing是个什么东东。官方文档是这样解释的:大概就是说我们不用再自己去计算cell的高度了,只要设置好这两个属性,约束好布局,系统会自动计算好cell的高度。
iOS11以后,Self-Sizing默认开启,包括Headers, footers。如果项目中没使用estimatedRowHeight属性,在iOS11下会有奇奇怪怪的现象,因为iOS11之前,estimatedRowHeight默认为0,Self-Sizing自动打开后,contentSize和contentOffset都可能发生改变。
iOS tableview开启高度估算(Self-Sizing),reloadData的时候不再全部计算高度。

①、在初始化tableview的时候加上这几行

②、若上述方法不能解决问题,请移除上述设置。
改用部分隐藏的直接设置为0 ,需要预估高度的,配置一个预估高度。

③、还未解决,采用预计算,缓存cell或header或footer高度,直接代理方法返回吧。

MP 电影播放器​​视图控制器滞后于 ios 中的视频播放

【中文标题】MP 电影播放器​​视图控制器滞后于 ios 中的视频播放【英文标题】:MPMovie player ViewController lag the video play in ios 【发布时间】:2013-06-13 11:01:26 【问题描述】:

我想在当前视图控制器上全屏播放视频。 所以我正在使用 MPMoviePlayerViewController 播放全屏视频,但问题是它播放不流畅。 播放视频时有点滞后。 这是我用来播放全屏视频的代码,它存储在我的手机/ipad 文档目录中

-(void)PlayVideo:(NSString *)videoFilePath
  
NSURL *videoURL = [NSURL fileURLWithPath:videoFilePath];

NSLog(@"videoURL: %@", videoURL);

MPMoviePlayerViewController *playerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL];

// Remove the movie player view controller from the "playback did finish" notification observers
[[NSNotificationCenter defaultCenter] removeObserver:playerVC
                                                name:MPMoviePlayerPlaybackDidFinishNotification
                                              object:playerVC.moviePlayer];

// Register this class as an observer instead
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(movieFinishedCallback:)
                                             name:MPMoviePlayerPlaybackDidFinishNotification
                                           object:playerVC.moviePlayer];

// Set the modal transition style of your choice
playerVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

// Present the movie player view controller
[self presentViewController:playerVC animated:NO completion:nil];

// Start playback
[playerVC.moviePlayer prepareToPlay];
[playerVC.moviePlayer play];

  
- (void)movieFinishedCallback:(NSNotification*)aNotification
 
// Obtain the reason why the movie playback finished
NSNumber *finishReason = [[aNotification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];

// Dismiss the view controller ONLY when the reason is not "playback ended"
if ([finishReason intValue] != MPMovieFinishReasonPlaybackEnded)

    MPMoviePlayerController *moviePlayer = [aNotification object];

    // Remove this class from the observers
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerPlaybackDidFinishNotification
                                                  object:moviePlayer];

    // Dismiss the view controller
    [self dismissViewControllerAnimated:YES completion:Nil];
   
   

【问题讨论】:

【参考方案1】:

没有发现代码有任何问题,除了

[[NSNotificationCenter defaultCenter] removeObserver:playerVC
                                            name:MPMoviePlayerPlaybackDidFinishNotification
                                          object:playerVC.moviePlayer];

removeObserver 应该是 self 而不是 playerVC

但是,这不会引起您提到的任何问题。

我建议您尝试分析您的应用程序,这可能会将您引导至导致问题的代码。播放视频时,您可能正在后台执行某些操作,导致视频延迟。

【讨论】:

以上是关于iOS不能播放Mp4视频和tableView刷新抖动问题全解的主要内容,如果未能解决你的问题,请参考以下文章

iOS h5点播播放mp4视频遇到的坑,ios的h5不能播放视频等

解决部分mp4视频在ios上无法播放问题

video.js为啥有的视频可以播放,有的视频不能播放mp4格式 mp4视频格式都转成了h264和AAC,

ios系统下不能自动播放视频

alook浏览器如何支持mp4

为啥video格式的视频在MP4上不能播放