全网整合营销服务商

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

免费咨询热线: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判断当前网络状态的三种方法  # 图层  # 第三步  # 室内  # 播放器  # 都是  # 第二步  # 视频文件  # 也有  # 会有  # 好了  # 视频播放  # 拖入  # 做过  # 做一个  # 可以使用  # 官网  # 网络视频  # 我已经  # 就行了  # 第六步 


相关文章: 企业微网站怎么做,公司网站和公众号有什么区别?  jQuery 常见小例汇总  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  建站之星CMS建站配置指南:模板选择与SEO优化技巧  简单实现Android文件上传  网站制作知乎推荐,想做自己的网站用什么工具比较好?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  如何在阿里云虚拟服务器快速搭建网站?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  清除minerd进程的简单方法  小型网站建站如何选择虚拟主机?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  网站制作价目表怎么做,珍爱网婚介费用多少?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  Swift中swift中的switch 语句  如何高效完成独享虚拟主机建站?  黑客如何利用漏洞与弱口令入侵网站服务器?  css网站制作参考文献有哪些,易聊怎么注册?  高端网站建设与定制开发一站式解决方案 中企动力  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  IOS倒计时设置UIButton标题title的抖动问题  c# Task.ConfigureAwait(true) 在什么场景下是必须的  创业网站制作流程,创业网站可靠吗?  建站之星代理费用多少?最新价格详情介绍  如何在Ubuntu系统下快速搭建WordPress个人网站?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  如何选择高效响应式自助建站源码系统?  建站之星安装后界面空白如何解决?  如何在建站之星绑定自定义域名?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何在服务器上配置二级域名建站?  太平洋网站制作公司,网络用语太平洋是什么意思?  宝塔面板创建网站无法访问?如何快速排查修复?  如何将凡科建站内容保存为本地文件?  网站网页制作专业公司,怎样制作自己的网页?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何在局域网内绑定自建网站域名?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  常州自助建站费用包含哪些项目?  微信推文制作网站有哪些,怎么做微信推文,急?  智能起名网站制作软件有哪些,制作logo的软件?  如何在云服务器上快速搭建个人网站?  内网网站制作软件,内网的网站如何发布到外网?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  seo网站制作优化,网站SEO优化步骤有哪些?  如何快速生成橙子建站落地页链接? 

您的项目需求

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