类似映客的直播app系统软件如何开发?

一、直播现状简介

2.直播优化层面

其实最难的难点是提高首播时间、服务质量即Qos(Quality of Service,服务质量),如何在丢包率20%的情况下还能保障稳定、流畅的直播体验,需要考虑以下方案:

1.为加快首播时间,收流服务器主动推送 GOP :(Group of Pictures:策略影响编码质量)所谓GOP,意思是画面组,一个GOP就是一组连续的画面至边缘节点,边缘节点缓存 GOP,播放端则可以快速加载,减少回源延迟

帧.2

3.纯音频丢帧,要解决音视频不同步的问题,要让视频的 delta增量到你丢掉音频的delta之后,再发音频,要不就会音视频不同步

4.源站主备切换和断线重连

5.根据TCP拥塞窗口做智能调度,当拥塞窗口过大说明节点服务质量不佳,需要切换节点和故障排查

6.增加上行、下行带宽探测接口,当带宽不满足时降低视频质量,即降低码率

7.定时获取最优的推流、拉流链路IP,尽可能保证提供最好的服务

8.监控必须要,监控各个节点的Qos状态,来做整个平台的资源配置优化和调度

协议差异.4

三、项目搭建:采集端

1.目前比较知名的有VideoCore

目前国内很多知名的推流框架都是对VideoCore的二次开发。这个框架主要使用C++写的,支持RTMP推流,但对于iOS开发者来说有点晦涩难懂(精通C++的除外)。想开源和免费的可以选择现在的几个知名项目VideoCore + GPUImage+基于GPU的美颜滤镜 ,播放用IJKPlayer自己修改。

2.国内比较火的LiveVideoCoreSDK

框架提供IOS苹果手机的RTMP推流填写RTMP服务地址,直接就可以进行推流,SDK下载后简单的工程配置后能直接运行,实现了美颜直播和滤镜功能,基于OpenGL,前后摄像头随时切换,提供RTMP连接状态的回调。

3.可读性比较好的推流LFLiveKit

框架支持RTMP(Real Time Messaging Protocol ):实时消息传输协议,Adobe公司的。

HlS (HTTP Live Streaming) :苹果自家的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。

推荐这个框架第一是因为它主要使用OC写的,剩下的用C语言写的,框架文件十分清晰,这对不精通C++的初学者提供了很大的便利,并且拓展性非常强,支持动态切换码率功能,支持美颜功能。

4.美颜功能

美颜的话一般都是使用的GPUImage基于OpenGl开发,纯OC语言,这个框架十分强大,可以做出各种不同滤镜,可拓展性高。如果对美颜没有具体思路可以直接用BeautifyFace,可以加入到项目中,很方便的实现美颜效果。

四、项目具体搭建

1.如何实现美颜/p>

美颜功能使用的是BeautifyFace,它可以很快速的实现美颜功能,效果不错,它的底层还是基于的GPUImage,对GPUImage十分喜爱的Developer,可以参照BeautifyFace,写出一个属于自己的美颜功能,并且添加各种滤镜。

2.悬浮TabBar的实现

这个TabBar看着像是用自定义TabBar做的,但事实上它还是用的系统的TabBar,给系统的tabBar.backgroundImage设置一张设计好的背景图片。

TabBar.9

//隐藏阴影线

[[UITabBar appearance] setShadowImage:[UIImage new]];

– (void)setupTabBarBackgroundImage { UIImage *image = [UIImage imageNamed:@”tab_bg”]; CGFloat top = 40; // 顶端盖高度

CGFloat bottom = 40 ; // 底端盖高度

CGFloat left = 100; // 左端盖宽度

CGFloat right = 100; // 右端盖宽度

UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right); // 指定为拉伸模式,伸缩后重新赋值

UIImage *TabBgImage = [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch]; self.tabBar.backgroundImage = TabBgImage;

[[UITabBar appearance] setShadowImage:[UIImage new]];

[[UITabBar appearance] setBackgroundImage:[[UIImage alloc]init]];

}//自定义TabBar高度- (void)viewWillLayoutSubviews { CGRect tabFrame = self.tabBar.frame;

tabFrame.size.height = 60;

tabFrame.origin.y = self.view.frame.size.height – 60; self.tabBar.frame = tabFrame;

}

3.播放端的实现

播放端用的针对RTMP优化过的ijkplayer(),ijkplayer是基于FFmpeg的跨平台播放器,这个开源项目已经被多个 App 使用,其中映客、美拍和斗鱼使用了 ijkplayer(5700+

– (void)goPlaying { //获取url

self.url = [NSURL URLWithString:_liveUrl];

_player = [[IJKFFMoviePlayerController alloc] initWithContentURL:self.url withOptions:nil]; UIView *playerview = [self.player view]; UIView *displayView = [[UIView alloc] initWithFrame:self.view.bounds]; self.PlayerView = displayView;

[self.view addSubview:self.PlayerView]; // 自动调整自己的宽度和高度

playerview.frame = self.PlayerView.bounds;

playerview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

[self.PlayerView insertSubview:playerview atIndex:1];

[_player setScalingMode:IJKMPMovieScalingModeAspectFill];

}

4.推送端的实现

使用的是LFLiveKit,推流端可以选择很多GitHub上的开源项目替代LFLiveKit,比如上面所提到的VideoCore,和LiveVideoCoreSDK。商用的话可以选择各大厂商的SDK, 易直播云、七牛、腾讯、百度、新浪、其中金山直播云本人用过。使用直播云的好处就是能快速上线App,功能十分齐全,可以播放器和推流端,服务器一套下来,有专业客服人员帮助集成到工程中,缺点就是流量费太贵了,具体可以了解下各大厂商的收费标准。

– (UIButton*)startLiveButton{ if(!_startLiveButton){

_startLiveButton = [UIButton new]; //位置

_startLiveButton.frame = CGRectMake((XJScreenW – 200) * 0.5, XJScreenH – 100, 200, 40);

_startLiveButton.layer.cornerRadius = _startLiveButton.frame.size.height * 0.5;

[_startLiveButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

[_startLiveButton.titleLabel setFont:[UIFont systemFontOfSize:16]];

[_startLiveButton setTitle:@”开始直播” forState:UIControlStateNormal];

[_startLiveButton setBackgro

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年6月16日
下一篇 2016年6月16日

相关推荐