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有冲突)

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

(0)

相关推荐

  • 详解iOS应用中播放本地视频以及选取本地音频的组件用法

    MPMoviePlayerControlle播放本地视频 MPMoviePlayerControlle与AVAudioPlayer有点类似,前者播放视频,后者播放音频,不过也有很大不同,MPMoviePlayerController 可以直接通过远程URL初始化,而AVAudioPlayer则不可以.不过大体上用起来感觉差不多.废话少说进入体验. 格式支持:MOV.MP4.M4V.与3GP等格式,还支持多种音频格式. 首先你得引入 MediaPlayer.framework.然后在使用到MPMo

  • iOS中视频播放器的简单封装详解

    前言 如果仅仅是播放视频两者的使用都非常简单,但是相比MediaPlayer,AVPlayer对于视频播放的可控制性更强一些,可以通过自定义的一些控件来实现视频的播放暂停等等.因此这里使用AVPlayer的视频播放. 视频播放器布局 首先使用xib创建CLAVPlayerView继承UIView用来承载播放器,这样我们在外部使用的时候,直接在控制器View或者Cell上添加CLAVPlayerView即可,至于播放器播放或者暂停等操作交给CLAVPlayerView来管理.下面来看一下CLAVP

  • 详解iOS App中调用AVAudioPlayer播放音频文件的用法

    要给工程中添加音频,首先要导入音频的框架 AVFoundation.framework 然后新建一个类继承于UIViewController, 我这里就叫FirstVC. 首先在 AppDelegate.m中初始化根视图 复制代码 代码如下: #import "AppDelegate.h" #import "FirstVC.h" @implementation AppDelegate - (void)dealloc {     [_window release];

  • 讲解iOS开发中对音效和音乐播放的简单实现

    音效的播放 一.简单介绍 简单来说,音频可以分为2种 (1)音效 又称"短音频",通常在程序中的播放时长为1~2秒 在应用程序中起到点缀效果,提升整体用户体验 (2)音乐 比如游戏中的"背景音乐",一般播放时间较长 框架:播放音频需要用到AVFoundation.framework框架 二.音效的播放 1.获得音效文件的路径 复制代码 代码如下: NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_

  • iOS开发中AVPlayer的简单应用

    前言 在iOS开发中,播放视频通常有两种方式,一种是使用MPMoviePlayerController(需要导入MediaPlayer.Framework),还有一种是使用AVPlayer.关于这两个类的区别简而言之就是MPMoviePlayerController使用更简单,功能不如AVPlayer强大,而AVPlayer使用稍微麻烦点,不过功能更加强大.下面这篇文章主要介绍下AVPlayer的简单应用,需要的朋友们一起来看看吧. AVPlayer的简单应用 1.引入系统框架 2.创建视频的u

  • iOS开发中音频视频播放的简单实现方法

    前言 我们在平时的iOS开发中,音视频的播放有很多种,目前系统的自带的都属于 AVFoundation 框架,更加接近于底层,所以灵活性很强,更加方便自定义 还有就是第三方音视频视频播放,特点是功能强大,实现简单,支持流媒体,下面来逐一介绍,给大家参考学习,下面来一起看看详细的介绍吧. 播放系统音效或者短音效 注意: 这里的资源长度最多30秒 资源必须在 Target --> Build Phases --> Copy Bundle Resources 引入资源文件,否则获取不到文件 if l

  • iOS利用AVPlayer播放网络音乐的方法教程

    前言 假如你现在打算做一个类似百度音乐.豆瓣电台的在线音乐类APP,你会怎样做? 首先了解一下音频播放的实现级别: (1) 离线播放:这里并不是指应用不联网,而是指播放本地音频文件,包括先下完完成音频文件再进行播放的情况,这种使用AVFoundation里的AVAudioPlayer可以满足 (2) 在线播放:使用AVFoundation的AVPlayer可以满足 (3) 在线播放同时存储文件:使用AudioFileStreamer + AudioQueue 可以满足 (4) 在线播放且带有音效

  • iOS AVPlayer切换播放源实现连续播放和全屏切换的方法

    本文主要给大家介绍了关于iOS AVPlayer切换播放源实现连续播放和全屏切换的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: AVPlayer 切换播放源有三种方式: 第一种:采用系统自带的方法: [self.player replaceCurrentItemWithPlayerItem:item] ,但是在切换playItem前要把所有的通知,观察者移除,切换后重新添加. 第二种:把通知,观察者全部移除,player 置为nil,然后重新创建. githup上ZFPlayer

  • 浅析iOS中视频播放的几种方案

    1.AVPlayer (1) 优缺点 优点:可以自定义 UI, 进行控制 缺点:单纯的播放,没有控制 UI(进度,暂停,播放等按钮),而且如果要显示播放界面, 需要借助AVPlayerLayer, 添加图层到需要展示的图层上 (2)实现远程视频播放 实现播放功能(只有声音) 1.导入框架 #import <AVFoundation/AVFoundation.h> 2.通过远程 URL 创建 AVPlayer 对象 NSURL *remoteURL = [NSURL URLWithString:

  • iOS App中实现播放音效和音乐功能的简单示例

    播放音效 iOS开发过程中可能会遇到播放音效的功能 其实很简单,iOS已经提供了一个框架直接负责播放音效 AudioToolbox.framework 新建项目  TestWeChatSounds 给新建的项目导入AudioToolbox.framework 导入成功之后如下图 项目目录如下 接下来我们给项目中添加几个caf格式的音效文件 接下来 我们打开 项目默认生成的ViewController中添加代码 导入 AudioToolbox 复制代码 代码如下: #import <AudioTo

随机推荐