首页 > 代码库 > 直播推流之blibli和拉流LFLiveKit
直播推流之blibli和拉流LFLiveKit
执行上面操作后,导入合成的拉流blibli包到工程中,然后新建个播放控制器来设置播放
1. 播放的一些操作。
2. 高斯模糊。
3. 新建聊天控制器。
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. [self initPlayer];//添加播放器 [self loadUI]; //添加高斯模糊 [self loadChatVC]; //加载聊天控制器 } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.navigationBar.hidden = YES; [self installMovieNotificationObservers]; [self.player prepareToPlay]; } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; self.navigationController.navigationBar.hidden = NO; [self.player shutdown]; [self removeMovieNotificationObservers]; } - (void)setLives:(STRHotLive *)lives{ _lives = lives; } - (void)initPlayer{ #ifdef DEBUG [IJKFFMoviePlayerController setLogReport:YES]; [IJKFFMoviePlayerController setLogLevel:k_IJK_LOG_DEBUG]; #else [IJKFFMoviePlayerController setLogReport:NO]; [IJKFFMoviePlayerController setLogLevel:k_IJK_LOG_INFO]; #endif IJKFFOptions *options = [IJKFFOptions optionsByDefault]; self.player = [[IJKFFMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",_lives.streamAddr]] withOptions:options]; self.player.view.frame = self.view.bounds; self.player.scalingMode = IJKMPMovieScalingModeAspectFit; self.player.shouldAutoplay = YES; [self.view addSubview:self.player.view]; } - (void)loadUI{ [self.view setBackgroundColor:STRCOLOR(0, 0, 0)]; [self loadBlurImage]; } - (void)loadChatVC{ [self addChildViewController:self.chatVc]; [self.view addSubview:self.chatVc.view]; self.chatVc.delegate = self; WEAKSELF; [self.chatVc.view mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(weakSelf.view); }]; } - (void)loadBlurImage{ UIImageView *blurImageV = [[UIImageView alloc] init]; blurImageV.frame = self.view.bounds; [blurImageV sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",_lives.creator.portrait]] placeholderImage:[UIImage imageNamed:@"default_room"]]; UIBlurEffect *blurE = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blurE]; effectView.frame = blurImageV.bounds; [blurImageV addSubview:effectView]; [self.view addSubview:blurImageV]; self.blurImageView = blurImageV; } #pragma mark --- delegate - (void)chatLiveViewController:(STRChatLiveViewController *)chatVc didButtonClickWithSender:(UIButton *)sender{ [self dismissViewControllerAnimated:YES completion:nil]; } #pragma mark --- noti - (void)loadStateDidChange:(NSNotification*)notification { // MPMovieLoadStateUnknown = 0, // MPMovieLoadStatePlayable = 1 << 0, // MPMovieLoadStatePlaythroughOK = 1 << 1, // Playback will be automatically started in this state when shouldAutoplay is YES // MPMovieLoadStateStalled = 1 << 2, // Playback will be automatically paused in this state, if started IJKMPMovieLoadState loadState = _player.loadState; if ((loadState & IJKMPMovieLoadStatePlaythroughOK) != 0) { NSLog(@"loadStateDidChange: IJKMPMovieLoadStatePlaythroughOK: %d\n", (int)loadState); } else if ((loadState & IJKMPMovieLoadStateStalled) != 0) { NSLog(@"loadStateDidChange: IJKMPMovieLoadStateStalled: %d\n", (int)loadState); } else { NSLog(@"loadStateDidChange: ???: %d\n", (int)loadState); } } - (void)moviePlayBackDidFinish:(NSNotification*)notification { // MPMovieFinishReasonPlaybackEnded, // MPMovieFinishReasonPlaybackError, // MPMovieFinishReasonUserExited int reason = [[[notification userInfo] valueForKey:IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue]; switch (reason) { case IJKMPMovieFinishReasonPlaybackEnded: NSLog(@"playbackStateDidChange: IJKMPMovieFinishReasonPlaybackEnded: %d\n", reason); break; case IJKMPMovieFinishReasonUserExited: NSLog(@"playbackStateDidChange: IJKMPMovieFinishReasonUserExited: %d\n", reason); break; case IJKMPMovieFinishReasonPlaybackError: NSLog(@"playbackStateDidChange: IJKMPMovieFinishReasonPlaybackError: %d\n", reason); break; default: NSLog(@"playbackPlayBackDidFinish: ???: %d\n", reason); break; } } - (void)mediaIsPreparedToPlayDidChange:(NSNotification*)notification { NSLog(@"mediaIsPreparedToPlayDidChange\n"); } - (void)moviePlayBackStateDidChange:(NSNotification*)notification { // MPMoviePlaybackStateStopped, // MPMoviePlaybackStatePlaying, // MPMoviePlaybackStatePaused, // MPMoviePlaybackStateInterrupted, // MPMoviePlaybackStateSeekingForward, // MPMoviePlaybackStateSeekingBackward switch (_player.playbackState) { case IJKMPMoviePlaybackStateStopped: { NSLog(@"IJKMPMoviePlayBackStateDidChange %d: stoped", (int)_player.playbackState); break; } case IJKMPMoviePlaybackStatePlaying: { NSLog(@"IJKMPMoviePlayBackStateDidChange %d: playing", (int)_player.playbackState); break; } case IJKMPMoviePlaybackStatePaused: { NSLog(@"IJKMPMoviePlayBackStateDidChange %d: paused", (int)_player.playbackState); break; } case IJKMPMoviePlaybackStateInterrupted: { NSLog(@"IJKMPMoviePlayBackStateDidChange %d: interrupted", (int)_player.playbackState); break; } case IJKMPMoviePlaybackStateSeekingForward: case IJKMPMoviePlaybackStateSeekingBackward: { NSLog(@"IJKMPMoviePlayBackStateDidChange %d: seeking", (int)_player.playbackState); break; } default: { NSLog(@"IJKMPMoviePlayBackStateDidChange %d: unknown", (int)_player.playbackState); break; } } self.blurImageView.hidden = YES; [self.blurImageView removeFromSuperview]; } #pragma mark Install Movie Notifications /* Register observers for the various movie object notifications. */ -(void)installMovieNotificationObservers { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadStateDidChange:) name:IJKMPMoviePlayerLoadStateDidChangeNotification object:_player]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:IJKMPMoviePlayerPlaybackDidFinishNotification object:_player]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mediaIsPreparedToPlayDidChange:) name:IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification object:_player]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackStateDidChange:) name:IJKMPMoviePlayerPlaybackStateDidChangeNotification object:_player]; } #pragma mark Remove Movie Notification Handlers /* Remove the movie notification observers from the movie object. */ -(void)removeMovieNotificationObservers { [[NSNotificationCenter defaultCenter]removeObserver:self name:IJKMPMoviePlayerLoadStateDidChangeNotification object:_player]; [[NSNotificationCenter defaultCenter]removeObserver:self name:IJKMPMoviePlayerPlaybackDidFinishNotification object:_player]; [[NSNotificationCenter defaultCenter]removeObserver:self name:IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification object:_player]; [[NSNotificationCenter defaultCenter]removeObserver:self name:IJKMPMoviePlayerPlaybackStateDidChangeNotification object:_player]; } #pragma mark --- getters and setters - (STRChatLiveViewController *)chatVc{ if (_chatVc == nil) { _chatVc = [[STRChatLiveViewController alloc] init]; } return _chatVc; }
直播推流之blibli和拉流LFLiveKit
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。