热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

iOS开发网络篇—实现一个视频播放客户端小应用

iOS开发网络篇—实现一个视频播放客户端小应用本文转载于:http:blog.csdn.netgf771115articledetails45074065其它资源参考:iOS开发系列--音

iOS开发网络篇—实现一个视频播放客户端小应用



本文转载于:http://blog.csdn.net/gf771115/article/details/45074065

其它资源参考:iOS开发系列--音频播放、录音、视频播放、拍照、视频录制


一、实现视频播放功能

实现效果:

启动项目后,点击对应的cell,即可播放视频。

96
97 //这里使用了第三方框架
98 [cell.imageView setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:[UIImage imageNamed:@"placeholder"]];
99
100 return cell;
101 }
102
103 //设置cell的行高
104 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
105 {
106 return 70;
107 }
108
109 //播放视频
110 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
111 {
112 //取出数据模型
113 YYviodesModel *model=self.videos[indexPath.row];
114
115 //创建视屏播放器
116 // MPMoviePlayerController 可以随意控制播放器的尺寸
117 //MPMoviePlayerViewController只能全屏播放
118
119 NSString *url = [NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/%@", model.url];
120 NSURL *videoUrl=[NSURL URLWithString:url];
121 MPMoviePlayerViewController *movieVc=[[MPMoviePlayerViewController alloc]initWithContentURL:videoUrl];
122 //弹出播放器
123 [self presentMoviePlayerViewControllerAnimated:movieVc];
124
125 }
126 @end

注意:要是有视频播放功能,还需要导入下面的框架。


在主控制器文件中,导入框架的主头文件。

 

二、实现屏幕方向的控制

说明:iphone支持三个方向的播放。

程序支持三个方向。(不支持向下颠倒-home键在上面)      如果要求只支持竖屏,那么最直接的做法是直接在配置文件中把另外两个勾去掉。 实现屏幕控制的方法(supported)。
1 #pragma mark-实现屏幕方向的控制
2 /**
3 * 控制当前控制器支持那些方向
4 *
5 * 返回值是 UIInterfaceOrientationMask*
6 */
7 -(NSUInteger)supportedInterfaceOrientations
8 {/**
9 *UIInterfaceOrientationMaskPortrait:竖屏(正常)
10 *UIInterfaceOrientationMaskPortraitUpsideDown:竖屏(上下颠倒)
11 *UIInterfaceOrientationMaskLandscapeLeft:横屏向左
12 *UIInterfaceOrientationMaskLandscapeRight:横屏向右
13 *UIInterfaceOrientationMaskLandscape:横屏(左右都支持)
14 *UIInterfaceOrientationMaskAll:所有都支持
15 */
16 return UIInterfaceOrientationMaskAll;
17 }

说明:最外面的控制器不是tableviewcontrol控制器,而是导航控制器。如果要实现“视屏列表界面只支持竖屏方向,而播放界面只支持横屏”的需求,那么应该自定义一个导航控制器,重写实现屏幕方向的方法。


(1)实现“视屏列表界面只支持竖屏方向

自定义一个YYNavigationController,其继承自UINavigationController

1 //
2 // YYNavigationController.m
3 // 01-文顶顶客户端
4 //
5 // Created by apple on 14-6-29.
6 // Copyright (c) 2014年 itcase. All rights reserved.
7 //
8
9 #import "YYNavigationController.h"
10
11 @interface YYNavigationController ()
12
13 @end
14
15 @implementation YYNavigationController
16
17 //视屏列表界面只支持竖屏方向
18 #pragma mark-实现屏幕方向的控制
19 /**
20 * 控制当前控制器支持那些方向
21 *
22 * 返回值是 UIInterfaceOrientationMask*
23 */
24 -(NSUInteger)supportedInterfaceOrientations
25 {/**
26 *UIInterfaceOrientationMaskPortrait:竖屏(正常)
27 *UIInterfaceOrientationMaskPortraitUpsideDown:竖屏(上下颠倒)
28 *UIInterfaceOrientationMaskLandscapeLeft:横屏向左
29 *UIInterfaceOrientationMaskLandscapeRight:横屏向右
30 *UIInterfaceOrientationMaskLandscape:横屏(左右都支持)
31 *UIInterfaceOrientationMaskAll:所有都支持
32 */
33 return UIInterfaceOrientationMaskPortrait;
34 }
35 @end

(2)实现播放界面只支持横屏

自定义一个YYMoviePlayerViewController,其继承自MPMoviePlayerViewController。

 1 //
2 // YYMoviePlayerViewController.m
3 // 01-文顶顶客户端
4 //
5 // Created by apple on 14-6-29.
6 // Copyright (c) 2014年 itcase. All rights reserved.
7 //
8
9 #import "YYMoviePlayerViewController.h"
10
11 @interface YYMoviePlayerViewController ()
12
13 @end
14
15 @implementation YYMoviePlayerViewController
16
17
18 //播放界面只支持横屏
19 #pragma mark-实现屏幕方向的控制
20
21 -(NSUInteger)supportedInterfaceOrientations
22 {
23 return UIInterfaceOrientationMaskLandscape;
24 }
25
26 @end

主控制器中播放视频部分的代码修改如下:

导入头文件

 1 //播放视频
2 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
3 {
4 //取出数据模型
5 YYviodesModel *model=self.videos[indexPath.row];
6
7 //创建视屏播放器
8 // MPMoviePlayerController 可以随意控制播放器的尺寸
9 //MPMoviePlayerViewController只能全屏播放
10
11 NSString *url = [NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/%@", model.url];
12 NSURL *videoUrl=[NSURL URLWithString:url];
13 YYMoviePlayerViewController *movieVc=[[YYMoviePlayerViewController alloc]initWithContentURL:videoUrl];
14 //弹出播放器
15 [self presentMoviePlayerViewControllerAnimated:movieVc];
16 }


三、细节处理

1.问题:系统自带的MPMoviePlayerViewController,当程序进入后台的时候就会自动销毁。如何让其保持状态进入后台前的状态?

原因:当系统进入后台的时候会发出通知:UIApplicationDidEnterBackgroundNotification,而系统的MPMoviePlayerViewController会自动监听该通知,当监听到进入后台的这个通知后,MPMoviePlayerViewController会调用方法销毁。

解决方法:移除通知

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil];

//说明:移除self监听的名称为UIApplicationDidEnterBackgroundNotification的通知,参数为空。

处理代码:

 1 //
2 // YYMoviePlayerViewController.m
3 // 01-文顶顶客户端
4 //
5 // Created by apple on 14-6-29.
6 // Copyright (c) 2014年 itcase. All rights reserved.
7 //
8
9 #import "YYMoviePlayerViewController.h"
10
11 @interface YYMoviePlayerViewController ()
12
13 @end
14
15 @implementation YYMoviePlayerViewController
16
17 -(void)viewDidLoad
18 {
19 [super viewDidLoad];
20 //移除程序进入后台的通知
21 [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil];
22 }
23 //播放界面只支持横屏
24 #pragma mark-实现屏幕方向的控制
25
26 -(NSUInteger)supportedInterfaceOrientations
27 {
28 return UIInterfaceOrientationMaskLandscape;
29 }
30
31 @end

补充:1如果模拟器上的应用程序过多,可以把所有的应用程序都进行清除。

2在iOS中之支持一部分格式(通常支持MAC机上支持的格式,如MP4等)

如果要播放一些不支持的格式,可以借助软件解码器。

通常要播放视频,都需要进行解码,解码分为两类:

(1)硬件解码:硬件解码更快,硬件设备默认支持的格式

(2)软件解码:耗电大(通常不支持硬件解码的只能通过软件解码的方式进行播放)如:VLC/ffmpeg(流媒体软件解码工具)



推荐阅读
  • 2016年5月3日,巴巴腾机器人正式亮相,仅一天时间便突破百万众筹。这款机器人凭借其独特的智能功能和出色的表现引起了广泛关注。它不仅具备多种令人意想不到的智能化特性,还在人机交互方面展现出卓越的能力,深受用户喜爱。 ... [详细]
  • 本文详细介绍了如何安全地手动卸载Exchange Server 2003,以确保系统的稳定性和数据的完整性。根据微软官方支持文档(https://support.microsoft.com/kb833396/zh-cn),在进行卸载操作前,需要特别注意备份重要数据,并遵循一系列严格的步骤,以避免对现有网络环境造成不利影响。此外,文章还提供了详细的故障排除指南,帮助管理员在遇到问题时能够迅速解决,确保整个卸载过程顺利进行。 ... [详细]
  • 动态壁纸 LiveWallPaper:让您的桌面栩栩如生(第二篇)
    在本文中,我们将继续探讨如何开发动态壁纸 LiveWallPaper,使您的桌面更加生动有趣。作为 2010 年 Google 暑期大学生博客分享大赛 Android 篇的一部分,我们将详细介绍 Ed Burnette 的《Hello, Android》第三版中的相关内容,并分享一些实用的开发技巧和经验。通过本篇文章,您将了解到如何利用 Android SDK 创建引人入胜的动态壁纸,提升用户体验。 ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 从文本中全面提取所有URL链接
    本文探讨了一种高效的方法,用于从大量文本数据中全面提取所有URL链接。通过使用正则表达式和Python编程语言,该方法能够准确识别并提取出各种格式的URL,包括HTTP、HTTPS等常见协议。实验结果表明,该方法在处理大规模文本数据时具有较高的准确率和效率。 ... [详细]
  • 本文详细介绍了在 Vue.js 前端框架中集成 vue-i18n 插件以实现多语言支持的方法。通过具体的配置步骤和示例代码,帮助开发者快速掌握如何在项目中实现国际化功能,提升用户体验。同时,文章还探讨了常见的多语言切换问题及解决方案,为开发人员提供了实用的参考。 ... [详细]
  • 在腾讯云服务器上部署Nginx的详细指南中,首先需要确保安装必要的依赖包。如果这些依赖包已安装,可直接跳过此步骤。具体命令包括 `yum -y install gcc gcc-c++ wget net-tools pcre-devel zlib-devel`。接下来,本文将详细介绍如何下载、编译和配置Nginx,以确保其在腾讯云服务器上顺利运行。此外,还将提供一些优化建议,帮助用户提升Nginx的性能和安全性。 ... [详细]
  • 当前物联网领域十大核心技术解析:涵盖哪些关键技术?
    经过近十年的技术革新,物联网已悄然渗透到日常生活中,对社会产生了深远影响。本文将详细解析当前物联网领域的十大核心关键技术,包括但不限于:1. 军事物联网技术,该技术通过先进的感知设备实现战场环境的实时监测与数据传输,提升作战效能和决策效率。其他关键技术还包括传感器网络、边缘计算、大数据分析等,这些技术共同推动了物联网的快速发展和广泛应用。 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • Java 点餐系统源代码附带管理后台(免费提供)
    本项目提供了一套基于 Java 的点餐系统,包括前端小程序和后端管理平台。采用 Spring Boot 和 SSM 框架,结合 MySQL 和 Redis 数据库技术,适用于学习和二次开发。有需要源代码的开发者可以通过私信联系,免费获取下载链接。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • 在网络故障排查中,tcpdump 是一款强大的工具,尤其在 Linux 环境下。尽管开发环境中问题较少,但在测试或生产环境中,往往会遇到各种难以预料的异常情况。通过在问题发生的环境中启用 tcpdump 进行抓包,并重现问题,可以获取到宝贵的原始数据,为问题的诊断提供关键线索。本文将详细介绍如何使用 tcpdump 进行实战操作,帮助读者掌握这一技能。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 移动搜索格局已定,切勿误解微信搜索的真正实力
    近期,微信新版本的内测界面曝光,新增了朋友圈搜索和附近商户搜索功能。种种迹象显示,微信正不断强化其搜索能力。尽管移动搜索市场格局已基本稳定,但不应低估微信搜索的潜力。微信不仅在聊天工具、移动浏览器和新闻阅读等领域持续发力,还在通过搜索功能进一步巩固其在移动互联网领域的地位。 ... [详细]
author-avatar
江南西道longge
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有