全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

iOS 本地视频和网络视频流播放实例代码

需求:最近公司需要做一个楼宇对讲的功能:门口机(连接WIFI)拨号对室内机(对应的WIFI)的设备进行呼叫,室内机收到呼叫之后将对收到的数据进行UDP广播的转发,手机(连接对应的WIFI)收到视频流之后,实时的展示视频数据(手机可以接听,挂断,手机接听之后,室内机不展示视频,只是进行转发。)

简单点说就是手机客户端需要做一个类似于|直播|平台的软件,可以实时的展示视频,实时的播放接收到的声音数据,并且实时将手机麦克风收到的声音回传给室内机,室内机负责转发给门口机。

之前从来做过视频播放都是本地文件的直接播放,从来没有做过网络视频流的播放,百度了很多都是介绍框架怎么使用的,按着它的流程是行不通的,没有一个详细的使用流程!!!想哭呀!!!

这篇文章说一下本地视频文件播放和网络视频播放以及三方框架的使用,有不对的地方欢迎指正!!!

 #pragma mark -- 本地视频文件播放

使用AVFoundation.framework

 第一步:导入框架AVFoundation.framework

//经过测试:不导入这个框架也能播放,在第三步使用的时候导入就行了,为了不出现未知的BUG还是乖乖的导入吧!!!

第二步: 拖入一个视频文件到你的项目中 

第三步: 代码实现

#import "ViewController.h"
#import <AVFoundation/AVFoundation.h> //需要导入框架

#define EYScreenWidth [[UIScreen mainScreen] bounds].size.width
#define EYScreenHeight [[UIScreen mainScreen] bounds].size.height

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
 [super viewDidLoad];
 
 //1.从mainBundle获取test.mp4的具体路径
 NSString * path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp4"];
 //2.文件的url
 NSURL * url = [NSURL fileURLWithPath:path];
 
 //3.根据url创建播放器(player本身不能显示视频)
 AVPlayer * player = [AVPlayer playerWithURL:url];
 
 //4.根据播放器创建一个视图播放的图层
 AVPlayerLayer * layer = [AVPlayerLayer playerLayerWithPlayer:player];
 
 //5.设置图层的大小
 layer.frame = CGRectMake(0, 0, EYScreenWidth, EYScreenHeight);
 
 //6.添加到控制器的view的图层上面
 [self.view.layer addSublayer:layer];
 
 //7.开始播放
 [player play];
}

@end

#pragma mark -- 网络视频流播放

方式一:MobileVLCKit.framework

第一步: 下载MobileVLCKit.framework

 1. 可以去百度官网地址,上面有详细的编译步骤,GitHub上面也有详细的教程!!!--->之后直接进行第六步!!!

 2. 我已经编译好了 真机和模拟器都可以使用的: MobileVLCKit.framework

 链接: https://pan.baidu.com/s/1pLz7DTx密码: te5p

第二步: 将下载下来的zip解压,MobileVLCKit文件夹中的MobileVLCKit.framework 拖入到你的工程中

第四步: 选择finish

第五步:添加依赖库

1:  AudioToolbox.framework

2:  VideoToolbox.framework

3:  CoreMedia.framework

4:  CoreVideo.framework

5:  CoreAudio.framework

6:  AVFoundation.framework

7:  MediaPlayer.framework

8:  libstdc++.6.0.9.tbd

9:  libiconv.2.tbd

10: libc++.1.tbd

11: libz.1.tbd

12: libbz2.1.0.tbd

 共12个

完成之后如图所示:

第六步: 使用框架

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

//视频流的路径,外界传过来的视频流的地址
@property (nonatomic, copy) NSString * rtspPath;

@end

 ViewController.m

#import "ViewController.h"
#import <MobileVLCKit/MobileVLCKit.h>

//屏幕宽高的宏
#define EYScreenWidth [[UIScreen mainScreen] bounds].size.width
#define EYScreenHeight [[UIScreen mainScreen] bounds].size.height

@interface ViewController ()

//视频播放
@property (nonatomic, strong) VLCMediaPlayer *player;

@end

@implementation ViewController

- (void)viewDidLoad {
 [super viewDidLoad];

 //1.创建播放视图,模拟器测试会有问题!!!真机可以正常播放
 UIView *videoView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, EYScreenWidth, EYScreenHeight)];
 [self.view addSubview:videoView];

 //2.创建播放器
 self.player = [[VLCMediaPlayer alloc] initWithOptions:nil];

 //3.设置播放图层
 self.player.drawable = videoView;

 //4.设置播放的路径
 self.player.media = [VLCMedia mediaWithURL:[NSURL URLWithString:self.rtspPath]];

 //5.开始播放
 [self.player play];
}

- (void)dealloc
{
 if (self.player.isPlaying) {
  [self.player stop];
 }
}

@end

第七步: 真机测试

Command + R 运行报错

 

 在工程设置中,Setting搜索bitcode,将Yes修改为No

 

如果出现下图错误,将对应文件的第38行代码注释掉就行了!

 

再次运行就是OK了!!!

如果不好使尝试将ViewController.m----->ViewController.mm

如果上面的路径是本地路径的话,是可以播放本地视频的!!!

方式二: IJKMediaFramework 

第一步: 下载IJKMediaFramework

 1. 可以去百度官网地址,上面有详细的编译步骤,GitHub上面也有详细的教程!!! -->之后直接进行第三步!!!

 2. 我已经编译好了 真机和模拟器都可以使用的:IJKMediaFramework

链接: https://pan.baidu.com/s/1o8G4ETG密码: 3cbr   

 第二步: 将下载下来的IJK.zip解压,IJK文件夹中的

1、IJKMediaFramework.framework

2、libcrypto.a

3、librtmp.a

4、libssl.a

总共4个拖入到你的工程中

第三步: 编写代码 

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

//视频流的路径
@property (nonatomic, copy) NSString * rtspPath;

@end

ViewController.m

#import "ViewController.h"
#import <IJKMediaFramework/IJKMediaFramework.h>

// 宏定义
#define EYScreenBounds [UIScreen mainScreen].bounds

@interface ViewController ()

@property (nonatomic, strong) IJKFFMoviePlayerController * ijkPlayer;

@end

@implementation ViewController

- (void)viewDidLoad {
 [super viewDidLoad];

 //初始化播放控制器
 self.ijkPlayer = [[IJKFFMoviePlayerController alloc] initWithContentURLString:self.rtspPath withOptions:nil];

 //设置打印级别, 测试发现没有什么效果
 [IJKFFMoviePlayerController setLogLevel:k_IJK_LOG_DEBUG];

 //设置控制器的view大小
 self.ijkPlayer.view.frame = EYScreenBounds;

 //控制器的view添加到自身的view上面
 [self.view addSubview:self.ijkPlayer.view];
}

- (void)viewWillAppear:(BOOL)animated
{
 [super viewWillAppear:animated];

 if (!self.ijkPlayer.isPlaying) {
  //播放
  [self.ijkPlayer prepareToPlay];
 }
}

- (void)viewWillDisappear:(BOOL)animated
{
 [super viewWillDisappear:animated];

 if (self.ijkPlayer.isPlaying) {
  //关闭
  [self.ijkPlayer shutdown];
 }
}

@end

注意点:方式一和方式二只能使用一个,因为他们两个会有冲突,暂时没有找到解决方案!!!(个人感觉应该是方式二中的.a与系统的.tbd有冲突)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# iOS  # 本地视频播放  # ios播放网络音频流  # iOS实现实时检测网络状态的示例代码  # iOS 检测网络状态的两种方法  # iOS实时监控网络状态的改变  # iOS中如何判断当前网络环境是2G/3G/4G/5G/WiFi  # iOS 12+ 中检测网络访问的方法  # 详解iOS AFNetworking取消正在进行的网络请求  # iOS中从网络获取数据的几种方法的比较  # iOS中多网络请求的线程安全详解  # 详解IOS判断当前网络状态的三种方法  # 图层  # 第三步  # 室内  # 播放器  # 都是  # 第二步  # 视频文件  # 也有  # 会有  # 好了  # 视频播放  # 拖入  # 做过  # 做一个  # 可以使用  # 官网  # 网络视频  # 我已经  # 就行了  # 第六步 


相关文章: 北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  公司网站的制作公司,企业网站制作基本流程有哪些?  如何快速生成高效建站系统源代码?  清除minerd进程的简单方法  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  建站主机默认首页配置指南:核心功能与访问路径优化  历史网站制作软件,华为如何找回被删除的网站?  ,南京靠谱的征婚网站?  如何用美橙互联一键搭建多站合一网站?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  香港服务器选型指南:免备案配置与高效建站方案解析  三星网站视频制作教程下载,三星w23网页如何全屏?  网站制作难吗安全吗,做一个网站需要多久时间?  建站之星安装后如何自定义网站颜色与字体?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  建站主机选虚拟主机还是云服务器更好?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  公司门户网站制作流程,华为官网怎么做?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  高端建站三要素:定制模板、企业官网与响应式设计优化  制作宣传网站的软件,小红书可以宣传网站吗?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  如何基于云服务器快速搭建个人网站?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  北京网站制作的公司有哪些,北京白云观官方网站?  如何彻底删除建站之星生成的Banner?  常州自助建站费用包含哪些项目?  如何在云指建站中生成FTP站点?  网站企业制作流程,用什么语言做企业网站比较好?  如何在云主机上快速搭建多站点网站?  建站之星2.7模板快速切换与批量管理功能操作指南  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何在腾讯云服务器上快速搭建个人网站?  专业公司网站制作公司,用什么语言做企业网站比较好?  javascript中对象的定义、使用以及对象和原型链操作小结  如何访问已购建站主机并解决登录问题?  建站主机如何选?高性价比方案全解析  ,交易猫的商品怎么发布到网站上去?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  高防服务器:AI智能防御DDoS攻击与数据安全保障  中山网站推广排名,中山信息港登录入口?  济南专业网站制作公司,济南信息工程学校怎么样?  建站之星价格显示格式升级,你的预算足够吗?  如何零成本快速生成个人自助网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。