IOS开发之——网络-视频播放-JSON解析(11)
一 概述
- 解析JSON结果到OC类
- 通过视频播放地址构成视频播放器并播放显示
- 网络请求,返回视频播放列表,点击列表中的一项进行播放
二 Main.storyboard
三 解析JSON结果到OC类
3.1 JSON数据
{"videos":[
{"id":1,"image":"resources/images/minion_01.png","length":10,"name":"小黄人 第01部","url":"resources/videos/minion_01.mp4"},{"id":2,"image":"resources/images/minion_02.png","length":12,"name":"小黄人 第02部","url":"resources/videos/minion_02.mp4"}]}
3.2 视频类(Video)
Video.h
#import <Foundation/Foundation.h>
@interface Video : NSObject
@property(nonatomic,assign) int id;
@property(nonatomic,assign) int length;
@property(nonatomic,copy) NSString *image;
@property(nonatomic,copy) NSString *name;
@property(nonatomic,copy) NSString *url;+(instancetype)videoWithDict:(NSString *)dict;@end
Video.m
#import "Video.h"@implementation Video+(instancetype)videoWithDict:(NSString *)dict
{Video *video=[[self alloc]init];[video setValuesForKeysWithDictionary:dict];return video;
}
@end
网络请求结果封装到Video
//解析json数据
NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
NSArray *videoArray=dict[@"videos"];
//NSLog(@"视频的个数为:%d",videoArray.count);
for (NSDictionary *videoDict in videoArray) {Video *video=[Video videoWithDict:videoDict];[self.videos addObject:video];}
四 通过视频播放地址构成视频播放器并播放显示
NSString *videoUrl=[NSString stringWithFormat:@"http://localhost:8080/MJServer/%@",video.url];
NSURL *url=[NSURL URLWithString:videoUrl];
MPMoviePlayerViewController *player=[[MPMoviePlayerViewController alloc]initWithContentURL:url];
//显示播放器
[self presentViewController:player animated:YES completion:nil];
五 网络请求,返回视频播放列表,点击列表中的一项进行播放
5.1 代码(ILVideosTableViewController)
#import "ILVideosTableViewController.h"
#import "MBProgressHUD+MJ.h"
#import "Video.h"
#import <SDWebImage/SDWebImage.h>
#import <MediaPlayer/MediaPlayer.h>@interface ILVideosTableViewController ()@property(nonatomic,strong) NSMutableArray *videos;@end@implementation ILVideosTableViewController-(NSMutableArray *)videos
{if (_videos==nil) {_videos=[NSMutableArray array];}return _videos;
}
- (void)viewDidLoad {[super viewDidLoad];//加载服务器的最新视频信息//1-创建URLNSURL *url=[NSURL URLWithString:@"http://localhost:8080/MJServer/video"];//2-创建请求NSURLRequest *request=[NSURLRequest requestWithURL:url];//3-发送请求[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {if (connectionError||data==nil) {[MBProgressHUD showError:@"请求失败"];return;}//解析json数据NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];NSArray *videoArray=dict[@"videos"];//NSLog(@"视频的个数为:%d",videoArray.count);for (NSDictionary *videoDict in videoArray) {Video *video=[Video videoWithDict:videoDict];[self.videos addObject:video];}//刷新表格NSLog(@"---");[self.tableView reloadData];}];
}
#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {return self.videos.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {static NSString *ID=@"ID";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];if(!cell){cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];}Video *video=self.videos[indexPath.row];cell.textLabel.text=video.name;cell.detailTextLabel.text=[NSString stringWithFormat:@"时长:%d分钟",video.length];NSString *imageUrl=[NSString stringWithFormat:@"http://localhost:8080/MJServer/%@",video.image];[cell.imageView sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:[UIImage imageNamed:@"placeholder"]];return cell;
}
#pragma 代理方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{//取出视频模型Video *video=self.videos[indexPath.row];NSLog(@"%@",video.name);//播放视频(调用系统提供的视频播放器)NSString *videoUrl=[NSString stringWithFormat:@"http://localhost:8080/MJServer/%@",video.url];NSURL *url=[NSURL URLWithString:videoUrl];MPMoviePlayerViewController *player=[[MPMoviePlayerViewController alloc]initWithContentURL:url];//显示播放器[self presentViewController:player animated:YES completion:nil];
}
@end
5.2 效果图
IOS开发之——网络-视频播放-JSON解析(11)相关推荐
- iOS开发系列--网络开发(转)
iOS开发系列--网络开发 2014-10-22 08:34 by KenshinCui, 66365 阅读, 56 评论, 收藏, 编辑 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微 ...
- iOS开发笔记 - 网络篇
计算机网络基础 计算机网络是多台独立自主的计算机互联而成的系统的总称,最初建立计算机网络的目的是实现信息传递和资源共享. 如果说计算机是第二次世界大战的产物,那么计算机网络则是美苏冷战的产物. ...
- iOS开发工具——网络封包分析工具Charles
iOS开发工具--网络封包分析工具Charles 简介 Charles是在Mac下常用的截取网络封包的工具,在做iOS开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析.Char ...
- iOS开发之网络音乐播放器(SC音乐)(二)
iOS开发之网络音乐播放器(SC音乐)(二) 前言 iOS开发之网络音乐播放器(SC音乐)(一)已经介绍完播放控制.音乐数据获取解析.歌词显示等.本文在上文的基础上介绍锁屏播放设置,后台播放设置,手势 ...
- iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载
前言:iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载是在前篇iOS开发之网络编程--使用NSURLConnection实现大文件下载的基础上进行 断点续传的设置 ...
- iOS开发教程:Storyboard全解析-第二部分
如果你想了解更多Storyboard的特性,那么你就来对了地方,下面我们就来接着上次的内容详细讲解Storyboard的使用方法. 在上一篇<iOS开发教程:Storyboard全解析-第一部分 ...
- iOS开发之网络监听(一)Reachability
demo下载 Reachability对系统的网络状况类SCNetworkReachability进行的封装,持有全局的网络状况句柄reachabilityRef,简化了SCNetworkReacha ...
- android 地球坐标 火星坐标系,IOS开发入门之iOS开发火星坐标系与地球坐标系解析...
本文将带你了解IOS开发入门iOS开发火星坐标系与地球坐标系解析,希望本文对大家学IOS有所帮助. iOS开发火星坐标系与地球坐标系解析. 在开发过程中,遇到一个问题,安卓和iOS传同样的经纬度给后台 ...
- iOS开发 - 第04篇 - 网络 - 02 - JSON解析 请求 黑酷例子 HTTP通信
1.JSON解析 --- 重要 2.异步请求 注:一般不会发送同步请求,由于需要等待服务器返回NSData数据,因此会卡住当前线程 注 1:发送异步请求,会自动另开一个线程,不会卡死主线程 注2:需要 ...
最新文章
- python2和python3 在windows下公用 导致python2 pip无法使用 报ssl的错误
- ubuntu18.04 mariadb start失败
- 历史性胜利!纽约曼哈顿充电站数量超过加油站
- 北大文科生能选计算机专业么,文科计算机基础和文科计算机专题
- 二叉树后序遍历的四种方法
- 关于C语言中继承和多态的实现
- 【51nod】1934 受限制的排列
- 篮球竞赛24秒计时器quartus_篮球比赛的基本规则
- GridMask:SOTA 数据增广方法,显著改进分类、检测、分割效果
- 写作新手想少走弯路,尽快赚到钱,必须要知道的
- android thread线程通讯
- bzoj 1002: [FJOI2007]轮状病毒
- C# int和byte[]之间的互转
- 微波雷达传感器模块,智能感知人体存在,实时感应交互控制应用
- 手机之家签名工具_IOS签名工具:魔力签
- 鬼谷八荒先天气运修改器
- QTP网管自动化测试框架
- 地铁信号tts是什么服务器,机场地铁公共广播
- eSIM的基本原理、相关标准、产业和应用
- 计算机软著在线登记,计算机软件著作权登记收费标准
热门文章
- 航电多校第二场-1001-Total Eclipse
- 海康威视DS-K56A0人证设备集成(1)
- 线性代数学习笔记——行列式的性质及拉普拉斯定理——12. 逆矩阵的一个简明表达式
- 工厂生产设备维修保养管理系统软件
- 一图读懂:Type-C的前生今世 众接口已哭晕
- Oracle数据顺序问题
- Android分区详解:boot, system, recovery, data, cache 以及 misc
- 遇到问题:从采购申请 复制 建立分类的采购订单的时候, 报错: 采购申请未批准。
- Centos7.6安装stress工具
- 图片大小以及dp和px关系一览表,logo尺寸