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(, , 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/1ggwYyor 密码: 9adf 如果连接失效,请发邮件: lieryangios@126.com 或下方留言!!!
第二步: 将下载下来的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(, , 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/1ggwYyor 密码: 9adf 如果连接失效,请发邮件: lieryangios@126.com 或下方留言!!!
第二步: 将下载下来的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开发的问题!欢迎下方留言!!!或者邮件lieryangios@126.com 虽然我不一定能够解答出来,但是我会请教iOS开发高手!!!解答您的问题!!!
iOS 本地视频和网络视频流播放的更多相关文章
- video.js不能控制本地视频或者音频播放时长
问题: 把视频放到本地,然后对视频进行测试,想要控制视频或者音频的播放时长,没办法做到,每次拉动进度条,都会使得本地视频重新播放 原因: 所有浏览器默认js无法访问本地地址,也就是说js不能对本地文件 ...
- PHP实现获取本地视频进行随机播放
创建一个文件夹,里面随便方视频文件即可 列如文件夹名字是assets代码如下 <? $handler = opendir('./assets/mp4/');//当前目录中的文件夹下的文件夹 需要 ...
- SAP播放本地视频及音频(仅限于window MediaPlayer可播放文件)
这个是从SCN上看到的,自己稍加修改,编制,做的还可以,可以播放视频,音频,唯一的不足就是不能控制播放视频的显示窗口大小,希望有人能帮忙解决,感激! 视频播放类:(新建类Z_CL_MEDIA,点击基于 ...
- iOS Dev (20) 用 AVAudioPlayer 播放一个本地音频文件
iOS Dev (20) 用 AVAudioPlayer 播放一个本地音频文件 作者:CSDN 大锐哥 博客:http://blog.csdn.net/prevention 步骤 第一步:在 Proj ...
- iOS Dev (21) 用 AVPlayer 播放一个本地音频文件
iOS Dev (21) 用 AVPlayer 播放一个本地音频文件 作者:CSDN 大锐哥 博客:http://blog.csdn.net/prevention 前言 这篇文章与上一篇极其相似,要注 ...
- Swift - 使用Media Player播放本地视频,在线视频
Media Player框架用于播放本地视频.音频,也可以在线播放视频和音频. 1,播放器MPMovieControlStyle样式有如下几种: (1)None: 没有播放控制控件 (2)Embedd ...
- Android播放器推荐:可以播放本地音乐、视频、在线播放音乐、视频、网络收音机等
下载链接:http://www.eoeandroid.com/forum.php?mod=attachment&aid=MTAxNTczfGMyNjNkMzFlfDEzNzY1MzkwNTR8 ...
- potplayer 网页调用potplayer播放本地视频
网页调用potplayer播放本地视频 CreateTime--2018年1月3日10:36:24 Author:Marydon 源码展示: <!DOCTYPE html> <h ...
- 照相、从相册上取照片、播放音频、播放本地视频、播放网络视频、MPMoviePlayerController
一.照相.从相册上去照片 1. 先判断是否支持照相功能 *判断当前设备是否支持照相功能,支持返回YES 否则返回NO 注意:模拟器不支持照相功能 把握一个原则只要是物理硬件相关的功能模拟器都不支持 例 ...
随机推荐
- dubbo在企业中用得多吗?
看了阿里的dubbo,据说是一个不错的服务框架, 不过,好像Minglisoft.technology搞研发希望各位可以指点学习 想知道其他的公司用这个框架多吗?遇到的问题能否快速解决呢?抉择中...
- 求序列的和,杭电0j-2058
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=2058 [Problem Description] Given a sequence 1,2,3,... ...
- SharePoint 服务器端对象迁移文件夹
最近有个需求,写个定时迁移文件夹的小程序,因为计时器任务比较繁琐,所以选择了控制台程序.然后,用windows的计划任务执行,也许,会有广大朋友需要类似的功能,简单的分享一下代码逻辑,功能非常简单,希 ...
- 项目中的报错信息,maven报错等的总结
Maven是一个自动化的构建和管理工具.在项目开发中,如果遇到了错误(红叉),一般有如下的解决方法: 1.java.lang.UnsatisfiedLinkError: E:\apache-tomca ...
- php系统共享模板问题
我们在用php+html+css来写一个管理系统时,例如报名系统.投票系统,统计系统等,我们往往需要在管理后台查看每一位报名者的情况,问题接着就来了,由于比赛或者活动要求不同个,往往报名表不太一样,这 ...
- 从零开始的JS生活(三)——内置对象
咱们继续进行我们的正经的JS介绍.今天所要跟大家讲述的是JS中十分常用.十分常用.十分常用的内置对象. 一.世界上最熟悉的陌生就是,当你看着数组.而我看着你... - 数组对象 1.数组的概念 在内存 ...
- Java中设计模式之生产者消费者模式-4
引言 生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区.其中一个是生产者,用于将消息放入缓冲区:另 ...
- nodejs实战:使用原生nodeJs模块实现静态文件及REST请求解析及响应(基于nodejs6.2.0版本,不使用express等webMVC框架 )
一.准备工作 1.安装nodejs 首先你需要安装nodeJs 那么nodejs官网:http://nodejs.cn/,下载相应版本,一步一步安装. 二.使用nodejs开发服务器后台应用 1.创建 ...
- [附录]Discuz X2.5 模板目录结构注释说明
/template/default/common 公共模板目录全局加载 block_forumtree.htm DIY论坛树形列表模块 block_thread.htm DIY帖子模块调用文件 ...
- Spring学习(5)---Bean的定义及作用域的注解实现
Bean管理的注解实现 Classpath扫描与组件管理 类的自动检测与注册Bean <context:annotation-config/> @Component,@Repository ...