这是我参与8月更文挑战的第28天,活动详情查看:8月更文挑战
我的专栏
前言
直播系列的最后一部分,在移动端进行播放。 有需要的请看之前的两部分:
在移动端进行播放,我选择用的是ijkplayer IJKMediaFramework第三方库的合并集成及使用 这一篇简书写的很详细,可以按照步骤,一步步集成到你的项目中去。
接下来,在controller中
#import <IJKMediaFramework/IJKMediaFramework.h>
配置
然后, 配置项目的拉流的地址
//这是拉流的地址,自己可以在服务端配置
#define INT_Strean @"rtmp://192.168.1.109:1935/live/asd"
再然后,定义好 显示 拉流 的视图,以及关于帧率和播放相关的配置。
@property (nonatomic, strong) IJKFFMoviePlayerController *player;
@property (nonatomic, strong) UIView *playView;
#pragma mark - 视图即将显示
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// 当试图即将展示的时候开始播放
[self.player prepareToPlay];
//注册播放状态改变的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playStatuDidchange:) name:IJKMPMoviePlayerPlaybackStateDidChangeNotification object:self.player];
}
#pragma mark - 视图已经消失
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
// 关闭播放
[self.player shutdown];
[[NSNotificationCenter defaultCenter] removeObserver:self name:IJKMPMoviePlayerPlaybackStateDidChangeNotification object:self.player];
}
- (void)viewDidLoad {
[super viewDidLoad];
[IJKFFMoviePlayerController setLogReport:YES];
[IJKFFMoviePlayerController setLogLevel:k_IJK_LOG_DEBUG];
[IJKFFMoviePlayerController checkIfFFmpegVersionMatch:YES];
_pp = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width * 0.49, [UIScreen mainScreen].bounds.size.height * 0.49)];
_pp.center = CGPointMake(self.view.center.x*0.5, self.view.center.y);
[self.view addSubview:_pp];
IJKFFOptions *options = [IJKFFOptions optionsByDefault];
[options setPlayerOptionIntValue:1 forKey:@"videotoolbox"];
// 帧速率(fps) (可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)
[options setPlayerOptionIntValue:29.97 forKey:@"r"];
// -vol——设置音量大小,256为标准音量。(要设置成两倍音量时则输入512,依此类推
[options setPlayerOptionIntValue:512 forKey:@"vol"];
NSURL *url = [NSURL URLWithString:[[NSUserDefaults standardUserDefaults] objectForKey:@"intURL"]];
_player = [[IJKFFMoviePlayerController alloc] initWithContentURL:url withOptions:options];
UIView *playView = [self.player view];
UIView *displayView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width * 0.49, [UIScreen mainScreen].bounds.size.height * 0.49)];
displayView.center = CGPointMake(self.view.center.x*1.5, self.view.center.y);
self.playView = displayView;
self.playView.backgroundColor = [UIColor blackColor];
[self.view addSubview:self.playView];
playView.frame = self.playView.bounds;
playView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.playView insertSubview:playView atIndex:1];
[_player setScalingMode:IJKMPMovieScalingModeAspectFit];
[_player setShouldAutoplay:YES]; //自动播放
self.view.autoresizesSubviews = YES; //自动更新自视图大小
最后,我们可以通过下面的方法来手动的实现开始播放与暂停播放:
[_player play]; //开始播放方法
[_player pause]; //暂停播放方法
参考文章:
其实本人想自己做整套的直播(包括移动端和服务端),但是之前一直做得比较迷茫。最近偶然间看到以上三篇博客,瞬间解除了我很多疑惑。分享出来,希望大家一起研究下。稍后,我完整做好了,会更新一篇完整的做的过程。
补充 问题记录
iOS端
工程打包的时候出现 linker command failed with exit code 1 (use -v to see invocation) 的问题
现在用的Xcode7中,解决办法为:选中项目->双击->target->buildSeting->搜索BITCODE,默认是yes,修改成no。 重新运行
BitCode是啥
服务器端
问题:nginx启动的时候会报丢失pid的错误
nginx: [error] open() “/usr/local/var/run/nginx.pid” failed
解决方案:
sudo nginx -c /usr/local/etc/nginx/nginx.conf
sudo nginx -s reload