IOS开发之——网络-视频播放-JSON解析(11)

一 概述

  • 解析JSON结果到OC类
  • 通过视频播放地址构成视频播放器并播放显示
  • 网络请求,返回视频播放列表,点击列表中的一项进行播放

二 Main.storyboard

三 解析JSON结果到OC类

3.1 JSON数据

1
2
{"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

1
2
3
4
5
6
7
8
9
10
11
#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

1
2
3
4
5
6
7
8
9
10
11
#import "Video.h"

@implementation Video

+(instancetype)videoWithDict:(NSString *)dict
{
Video *video=[[self alloc]init];
[video setValuesForKeysWithDictionary:dict];
return video;
}
@end

网络请求结果封装到Video

1
2
3
4
5
6
7
8
//解析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];
}

四 通过视频播放地址构成视频播放器并播放显示

1
2
3
4
5
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)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#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-创建URL
NSURL *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 效果图