iOS 拉流实现

移动开发 简书

Dome 比较丑还没有完善,凑合着看吧,要是觉得代码也(我靠什么鬼,根本看不懂。写的是什么鸟东西),那么请点击左上角后退按钮,别忘了把门带上。谢谢

播放:IJKPlayer

集成方法:

  • CocoaPods
  • pod search IJKPlayer
  • pod install
    如若不会CocoaPods那么请自行谷歌或度娘
    再不行请转到手动集成:arrow_down:

如若想手动集成传送门在下方,祝你好运。:arrow_down:

手动集成传送门传送门,点击这里

这是正在直播的结果只不过是电脑截图

以下是用IJKPlayer播放器进行播放的源码

相关头文件

#import "ViewController.h"
#import
#import

@interfaceViewController ()
*/** 直播播放器 */*
@property(nonatomic,strong)IJKFFMoviePlayerController*moviePlayer;
/** 直播流地址 */
@property(nonatomic,copy) NSString *flv;
@end
@implementationViewController

- (void)viewDidLoad {
[super viewDidLoad];
_flv [email protected]"rtmp://192.168.8.164:1935/zbcs/room";
[self plarFLV:_flv];
}

#pragma mark - private method
//最好用真机测试以免卡顿
- (void)plarFLV:(NSString*)flv{
IJKFFOptions*options = [IJKFFOptionsoptionsByDefault];
[optionssetPlayerOptionIntValue:1forKey:@"videotoolbox"];
// 帧速率(fps) (可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97
// [options setPlayerOptionIntValue:29.97 forKey:@"r"];
[optionssetOptionIntValue:29.97forKey:@"r"ofCategory:kIJKFFOptionCategoryPlayer];
[optionssetOptionIntValue:60forKey:@"max-fps"ofCategory:kIJKFFOptionCategoryPlayer];
[optionssetOptionIntValue:IJK_AVDISCARD_DEFAULTforKey:@"skip_frame"ofCategory:kIJKFFOptionCategoryCodec];
[optionssetOptionIntValue:IJK_AVDISCARD_DEFAULTforKey:@"skip_loop_filter"ofCategory:kIJKFFOptionCategoryCodec];
[optionssetOptionIntValue:1forKey:@"videotoolbox"ofCategory:kIJKFFOptionCategoryPlayer];
// -vol——设置音量大小,256为标准音量。(要设置成两倍音量时则输入512,依此类推
[optionssetPlayerOptionIntValue:512forKey:@"vol"];
_moviePlayer = [[IJKFFMoviePlayerControlleralloc]initWithContentURLString:flvwithOptions:options];
_moviePlayer.view.frame=self.view.bounds;
// 填充fill
_moviePlayer.scalingMode= IJKMPMovieScalingModeAspectFill;
// 设置自动播放(必须设置为NO, 防止自动播放, 才能更好的控制直播的状态)
_moviePlayer.shouldAutoplay=NO;
// 默认不显示
_moviePlayer.shouldShowHudView=NO;
[self.viewinsertSubview:_moviePlayer.viewatIndex:0];
[_moviePlayerprepareToPlay];
[_moviePlayerplay];
// 设置监听
[self initObserver];
}

- (void)initObserver{
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(stateDidChange)name:IJKMPMoviePlayerLoadStateDidChangeNotificationobject:_moviePlayer];
}

#pragma mark - notify method
- (void)stateDidChange{
if((_moviePlayer.loadState& IJKMPMovieLoadStatePlaythroughOK) !=0) {
if(!_moviePlayer.isPlaying) {
[_moviePlayerplay];
}
}else if(_moviePlayer.loadState& IJKMPMovieLoadStateStalled){
// 网速不佳, 自动暂停状态
NSLog(@"网速不佳");
}
}

http://116.211.167.106/api/live/aggregation?uid=133825214&interest=1 偷偷告诉你,这是偷人家的推流数据就不能说是偷谁家的了,怕挨揍

这里写一下聊天室的逻辑,也是集合网上,研究半天,觉得有点恶心。

首先在主播开始直播的同时,创建聊天室,(包括:房间号==主播用户ID,所有用户的ID),说白了就是讲这些数据发送到服务器.一个聊天室就是一个单独的数据传输通道.如果有用户加入聊天室,将当前用户的ID加入到该主播聊天室.服务区保存当前(聊天室的会员.)大体上来说就是服务器分流的工作。跟前段没太大关系,害得我研究好半天

原文来自简书,麦子专栏原文地址: 传送门

这篇文章也是参考网上自己整合以下,方便各路大神更直接的了解这两个第三方

再次声明本片文章不是自己原创,虽然有自己的一些建议,但是大部分还是来自网上,本文仅供参考,如要转载请名著出处

代码比较长,写一些废话,为的是能逗你一笑,别介意。能力有限,只能写这么多.有什么问题欢迎大家留言指正,我看到一定回复.感谢!!!!!!!

简书稿源:简书 (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 移动开发 » iOS 拉流实现

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录