记录下用MPMoviePlayerViewController做视频播放的一些问题

做视频播放的时候,由于要自定义界面,所以使用MPMoviePlayerController时,样式用的MPMovieControlStyleNone

进度,音量等用的自己的界面。但是在需要全屏显示的时候,就用到了MPMoviePlayerViewController

以下是点击横屏播放的代码:通过改变view的tranform达到旋转的效果

- (IBAction)showFullScreenClick:(id)sender {
    isFullScreen = YES;

    NSString *url = [NSString stringWithFormat:@"%@%@",IMAGE_DOMAIN,[self.data objectForKey:@"content"]];
    if (moviePlayerView ==nil) {
        moviePlayerView = [[MPMoviePlayerViewController alloc]
                           initWithContentURL:[NSURL URLWithString:url]];
        [moviePlayerView.moviePlayer prepareToPlay];
        moviePlayerView.view.frame = CGRectMake(0, 0, self.view.bounds.size.height, self.view.bounds.size.width);
        moviePlayerView.view.center = CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2);
        CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI/2);
        [moviePlayerView.view setTransform:transform];
    }
    [self.view addSubview:moviePlayerView.view];

    [self hideStatusBar];
    [moviePlayerView.moviePlayer play];

}

在旋转之后会出现两个状态栏,一个是播放器自带的状态栏(随着播放器的方向改变),另外的是系统的状态栏。

参考这位仁兄的博客 http://blog.csdn.net/chchong1234/article/details/24649083?utm_source=tuicool

所以在全屏后,就需要隐藏系统状态栏,返回父视图之后再显示

- (BOOL)prefersStatusBarHidden
{
    return isHiddenStatusBar;
}

- (void)showStatusBar
{
    isHiddenStatusBar = NO;
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
        [self prefersStatusBarHidden];
        [self setNeedsStatusBarAppearanceUpdate];
    }
}

- (void)hideStatusBar
{
    isHiddenStatusBar = YES;
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
        [self prefersStatusBarHidden];
        [self setNeedsStatusBarAppearanceUpdate];
    }
}

这时候还要在info文件设置两个变量   参考 http://www.cocoachina.com/bbs/read.php?tid=159175

Status bar is initially hidden 的數值外,並需另外新增 View
controller-based status bar appearance 欄位,並設定值為 NO。

这就可以了,还有iOS8相关问题,参考http://www.cocoachina.com/bbs/read.php?tid-233036-page-1.html

个人目前做的视频播放,不是流媒体的方式,还有很多功能待完善,例如

1.播放过程出现卡顿不能播,点暂停在开始又可以播的问题

2.播放时,播放工具栏的隐藏消失,(产品刚提的需求),这个倒不难

3.播放时拖拽进度。这个不用流媒体的方式,MPMoviePlayerViewController提供的接口很有限啊,在定制了界面之后,很多不能用系统的播放。

这里有个github上的第三方播放器,不敢独享,https://github.com/alobi/ALMoviePlayerController

以后还要研究的流媒体:http://www.cnblogs.com/ikodota/archive/2012/09/12/compile_ffmpeg_for_iOS.html

好吧先整理到这,功能慢慢完善。欢迎也在做视频的童鞋相互讨论下相关技术

时间: 2024-10-14 02:52:37

记录下用MPMoviePlayerViewController做视频播放的一些问题的相关文章

记录下我曾经那些认为的小想法

每隔一段时间,脑袋瓜子就会冒出一些自认为是小想法. 这篇文章就记录下我以前的一些小想法以及以后的小想法,一种想记录下来,一直也没有机会和时间.直到现在一琢磨,赶紧记录下来吧,也许很多时候的灵光一闪真是一个不错的idea.记录下来前面想起的和现在以及以后的idea,因此这篇文章会不断地实时更新,越来越完善. IDea1 2012年,刚步入高中的时候的第二学期,依稀记得那时候的智能手机还没有想象的普遍,在校门口当时接触了第一台智能机,一个高仿iphone 4s的手机,当时和同学一狠心每人买了一台.当

手把手教你做视频播放器(五)

第7节 竖屏的播放界面 播放视频的功能放在一个单独的Activity当中.我们将为它们设置横竖屏两种布局. 在竖屏的时候,上半部分播放视频,下半部分显示视频信息: 在设备旋转成横屏的时候,视频进行全屏播放: 7.1 启动视频播放界面 当点击视频列表的视频项时,就启动播放器播放对应的视频.这里我们要创建一个名字叫做VideoPlayer的Activity,用它来完成视频播放的任务. 另外,还要为ListView添加一个数据项点击时的监听函数, 实现ListView的OnItemClickListe

gulp 粗粗学习 记录下

看视频学习 粗粗记录下 以便以后学习 1.初记录 gulp.task //定义一个任务 gulp.src //锁定到做task任务的文件路径 gulp.dest //锁定到任务做完后文件去向的路径 gulp.watch //监控的一个任务 可以看做一个人任务 pipe:任务流的函数 2.常用的方法记录 需要把gulp 放在gulpfile.js // 定义一个任务 任务名:message 执行任务:gulp message gulp.task('message', function(){ ret

谷歌眼镜记录下的真实朝鲜

今年四月份,Kenny Zhu利用谷歌眼镜在朝鲜拍下了许多照片,记录了真实的朝鲜,这也是全世界首次使用可穿戴设备拍摄的朝鲜照片. 这些照片与普通相机拍摄的朝鲜照片并没有太大不同,但是由于是第一人称视角,拍摄位置更加随意,观众更能体会身在其中的感觉,仿佛是自己在亲身游览这一神秘国度. 在朝鲜,拍摄照片有很严格的规定,游客只允许拍摄反应朝鲜正面形象的照片,Kenny Zhu也是冒险拍了一些不被允许的照片,这也多亏了谷歌眼镜拍照不太引人注意的特点. 谷歌眼镜记录下的真实朝鲜,布布扣,bubuko.co

Winform程序当运行exe 停止响应时 如何记录下日志?

通常我们在写程序时会对程序中可能出错的程序段用try catch 捕捉获取.这样程序运行中一旦有bug.用户也能快速定位到错误段去了解出错原因. 遇到的问题: 但是遇到这样的情况 有时候没有用到try catch 时出错了.程序直接停止响应.这时候对于开发人员就比较伤脑筋.无法快速debug C#程序如何捕捉未try/catch的异常--不弹"XXX已停止工作"报错框? 解决方法: 1:在Main主程序中添加代码 设置 Windows 窗体线程和其他线程上发生的异常发生异常的事件处理的

记录下自己(持续更新)

本身就是个怀旧的人,无聊的时间记录下自己生活的点点滴滴, 更无聊的时候看下喽!那就从衣食住行乐随便说一下啦.(个人观点)互联网时代了,说没有隐私也可以,说有隐私也行,就看别人怎么对你了,我不喜欢对事情 下定论,我觉着一切皆有可能.(想把衣食住行什么的分开来写,试了几次,格式总是不太好,也不太喜欢拘束,就随便加了个分隔线,写到哪就算哪了) --------------------------------------------------------------------------分隔线---

VS2008下 使用C#做windows mobile 6.0开发 使用sqlite数据库

我使用的VS2008英文版的,不喜欢用中文版的. 现在用C#做相关开发,用到sqlite数据库. 网上找了很多,真正的教程特别少,都是贴的一堆垃圾代码.要么是无法配置通过的,错误一大堆,哎. 最后还是自己想办法解决了. 1.下载sqlite的运行库,首先网上的教程是让我们去http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki下载,但是页面上那么多,我们该选择哪个呢?   网页翻到最下面的  Legacy Ver

记录下UIButton的图文妙用和子控件的优先显示

UIButton的用处特别多,这里只记录下把按钮应用在图文显示的场景,和需要把图片作为按钮的背景图片显示场景: 另外记录下在父控件的子控件优先显示方法(控件置于最前面和置于最后面). 先上效果图: 1.当在某个地方既需要显示图片,还需要显示文字,另外还要有点击功能的时候,这时按钮是个很好的选择. 按钮中的图片和文字的距离可以自由调整,图片的也可以上下左右翻转.日常项目中像这些场景都是很容易碰到的. 按钮图文设置.图文位置移动.按钮中图片翻转示例代码: /** 测试图文并茂的按钮,图文移动 */

记录下zend studio 的xdebug 在调试安装

没有单步调试 看不到变量的变化过程,是没法提高DEBUG效率的.折腾了好久终于把xdebug+zendstudio搞定了.虽然网上有教程,但实践起来 还是碰到了些问题,在此记录下. 1,安装zend stuido 这里就不说这个了,必须的 2,安装phpstudy 主要是要安装php,apahce.没有本地服务器,怎么能调试呢. 3,xdebug 安装 在这里,我根据网上很多教程去下载了xdebug.但其实不需要,你装好了phpstudy就已经默认有了xdebug.dll.为什么不建议去网上再下