一 概述

  • 解析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)相关推荐

  1. iOS开发系列--网络开发(转)

    iOS开发系列--网络开发 2014-10-22 08:34 by KenshinCui, 66365 阅读, 56 评论, 收藏, 编辑 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微 ...

  2. iOS开发笔记 - 网络篇

    计算机网络基础   计算机网络是多台独立自主的计算机互联而成的系统的总称,最初建立计算机网络的目的是实现信息传递和资源共享.   如果说计算机是第二次世界大战的产物,那么计算机网络则是美苏冷战的产物. ...

  3. iOS开发工具——网络封包分析工具Charles

    iOS开发工具--网络封包分析工具Charles 简介 Charles是在Mac下常用的截取网络封包的工具,在做iOS开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析.Char ...

  4. iOS开发之网络音乐播放器(SC音乐)(二)

    iOS开发之网络音乐播放器(SC音乐)(二) 前言 iOS开发之网络音乐播放器(SC音乐)(一)已经介绍完播放控制.音乐数据获取解析.歌词显示等.本文在上文的基础上介绍锁屏播放设置,后台播放设置,手势 ...

  5. iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载

    前言:iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载是在前篇iOS开发之网络编程--使用NSURLConnection实现大文件下载的基础上进行    断点续传的设置 ...

  6. iOS开发教程:Storyboard全解析-第二部分

    如果你想了解更多Storyboard的特性,那么你就来对了地方,下面我们就来接着上次的内容详细讲解Storyboard的使用方法. 在上一篇<iOS开发教程:Storyboard全解析-第一部分 ...

  7. iOS开发之网络监听(一)Reachability

    demo下载 Reachability对系统的网络状况类SCNetworkReachability进行的封装,持有全局的网络状况句柄reachabilityRef,简化了SCNetworkReacha ...

  8. android 地球坐标 火星坐标系,IOS开发入门之iOS开发火星坐标系与地球坐标系解析...

    本文将带你了解IOS开发入门iOS开发火星坐标系与地球坐标系解析,希望本文对大家学IOS有所帮助. iOS开发火星坐标系与地球坐标系解析. 在开发过程中,遇到一个问题,安卓和iOS传同样的经纬度给后台 ...

  9. iOS开发 - 第04篇 - 网络 - 02 - JSON解析 请求 黑酷例子 HTTP通信

    1.JSON解析 --- 重要 2.异步请求 注:一般不会发送同步请求,由于需要等待服务器返回NSData数据,因此会卡住当前线程 注 1:发送异步请求,会自动另开一个线程,不会卡死主线程 注2:需要 ...

最新文章

  1. python2和python3 在windows下公用 导致python2 pip无法使用 报ssl的错误
  2. ubuntu18.04 mariadb start失败
  3. 历史性胜利!纽约曼哈顿充电站数量超过加油站
  4. 北大文科生能选计算机专业么,文科计算机基础和文科计算机专题
  5. 二叉树后序遍历的四种方法
  6. 关于C语言中继承和多态的实现
  7. 【51nod】1934 受限制的排列
  8. 篮球竞赛24秒计时器quartus_篮球比赛的基本规则
  9. GridMask:SOTA 数据增广方法,显著改进分类、检测、分割效果
  10. 写作新手想少走弯路,尽快赚到钱,必须要知道的
  11. android thread线程通讯
  12. bzoj 1002: [FJOI2007]轮状病毒
  13. C# int和byte[]之间的互转
  14. 微波雷达传感器模块,智能感知人体存在,实时感应交互控制应用
  15. 手机之家签名工具_IOS签名工具:魔力签
  16. 鬼谷八荒先天气运修改器
  17. QTP网管自动化测试框架
  18. 地铁信号tts是什么服务器,机场地铁公共广播
  19. eSIM的基本原理、相关标准、产业和应用
  20. 计算机软著在线登记,计算机软件著作权登记收费标准

热门文章

  1. 航电多校第二场-1001-Total Eclipse
  2. 海康威视DS-K56A0人证设备集成(1)
  3. 线性代数学习笔记——行列式的性质及拉普拉斯定理——12. 逆矩阵的一个简明表达式
  4. 工厂生产设备维修保养管理系统软件
  5. 一图读懂:Type-C的前生今世 众接口已哭晕
  6. Oracle数据顺序问题
  7. Android分区详解:boot, system, recovery, data, cache 以及 misc
  8. 遇到问题:从采购申请 复制 建立分类的采购订单的时候, 报错: 采购申请未批准。
  9. Centos7.6安装stress工具
  10. 图片大小以及dp和px关系一览表,logo尺寸