https://www.jianshu.com/p/683ccc09d4ad
iOS视频播放器,如果给一个URL视频地址,没要求的话,推荐使用ZFPlayer,这里也简单叙述一下
- GitHub官网下载ZFPlayer
https://github.com/renzifeng/ZFPlayer 然后直接解压运行Player.xcworkspace即可 - 新建自己的工程项目
添加Podfile
platform :ios, \'9.0\'
target ‘TestZFPlayer’ do
pod \'ZFPlayer\'
end
打开终端命令行cd进入工程目录执行pod install
打开工程目录中cocopods生成的xcworkspace文件
- 在Viewcontroller中导入头文件
#import <ZFPlayer.h>
因为用到了布局,所以导入masonry
#import <Masonry.h>
@property (weak, nonatomic) IBOutlet ZFPlayerView *playView;
@property (nonatomic, strong) ZFPlayerView *playerView;
@property (atomic, strong) NSURL *url;
- viewDidLoad中
self.playerView = [[ZFPlayerView alloc] init];
[self.view addSubview:self.playerView];
[self.playerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view).offset(20);
make.left.right.equalTo(self.view);
// Here a 16:9 aspect ratio, can customize the video aspect ratio
make.height.equalTo(self.playView.mas_width).multipliedBy(9.0f/16.0f);
}];
self.url = [NSURL URLWithString:@"http://v1.mukewang.com/a45016f4-08d6-4277-abe6-bcfd5244c201/L.mp4"];
ZFPlayerControlView *controlView = [[ZFPlayerControlView alloc] init];
// model
ZFPlayerModel *playerModel = [[ZFPlayerModel alloc] init];
playerModel.fatherView = _playerView;
playerModel.videoURL = self.url;
playerModel.title = @"这是title";
[self.playView playerControlView:controlView playerModel:playerModel];
// delegate
self.playView.delegate = self;
// auto play the video
[self.playView autoPlayTheVideo];
- 这样就可以播放视频了,同时带有暂定、播放、快进、快退、预览、全屏;真机可以调整音量、以及屏幕亮度等等功能
注:ZFPlayer支持IB,所以拉的playerView,以上也对ZFPlayer作者开源精神表示感谢!
由于项目中计划使用ijkplayer,所以从一无所知到播放这个流程在此记录一下,特此感谢StarGazer_C
- 百度ijkplayer
- 点击GitHub-Bilibili。。。进入GitHub官网
- 下载zip文件,并解压,尝试运行Demo,因为demo不能允许的话,何况你的。。。
Demo路径:../ijkplayer-master/ios/IJKMediaDemo
Build一下就报错了,查看官方文档需要Build环境
- 安装git(mac自带)、yasm
- Build iOS
- 打开终端cd到init-ios.sh文件的父目录执行./init-ios.sh,根据网络情况要等~~
然后cd到ios文件夹执行./complie-ffmpeg.sh clean,这个很快
再执行./complie-ffmpeg.sh all,执行这个电脑有点卡,稍后就OK了
再次运行IJKMediaDemo.xcodeproj就OK了。。。只有Online Samples可以播放一下,播放效果
- 以上证明环境OK
- 运行IJKMediaPlayer.xcodeproj生成IJKMediaFramework.framework
- 模拟器运行出来的只能在模拟器上运行,真机调试运行的只能在真机上运行,这里就需要合并framework
这是两个不同的运行环境,需要合并IJKMediaFramework.framework下的IJKMediaFramework
运行命令行:
lipo -create /Users/mac/Desktop/Debug-iphonesimulator/IJKMediaFramework.framework /Users/mac/Desktop/Debug-iphoneos/IJKMediaFramework.framework/IJKMediaFramework -output /Users/mac/Desktop/lipo/IJKMediaFramework
-
验证是否合并成功就是lipo中的IJKMediaFramework是否生产,还有就是使用lipo -info查看文件属性吧算是会提示x86_64 arm64
arm64表示是真机的文件,x86_64表示是模拟器支持的文件,显示两个就表示合并成功 -
- 注意区分debug版本还是release版本,调试阶段使用debug就行,这个切换在Xcode中product->scheme->edit scheme中更改
- 有了库文件就可以拖到自己的工程中了,导入
#import <IJKMediaFramework/IJKMediaFramework.h>
Build一下 success,然后导入视频地址测试播放,编译link错误
- 导入ijkplayer的readme中提到的相关库
- 再次Build还是link错误,不过这次编程了__gxx_personality_v0…,
- 这是还差一个库libstdc++.tbd,导入即可;故事板中拉个uiview(显示播放界面)、button(控制播放、暂停)
整个Viewcontroller就一行代码,别的什么都没有!
#import "ViewController.h"
#import <IJKMediaFramework/IJKMediaFramework.h>
@interface ViewController ()
@property (atomic, retain) id <IJKMediaPlayback> player;
@property (weak, nonatomic) IBOutlet UIView *playView;
@property (weak, nonatomic) IBOutlet UIButton *playBtn;
@end
@implementation ViewController
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (![_player isPlaying]) {
[self.player prepareToPlay];
}
}
-(void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSURL *url = [NSURL URLWithString:@"http://v1.mukewang.com/a45016f4-08d6-4277-abe6-bcfd5244c201/L.mp4"];
_player = [[IJKFFMoviePlayerController alloc] initWithContentURL:url withOptions:nil];
UIView *playerView = [_player view];
playerView.frame = self.playView.frame;
[self.view addSubview:playerView];
}
-(IBAction)clickedAction:(id)sender {
if (![_player isPlaying]) {
[self.player play];
[self.playBtn setTitle:@"Pause" forState:UIControlStateNormal];
}else {
[self.player pause];
[self.playBtn setTitle:@"Play" forState:UIControlStateNormal];
}
}
@end
- 综上所述,只要有合成好的framework,把它拖到工程当中,Link相关库即可播放,所以为了省时省力,我将我编译好的framework放到百度网盘上了,需要的朋友可以下载使用,提取密码:
cat9
,如有问题,欢迎反馈,谢谢!