美文网首页iOS图像&视频iOS开发好文iOS小项目
做一款仿映客的直播App?看我就够了

做一款仿映客的直播App?看我就够了

作者: stlndm | 来源:发表于2016-07-06 17:14 被阅读43943次

    一、直播现状简介

    Linkee.10

    1.技术实现层面:

    技术相对都比较成熟,设备也都支持硬编码。IOS还提供现成的 Video ToolBox框架,可以对摄像头和流媒体数据结构进行处理,但Video ToolBox框架只兼容8.0以上版本,8.0以下就需要用x264的库软编了。

    github上有现成的开源实现,推流、美颜、水印、弹幕、点赞动画、滤镜、播放都有。技术其实不是很难,而且现在很多云厂商都提供SDK,七牛云、金山云、乐视云、腾讯云、百度云、斗鱼直播伴侣推流端,功能几乎都是一样的,没啥亮点,不同的是整个直播平台服务差异和接入的简易性。后端现在 RTMP/HTTP-FLV 清一色,App挂个源站直接接入云厂商或CDN就OK。

    2.直播优化层面

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

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

    GOP.1

    2.GOP丢帧,为解决延时,为什么会有延时,网络抖动、网络拥塞导致的数据发送不出去,丢完之后所有的时间戳都要修改,切记,要不客户端就会卡一个 GOP的时间,是由于 PTS(Presentation Time Stamp,PTS主要用于度量解码后的视频帧什么时候被显示出来) 和 DTS 的原因,或者播放器修正 DTS 和 PTS 也行(推流端丢GOD更复杂,丢 p 帧之前的 i 帧会花屏)

    帧.2

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

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

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

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

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

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

    直播过程.3

    9.如果产品从推流端、CDN、播放器都是自家的,保障 Qos 优势非常大

    10.当直播量非常大时,要加入集群管理和调度,保障 Qos

    11.播放端通过增加延时来减少网络抖动,通过快播来减少延时。(出自知乎宋少东)。

    3.运营成本和客户体验

    根据网上的数据,斗鱼 TV 为 3 亿人民币,战旗 TV 为 1.5 亿人民币,龙珠为 1.2 亿人民币,虎牙为 3000 万 + 人民币。

    运营和推广:这个就比较烧钱了,一些做移动直播、游戏直播、秀场直播的A轮至少得上千万。

    用户体验:流畅、不卡顿、不花屏、断线重连、丢包策略、首画加载速度、丰富的礼物系统,为了提高用户体验,可以在后台加载其他页面数据,但要在用户体验和内存优化方面找到平衡点。

    二、流媒体传输

    1.TCP:TCP为点对点的协议,虽然能保证了数据传输的可靠性,但是对服务器资源耗费较大,在数据流大的场合难以保证数据流传输的实时性。

    2.UDP:UDP为不可靠传输协议,不需要维护连接状态,也不认为每个数据包都必须到达接受端,因此网络负荷比TCP小,传输速度也要比TCP快;但在网络越拥挤时,越有更多的数据包丢失。

    3.RTMP:RTMP一个专门为高效传输视频,音频和数据而设计的协议。它通过建立一个二进制TCP连接或者连接HTTP隧道实现实时的视频和声音传输。

    4.FFmpeg:FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案

    协议差异.4

    三、项目搭建:采集端

    1.目前比较知名的有VideoCore

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

    2.国内比较火的LiveVideoCoreSDK

    框架提供IOS苹果手机的RTMP推流填写RTMP服务地址,直接就可以进行推流,SDK下载后简单的工程配置后能直接运行,实现了美颜直播和滤镜功能,基于OpenGL,前后摄像头随时切换,提供RTMP连接状态的回调。
    这个框架是国内比较早的一款推流框架有不少在使用这个SDK,功能非常齐全,作者也比较牛,用来学习推流采集相关内容非常好,但是集成到工程中有些困难(对于我来说)。总的来说这是一款非常厉害的推流SDK,几乎全部使用C++写的,编译效率非常好,如果有实力的话推荐使用这个框架来做自己项目的推流端。

    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.如何实现美颜?

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

    2.悬浮TabBar的实现

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

    TabBar.8

    添加后会发现顶部有一条阴影线,并且TabBar的高度也不够。阴影线与上图绿色线条之间变成了透明颜色,实现下面方法隐藏阴影线,并且调高TabBar的高度。

    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+️) 。在本文的末未提供了,已经打包好的ijkplayer,直接拖入项目就可以使用。省去了编译的过程(编译十分麻烦,并且容易出错)。播放端调用ijkplayer参考VoideSun的简仿映客所写,如有关于ijkplayer的问题,可以请教这位大牛。
    VoiderSun

    - (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 setBackgroundColor:[UIColor grayColor]];
            _startLiveButton.exclusiveTouch = YES;
            __weak typeof(self) _self = self;
            [_startLiveButton addBlockForControlEvents:UIControlEventTouchUpInside block:^(id sender) {
                _self.startLiveButton.selected = !_self.startLiveButton.selected;
                if(_self.startLiveButton.selected){
                    [_self.startLiveButton setTitle:@"结束直播" forState:UIControlStateNormal];
                    LFLiveStreamInfo *stream = [LFLiveStreamInfo new];
                    stream.url = @"rtmp://daniulive.com:1935/live/stream238";
                    [_self.session startLive:stream];
                }else{
                    [_self.startLiveButton setTitle:@"开始直播" forState:UIControlStateNormal];
                    [_self.session stopLive];
                }
            }];
        }
        return _startLiveButton;
    }
    

    stream.url是服务器的地址,推流完成后使用VLC播放。别人家的服务器,不建议推流时间过长(< 1分钟),建议搭建自己的RTMP服务器,详情请见我的另一篇简书文章。

    给没架设服务器的朋友来一套福利:备用服务器地址(亲测可用):

    联系我

    GitHub

    简书

    相关文章

      网友评论

      • JAVA架构师的圈子:大家可以加入程序员交流群:236283328
        https://jq.qq.com/?_wv=1027&;k=5jcV0j7
        本群主要是面向于有工作经验,需要内推,想突破技术瓶颈、薪资瓶颈,以及职位瓶颈,想得到专业技术交流平台的程序员们~
      • 83ccdb173108:我用的网易云信的sdk写的语音直播,可以在直播间发礼物,发文字消息,人数过多的时候,消息发的也比较多,cpu能飙到100%,Memory飙到500多M,耗电量Very High
        stlndm:@rowan罗 🤣如果调用正确,那应该是SDK
        问题
      • 8b16970f2dc6:能给我搭建整套系统吗,包括IOS安卓端,可以的话加个QQ,768369154
      • Super_Yi:IJKMediaFramework.framework 拖进去还是报错啊!
        stlndm:@Berton_Yi 具体报什么错误。
      • 风雨落山岚:点击中间直播按钮就会崩溃到这里是怎么回事呢 ?
        err = CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault, coreVideoTextureCache, renderTarget,
        NULL, // texture attributes
      • 夏天爱大树:感谢楼主,最近想研究直播这块,就看到这篇文章。有个问题请教一下,点开播放后发现声音和画面不同步是什么原因?
      • 追赶阳光:mark 一下 慢慢学习
      • SHyH5:博主有没有关于即时通讯方面的经验,传授一下
        stlndm:@SHyH5 推荐@涂耀辉
        SHyH5:@JIAAIR 你们是自己做还是接别人的SDK
        stlndm:@SHyH5 现在在做即时通讯,有机会发篇文章吧:relaxed:
      • 学习学习中:楼主你好你好,我想请教下 在推流的同时怎么进行在服务端的存储呢?:smile:
        stlndm:@学习学习中 这个是服务端去做吧。:smile:
      • Drodly:这段时间很闲,就顺便学习学习关于视频直播类的知识,正好看见楼主的这篇文章,真是太好了,学习了,我要膜拜大神哎:smile:
        Drodly:@JIAAIR :fist:
        stlndm:@Drodly 我也是在学习中:smile:,加油!
      • 暴走的荷尔蒙:视频聊天也用这些做吗? :grin:
      • 453bb02a76d9:有android的么
        stlndm:@453bb02a76d9 没有哦
      • 07060e4f06c3:啊啊,直播横竖屏,然后分发出来的,横竖屏没有适配啊,楼主怎么搞。
      • 07060e4f06c3:demo里面直播横竖屏怎么解决 :sob:
        stlndm:@cjc_ios 可以自己适配。
      • 98d7f207bf2d:有实现什么特色功能吗?
        stlndm:@叶阳浩 目前忙社交项目,有机会再实现。
      • 码魔ASJ:如何使用真机测试,我用了自己的账号就没法真机测试了大神...
        码魔ASJ:@JIAAIR 可以的
        stlndm:@码魔ASJ 可以的吧。
      • senjucao:请问一下有没有基于Android的直播框架,找了很多的都是ios的。Android很少啊。
      • 爱意随风起q:没Android的资料吗?
      • iCode_:直播的拉流接口能抓到吗
      • 88085c75a02a:有关弹幕实现文章么?推荐下
      • 88085c75a02a:在5s,ios9系统看不了直播,打开没有视频
        stlndm:@魔都码农 我试了下可以的。
      • 88085c75a02a:看直播怎么像在放慢镜头(图像很流畅),声音很流畅
        stlndm:@魔都码农 真机测试的话不会有问题。
      • footSInRoad:谢谢 简主 的分享,虽然不是很懂..😋
      • zhifenx:请问,直播端唱歌系统该怎么实现呢,大神有啥思路没?有没有第三方提供这方面的服务?
      • e3df0cbfb007:干货收藏了
      • WSGNSLog:
        楼主,你的demo添加了那个框架之后还报错,怎么解决呢ld: library not found for -lPods
        clang: error: linker command failed with exit code 1 (use -v to see invocation)
        stlndm:我这边测了没问题,下载后直接把ijk.framework拖进项目。
      • dhcn:楼主在客户端方面主要着重在iOS方面,在Github找了找,金山云把他们的客户端推流及播放SDK开源在GitHub上,而且可以免费使用,还有某国产直播流SDK,虽然也开源,但是其声明企业使用需要授权。再就是国内各大直播云的SDK其实都可以"借"用.
      • 546cb72876bf:出现错误,麻烦大神给解答一下
        2016-09-07 14:45:23.173 高仿映客[4030:160986] OK setup GL
        ijkmp_ios_set_view(glView=0x7fa3e3966700)
        ijkmp_ios_set_view(glView=0x7fa3e3966700)=void
        2016-09-07 14:45:23.175 高仿映客[4030:160986] invalidateRenderBuffer
        2016-09-07 14:45:23.176 高仿映客[4030:161261] IJKSDLGLView: setupDisplay not ready
        ijkmp_set_data_source(url="http://pull99.a8.com/live/1473228760164350.flv?ikHost=ws&ikOp=1&CodecInfo=8192&quot;)
        ijkmp_set_data_source(url="http://pull99.a8.com/live/1473228760164350.flv?ikHost=ws&ikOp=1&CodecInfo=8192&quot;)=0
        ijkmp_prepare_async()
        ijkmp_prepare_async()=0
        2016-09-07 14:45:23.244 高仿映客[4030:160986] invalidateRenderBuffer
        2016-09-07 14:45:23.244 高仿映客[4030:161261] IJKSDLGLView: setupDisplay not ready
        2016-09-07 14:45:23.313 高仿映客[4030:160986] invalidateRenderBuffer
        2016-09-07 14:45:23.313 高仿映客[4030:161261] IJKSDLGLView: setupDisplay not ready
        2016-09-07 14:45:28.984 高仿映客[4030:160986] FFP_MSG_ERROR: 0
        2016-09-07 14:45:28.984 高仿映客[4030:160986] IJKMPMoviePlayBackStateDidChange 2: paused
        2016-09-07 14:45:28.984 高仿映客[4030:160986] playbackStateDidChange: IJKMPMovieFinishReasonPlaybackError: 1
        这是运行出错的代码
        爬向天花板的蚂蚁:请问你解决了这个问题没,我也遇到了,播放http流地址就会出现这种问题
      • 我是卖报滴小行家:虽然现在一句也看不懂 :sob:
      • 966f9b6ff252:大神 收徒弟不!
      • 一抹相思泪成雨:好叼!!!
      • df25adfd8cde:欢迎博主.大神 进来交流探讨,直播视频开发交流群:183331015 😊 谢谢博主大神
      • 光影梦呓:最近在搞直播项目,mark一下
      • 7b1a4f0bad7d:大神,
      • 流河:要想把延時降到200ms以下,該怎麼搞,如果是局域網的話
      • 流河:兄弟问一下,你用的视频编码器什么型号,我这边局域网(无线)测试延时500ms~2000ms, 怎么搞
      • 不辣先生:请问,直播弹幕聊天怎么弄? :pray:
      • 不辣先生:大神,你创个直播开发群啊,可以多多学习和探讨啊 :smile:
        df25adfd8cde:@上了年纪的少年 有群了 直播视频开发交流群:183331015 😊
      • 4a82b5133fb4:flash端推流,其他flash端可以正常接收播放,但是用ijkplayer不能接收播放,请问知道是什么原因吗?
      • 熊啊熊啊熊:mark 给赞

        这个是不能开闪光灯的吗 我怎么没找到开灯的属性 求解 :pensive:
      • 8df23361d8fe:下载Demo能直接运行?
      • Lucifron:最近准备把音频编码从ffmpeg换成系统的硬编码,学习下
      • 西风颂:麻烦问一下就是视频画面和声音不同步在ijkplayer iOS 中怎么设置delta的增量呢?
      • 8e029c6cd0c5:不错 辛苦辛苦
      • aFCge7:能否加下QQ:285401476 直播合作
      • Schorem:ijk导入工程后 第二次编译会报错, 我其他的三方用的pod导入的 求解?
      • 漂泊的掳人:讲的挺全面
      • f66897a47f26:这个完全可以找美丽播啊,快速搭建稳定的映克直播系统
      • f8755c179eaf:这个延迟比较大呀,请问目前的直播app是怎么解决这个延时的,造成延时的因素有哪些?
      • 93d45d365eeb:声音和图像不同步
      • 垃圾___垃圾:点赞出心得效果在iPhone5上面是不连续的,就是有的时候点击不出心。这是什么原因。只有在这个下面是这样。其他手机没事。
      • f8755c179eaf:下载下来的项目开播时控制台输出ERROR:RTMP_ReadPacket,failed to read RTMP packet header
      • foogoout:这种抄袭的别人劳动成果的文章。。。。
        http://weibo.com/ttarticle/p/show?id=2309403969318634263193
        stlndm:@foogoout 我另一篇简书中有赤裸裸的推荐这篇文章,图片用的这篇文章,还有,你真的仔细看了这两篇文章了吗?:smile:
      • c46a82d49768:楼主 这个是怎么看到别人的直播的
        stlndm:@mounsea 需要有服务器分发。
      • 萝卜酱紫:水印、弹幕 不会,还有添加手势屏幕的左右滑动能够改变音量亮度,知道是手势判断移动的X Y,不是太清楚具体实现,博主会吗 ?
        stlndm:@萝卜酱紫 这个要自己写啊,百度一下找找思路。
      • 萝卜酱紫:不是太懂 推送流 这些直播知识概念,哪里有学习的地方吗?这些基本知识还不是太懂呢
        stlndm:@萝卜酱紫 另一篇有推荐的直播博客。
      • 113d951c0e95:看到好多源码都是用c++ 写的,所以想请教一下怎么在xcode中使用这些 直播交流群183331015 请 博主 大神交流指导
      • 韦韦韦:mark一下
      • Ryan___:博主,用手机横屏直播,在电脑上看,视频方向不对。如何根据手机竖屏横屏输出流啊

      • BeijingIamback:搞的太棒了!学习下你的成果
      • 稻草人的小秘密:推流地址 stream.url = @"rtmp://daniulive.com:1935/live/stream238";
        那么在VLC就可以实时看到了么?
        稻草人的小秘密:@JIAAIR 好的 谢谢
        stlndm:@稻草人的小秘密 尽量自己搭建服务器,别人服务器不稳定。
      • 47d9563a943c:你好! 你的图片貌似没有保存 !@ 根本加载不了!
        2016-07-27 15:05:59.708 高仿映客[7742:5194832] Could not load the "me_new_bg_live" image referenced from a nib in the bundle with identifier "xujia.hehehe"
        2016-07-27 15:05:59.710 高仿映客[7742:5194832] Could not load the "live_area_icn_male_prd" image referenced from a nib in the bundle with identifier "xujia.hehehe"
        2016-07-27 15:05:59.710 高仿映客[7742:5194832] Could not load the "me_btn_edit_h_" image referenced from a nib in the bundle with identifier "xujia.hehehe"
        2016-07-27 15:05:59.711 高仿映客[7742:5194832] Could not load the "me_new_icon_zuanshi" image referenced from a nib in the bundle with identifier "xujia.hehehe"
        2016-07-27 15:05:59.712 高仿映客[7742:5194832] Could not load the "jiaIcon" image referenced from a nib in the bundle with identifier "xujia.hehehe"
        2016-07-27 15:05:59.721 高仿映客[7742:5194832] Could not load the "me_new_icon_live" image referenced from a nib in the bundle with identifier "xujia.hehehe"
        2016-07-27 15:05:59.722 高仿映客[7742:5194832] Could not load the "me_new_dengji" image referenced from a nib in the bundle with identifier "xujia.hehehe"
        2016-07-27 15:05:59.722 高仿映客[7742:5194832] Could not load the "me_new_shouyi" image referenced from a nib in the bundle with identifier "xujia.hehehe"
        2016-07-27 15:05:59.723 高仿映客[7742:5194832] Could not load the "me_new_zhanghao" image referenced from a nib in the bundle with identifier "xujia.hehehe"
        stlndm:@wenluyou 你改一下identifier
      • PittWong:学习了,以后可能用的上
      • 简_wan:学习了 :+1:
      • 47d9563a943c:Undefined symbols for architecture x86_64:
        "_OBJC_CLASS_$_PlayerViewController", referenced from:
        objc-class-ref in HotViewController.o
        ld: symbol(s) not found for architecture x86_64
        clang: error: linker command failed with exit code 1 (use -v to see invocation)

        这个是?文件位置发生改变还是?
        47d9563a943c:@JIAAIR 在 github 下载下来 运行 一下就报错了!
        stlndm:@wenluyou 下载下来直接报错吗?
      • 47d9563a943c:我找不到 你的IJKMediaFramework/IJKMediaFramework.h 这个框架 我是个新手! 求指导!
        47d9563a943c:@JIAAIR 已找到! 谢谢!
        stlndm:@wenluyou github有ijk地址,你看下。
      • 47d9563a943c:你好!就是我下载下来并不能运行!
      • ab71a37a9cf2:好人一生平安
      • U小姐咯:为什么我下载了你推荐的采集端都有错,运行不起来啊,而且pod不下来
        U小姐咯:@JIAAIR 百度什么呀?呜呜呜,我qq2451496034,方便加一下我
        stlndm:@U小姐咯 工程配置问题,你百度一下。
      • 380f48c38cf1:很棒,最近要做这个,给了条很好的思路。
      • 也许________:很好 先赞了~~~~ 有问题来请教博主 能建立个群吗?
      • b6b104e00a80:我都觉得我不是作开发的了,完全看不懂,尤其是其中的"推流"
        stlndm:@Tacey_Wong 其实就是采集摄像头信息,把它封装成flv流,推到服务器上。
      • 没骆驼de祥子:Orz 膜拜 :+1:
      • be71de4859f5:楼主什么时候更新呢?
        be71de4859f5:@JIAAIR 辛苦辛苦~~
        stlndm:@铁匠1233 最近事情比较多,我后面会陆续更新。:cry:
      • be71de4859f5:请问 直播中聊天以及送礼物功能是用什么做的呢?
        stlndm:@铁匠1233 对的。这些功能离不开即时通信。
        be71de4859f5:@bellchen 那意思关键技术还是即时通信?
        bellchen:@铁匠1233 送礼物和说话是一个东东呀,只是送礼要扣除金币而已
      • 9d91c3134487:已经打包好的ijkplayer在哪里呢
        stlndm:@kiritos 您好,github有写地址。
      • 阿木摄影:最近刚好要做直播,赞一个
      • bellchen:ijkplayer播放首屏秒开怎么优化呀?
        stlndm:@bellchen 这个问题比较大啊:sweat_smile:,我也在研究中。
      • Scott丶Wang:你给的Demo砍掉其他没用的辅助页面,里面好像没有关于美颜、滤镜、推流的代码啊
        stlndm:@OneWorld 您好,github上有文件具体地址。
      • b525072b0206:正愁优化问题呢,这就出来了!!!大赞!
        stlndm:@慕林生 多谢多谢!
      • 22f1380794ab:写的太浅显,没什么技术含量
        stlndm:@其实一直在你身边 对,更深层次的东西我也在学习中,这只是一个优化思路。:smile:
      • 樱木_花道:不错,收藏了。
      • 0a2230e59b7c:有时间来给我们讲课吗? :+1:
        stlndm:@七牛云 好的,多谢啦。你们把博客写出来比我强多啦。:blush:
        七牛云:我们最近出了公开课 不妨也来看看http://www.imooc.com/learn/707 :relaxed:
        stlndm:@bluehunter :flushed:我不是讲师。
      • 502d7f6e15fc:直播方面的技术? 加个吧
      • 越努力__越幸运:楼主加个切换主播功能
        stlndm:@越努力越幸运a 近期更出来。
      • IOS_绿豆糕:这个有 上下切换主播的功能吗?
      • ROFL:主要功能解释的很细致,值得借鉴! :+1:
        ROFL:@JIAAIR 人艰不拆
        stlndm:@大坏蛋弗兰克 说的一本正经的。:smile:
      • 5f524b9205ba:大神,这东西我完全看不懂,你可以教我吗????
        5f524b9205ba:@JIAAIR 大上海兵哥哥
        stlndm:@兵哥哥调戏隔壁二丫 你是哪个兵哥?
      • 5f047045179b:需要搭建nginx+rtmp服务器吗?
        stlndm:@_liCheng 如果想深入建议自己搭建一个。
      • seventhboy: :+1: :clap: 博主good
      • 郑明明:可以的,点个赞
        stlndm:@nineteen__ 多谢啦!:smile:
      • SunStart:怎么下载下来报错了XJScrollerHiddenBarViewController
        stlndm:@SunStart 不客气,:smile:
        SunStart:@JIAAIR 好的,我试试。 谢谢大神
        stlndm:@SunStart 准备扩充这个类的功能,不小心删错了,你把继承删了就成,不影响主要功能。
      • b2efe7751b24:找不到 "XJScrollerHiddenBarViewController.h"
        stlndm:@热雪1983 准备扩充这个类的功能,不小心删错了,你把继承删了就成。
      • 7e384dcda573:我要嫁程序猿……
        越努力__越幸运:@yeats1314 都嫁了吧
        7e384dcda573: @JIAAIR 那个愿娶,就嫁那个……
        stlndm:@yeats1314 在这评论的都是程序员,你想嫁哪个?:smile:

      本文标题:做一款仿映客的直播App?看我就够了

      本文链接:https://www.haomeiwen.com/subject/tcvkjttx.html