美文网首页iOS音频、视频、直播相关iOS 视频直播视频直播
ios在线直播-->基于ijkplayer框架的进一步学习

ios在线直播-->基于ijkplayer框架的进一步学习

作者: Hither | 来源:发表于2016-06-18 17:14 被阅读1953次

    在上一片文章中简单介绍了ijkplayer这个框架以及给出了一个例子。今天是继续深入学习ijkplayer这个框架的一天。😀😀😀

    大家看看效果:

    这个框架还是用的上一篇文章的 ,直接顺手拿过来。

    看看整体的项目结构:

    (1)还是按照习惯的做法,将UITableView的dataSource和delegate分离出来,方便自己写代码和以后的维护。

    在delegate里面实现了列表滚动的3D动画效果:

    -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        cell.layer.transform = CATransform3DMakeScale(0.1, 0.1, 1);
        [UIView animateWithDuration:1 animations:^{
            cell.layer.transform = CATransform3DMakeScale(1, 1, 1);
        }];
    }
    

    (2)屏幕滚动 导航栏若隐若现

    这里我使用KVO实现这个效果:
    
    注册:
    [_dataTableView addObserver: self forKeyPath: @"contentOffset" options: NSKeyValueObservingOptionNew context: nil];
    
    实现的方法:
    //KVO监听屏幕滚动
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
    {
        UIPanGestureRecognizer* pan = _dataTableView.panGestureRecognizer;
        //获取到拖拽的速度 >0 向下拖动 <0 向上拖动
        CGFloat velocity = [pan velocityInView:_dataTableView].y;
        
        if (velocity<-5) {
            //向上拖动,隐藏导航栏
            [self.navigationController setNavigationBarHidden:true animated:true];
        }
        else if (velocity>5) {
            //向下拖动,显示导航栏
            [self.navigationController setNavigationBarHidden:false animated:true];
        }
        else if(velocity==0){
            //停止拖拽
        }
    }
    

    (3)讲讲播放

    初始化player对象,并完成相关的设置

    self.url = [NSURL URLWithString:_liveUrl];
    _player = [[IJKFFMoviePlayerController alloc] initWithContentURL:self.url withOptions:nil];
    

    注册通知&&移除通知

    注册:
    - (void)installMovieNotificationObservers {
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(loadStateDidChange:)
                                                     name:IJKMPMoviePlayerLoadStateDidChangeNotification
                                                   object:_player];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(moviePlayBackFinish:)
                                                     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];
        
    }
    
    移除:
    - (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];
    }
    
    

    Demo地址:https://github.com/hejintaochenxin/blue

    注意下:因为git上传单个文件不能超过100M~ 所以我把这个从项目中剥离了出来 大家可以参考本文最上面的链接自己生成,或者可以私我,我直接发给你~你只需要把这个直接拖入项目就可以了~

    在这里给大家推荐一个现在很牛叉的框架:SmarterStreaming

    https://github.com/daniulive/SmarterStreaming

    - 集成的时候需要注意:
    (1)真机测试
    (2)
    1. 编译时找不到 libSmartPlayerSDK.a 时,请先到 SmartiOSPlayer/SmartiOSPlayer 目录, 解压libSmartPlayerSDK.zip.
    2. 编译时找不到 libSmartPublisherSDK.a 时,请先到 SmartiOSPublisher/SmartiOSPublisher/libs 目录, 解压libSmartPublisherSDK.zip.
    

    相关文章

      网友评论

      • yx_yang:大神 我发现用你的这个demo播放的url是http://pul......这样的 可以正常播放,为什么我的rtmp://live-stream.......这样的就不能正常播放
      • Geeks_Chen:18519191125@163.com 感谢楼主的分享
      • developer_eric:有劳楼主,发一份 过来 357818547@qq.com
        还有请问一下我自己打包的IJKMediaFramework 拖到你的demo里怎么不能用啊
      • 简枫i:273001892@qq.com,麻烦楼主,非常感谢。
      • Schorem:975450858@qq.com 麻烦楼主
      • 唐岭云:楼主345684180@qq.com 麻烦了。谢谢
        Hither:@老司机丶 没事
        唐岭云:@PokerDady 谢谢 收到
        Hither:@老司机丶 注意查收
      • 我想走走:15936527501@163.com
        Hither:@峰峰爱码 才看到 不好意思 已经发了 注意查收
      • 我想走走:楼主,给我一份,我也想看看,谢谢楼主
      • c96ca2a17d23:博主,你的数据哪里来的啊,还有只可以看别人直播,假如我自己想直播呢 :smile:
        Hither:@老倌子 我这里只放了拉流的部分。没有放推流的部分。 数据是找的一个接口拿到的
      • 084e9f830d06:楼主,求demo,jiangchuanc@gmail.com ,谢谢 :relaxed:
        Hither:@orioChen 注意查收
      • 木阿哈哈哈:谢谢楼主,麻烦也给我发一份 2609719705@qq.com
        Hither:@木阿哈哈哈 注意查收
      • c3d44b02ea10:楼主辛苦了,给你一个爱的抱抱,1009105480@qq.com 麻烦 射一发 3q
        Hither:@闲石 注意查收
      • dengxf:有劳楼主,发一份 过来 178057869@qq.com
        Hither:@dengxf 注意查收
      • Qinz:麻烦楼主发一份:719263987@qq.com 感谢~
        Hither:@Qinz 没事的
        Qinz:@一个不放弃的人 收到了,感谢楼主
        Hither:@Qinz 注意查收
      • bd1ea43aac11:楼主470505348@qq.com 麻烦发一份, 最近正打算做直播这一方面谢谢
        Hither:@bd1ea43aac11 不好意思 才看到 已经发给你了
      • 你家毕老师:楼主,麻烦发我一份,1986721955@qq.com谢谢
        Hither:@骗人的孩纸 不好意思 才看到 已经发给你了
      • Ryan文濤:博主,好像只有播放,没有直播耶。什么时候弄一个直播的相关教程呀??
        Hither:@Ryan文濤 推的那部分没有弄上去。是我的失误
        Ryan文濤:@写代码我负责帅 只有播放端啊,没有采集端呀
        Hither:@Ryan文濤 这就是直播啊
      • Miu七七:楼主发我!好人一生平安!
        3185946965@qq.com
        Hither:@Miu七七 没事
        Miu七七:@写代码我负责帅 谢谢你
        Hither:@Miu七七 注意查收
      • 看流星砸死你:楼主很帅,好人一生平安491956826@qq.com
        Hither:@看流星砸死你 注意查收
      • Civel_Xu:985515495@qq.com
        Hither:@Civel_Xu 没事
        Civel_Xu:@写代码我负责帅 谢谢
        Hither:@Civel_Xu 注意查收
      • Ryan文濤:有劳楼主,发一份 过来 234515201@qq.com
        谢谢楼主
        Hither:@Ryan文濤 没事
        Ryan文濤:@写代码我负责帅 好,谢谢。已经收到。
        Hither:@Ryan文濤 注意查收
      • 唯美帅哥集中营:有劳楼主,发一份 过来 1273892992@qq.com

        有劳楼主压缩分享一个连接可以让我们下载

      • a933a89d49a2:楼主597414708@qq.com 麻烦发一份, 现在我正好需要这方面得知识,xiexie
        a933a89d49a2:@写代码我负责帅 谢谢楼主, 已收到
        Hither:@简简简树树 注意查收
      • 2b1ed5b649ed:谢谢楼主,麻烦给我发一份 1776549643@qq.com
      • 王文广JustDoIt:楼主,592999374@qq.com 麻烦发一份,谢谢
        王文广JustDoIt:@王文广JustDoIt 不用了,自己集成了,谢谢楼主
      • Metoo33:楼主,能发一份过来嘛? 谢谢 1192157487@qq.com
      • 一抹果茶:楼主33745072@qq.com 麻烦发一份,现在我正好需要这方面得知识,谢谢楼主:kissing_heart:
        一抹果茶:@写代码我只负责帅 OK,谢谢
        Hither:@一抹果茶 注意查收
      • cad57841b896:楼楼,麻烦给我发一份674273581@qq.com 这几天想做关于解码器方面的东西头大..希望共同提高 = =
        cad57841b896:@写代码我只负责帅 谢谢 :kissing_heart:
        Hither:@漠漠漠漠漠颜 注意查收
      • 红尘困年少:谢谢楼主,请给我发一份 1029660589@qq.com
        红尘困年少:@写代码我只负责帅 收到了,感谢
        Hither:@红尘困年少 注意查收
      • 峰子1994:发一份给我可以不358244144@qq.com
        峰子1994: @写代码我只负责帅 好的
        Hither:@Claudlit 没事
        Hither:@峰子1994 注意查收
      • JHA:谢谢楼主344378540@qq.com
        Hither:@矫鸿安 注意查收
      • Claudlit:zhaohongbin_c@163.com 麻烦楼主发一份 谢谢楼主
        Claudlit:@写代码我只负责帅 已收到 谢谢楼主
        Hither:@Claudlit 注意查收
      • 买了否冷_:谢楼主 2514538850@qq.com
        Hither:@偷偷学很多东西 注意查收
        Hither:@偷偷学很多东西 明天给你发。今天下班了
      • 小小希奇幻记:楼主 757964954@qq.com 麻烦发一份给我!谢谢楼主!
        Hither:@370e705f738e 注意查收
      • xxttw:不错
        Hither:@Unc1eWang 共同学习

      本文标题:ios在线直播-->基于ijkplayer框架的进一步学习

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