一、前言

  • 随着时代的改变,人们对于内容的需求也不断提高,从文字到图片到音频、视频,可能到以后的 VR

  • 直播是一个非常烧钱的项目,需要足够多的带宽,足够好的服务器,比如负载均衡,这里还会扯到云等等,保证大数据并发,百万人同时访问等等

  • 涉及到一些专业的视频相关的知识,也需要很长时间的学习,如解码(硬解、软解)、编码、转码,还有底层的 ffmpeg(录制、转换以及流化音视频的完整解决方案)

  • 涉及到 即时通讯 和 美颜处理,其中美颜涉及到 OpenGL ,以及基于 OpenGL 的图像/视频处理框架 GPUImage

  • 涉及到 CDN:(Content Delivery Network),即内容分发网络,将网站的内容发布到最接近用户的网络”边缘”,使用户可以就近取得所需的内容,解决 Internet 网络拥挤的状况,提高用户访问网站的响应速度.

  • 一个简单的模型:主播-->直播流媒体服务器--> 多个用户同时观看

  • 简单的流程:采集(流)-->编码-->传输-->解码-->播放

  • 移动端主要协议

    • RTMP 协议 Macromedia(Adobe) 公司协议

    • HTTP Live Streaming(HLS) Apple 公司协议

    • HLS流和RTMP对比:
      HLS 主要是延时比较大 ,基于 HTTP
      RTMP 主要优势在于延时低,基于 TCP

二、阶段

  • 1、客户端拿到服务器分配好的 URL 直接解码播放直播视频。直接客户端拉流

  • 2、自己搭建服务器,播放的流自己控制。服务器推流,客户端拉流

  • 3、调用客户端摄像头等进行录制,客户端推流,服务器接受流

三、各阶段简要说明

1、拿到 URL 进行解码播放直播的视频

  • 使用 ijkplayer ,可从网上找别人打包好的静态库,直接拖到工程中使用

  • 直接用 IJKFFMoviePlayerController 创建 player,设置 player 中属性 view 的尺寸,加入到控制器的 view 上

  • 界面不播放,最好要记得结束播放

@interface ViewController ()@property (nonatomic, strong) id<IJKMediaPlayback> player;@end@implementation ViewController- (void)viewDidLoad {
    [super viewDidLoad];    self.player = [[IJKFFMoviePlayerController alloc]initWithContentURL:[NSURL URLWithString:@"rtmp://live.hkstv.hk.lxdns.com/live/hks"] withOptions:nil];    // 设置 player 中 view 属性的frame,且加入到控制器的 view 中
    self.player.view.frame = self.view.bounds;
    [self.view addSubview:self.player.view
        
		

网友评论