七牛SDK连麦那些事

由于项目需求需要直播的时候连麦.于是就走了一段苦逼路. 按照demo提示的写法自己写了好几遍, 但是每次都是点击连麦的时候崩溃, 崩溃啊,崩溃. 因为项目的特殊性,老板每次见我就是问 “连麦 搞好了吗?”. 我应该说我比程序还崩溃... 并且我向七牛提供工单的时候, 他们说的意思就是他们也不知道原因,让我自己查找,找到了好告诉他们, 我.....

(lldb) bt
* thread #35, name = 'sdk_worker_thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xb00000000000002a)
  * frame #0: 0x0000000100687d00 XXX`X509_subject_name_cmp + 52
    frame #1: 0x000000010066e9f8 XXX `OBJ_bsearch_ex_ + 136
    frame #2: 0x0000000101065894 XXX `sk_find + 104
    frame #3: 0x000000010106c230 XXX `X509_OBJECT_retrieve_match + 28
    frame #4: 0x000000010106c180 XXX `X509_STORE_add_cert + 232
    frame #5: 0x0000000100c31d24 XXX `rtc::OpenSSLAdapter::ConfigureTrustedRootCertificates(ssl_ctx_st*) + 140
    frame #6: 0x0000000100c30c5c XXX `rtc::OpenSSLAdapter::SetupSSLContext() + 68
    frame #7: 0x0000000100c30a3c XXX `rtc::OpenSSLAdapter::BeginSSL() + 156
    frame #8: 0x0000000100c31694 XXX `rtc::OpenSSLAdapter::OnConnectEvent(rtc::AsyncSocket*) + 140
    frame #9: 0x0000000100c2b6e0 XXX `sigslot::signal1<rtc::AsyncSocket*, sigslot::single_threaded>::operator()(rtc::AsyncSocket*) + 84
    frame #10: 0x0000000100c229a8 XXX `rtc::SocketDispatcher::OnEvent(unsigned int, int) + 60
    frame #11: 0x0000000100c20ecc XXX `rtc::PhysicalSocketServer::Wait(int, bool) + 872
    frame #12: 0x0000000100c1aa8c XXX `rtc::MessageQueue::Get(rtc::Message*, int, bool) + 812
    frame #13: 0x0000000100c2e0e0 XXX `rtc::Thread::ProcessMessages(int) + 124
    frame #14: 0x0000000100c2dee4 XXX `rtc::Thread::PreRun(void*) + 488
    frame #15: 0x000000018aef568c libsystem_pthread.dylib`_pthread_body + 240
    frame #16: 0x000000018aef559c libsystem_pthread.dylib`_pthread_start + 284
    frame #17: 0x000000018aef2cb4 libsystem_pthread.dylib`thread_start + 4

正文

首先,七牛连麦SDK 一定要从 https://developer.qiniu.com/pili/sdk/1639/PLMediaStreamingKit-RTC 这个网址下载的, 手动导入到程序中.

其次,播放的时如果用 PLPalyerKit 的话, 一定要用 PLPalyerKit.frame, 为什么说一定要用啊.这是才是重点.
防止冲突,
防止冲突,
防止冲突....

什么冲突? .a文件冲突 ! 如果只是嵌入了 PLMediaStreamingKit-RTC 和 PLPalyerKit (不是导入的.frame的动态库), 你会发现有两个 libcrypto.a 和 两个 libssl.a, 当你的项目中添加支付宝之后, 你又会惊奇的发现 现在在是三个 libcrypto.a 和 三个 libssl.a. 对没错就是冲突, 果断的将 PLPalyerKit 换成动态库 PLPalyerKit.frame, 保留一个 libcrypto.a 和 一个 libssl.a 再次运行项目.成功.

温馨提示, 主播连麦最好比 推流 延迟两秒(否则 容易出现连麦失败).

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 160,009评论 24 690
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 7,582评论 4 41
  • 情人节前夕,借着培训的机会,来到了常州,不的不说这个时间点让很多同事吐槽不已,毕竟想二人空间的完美时机也不是那么多...
    阳光小妹阅读 143评论 0 1
  • 一恩关于事项时间管理这件事我确实还要好好做
    一只2b兔子阅读 97评论 0 0
  • 总有一些东西会仓促的就消失,就像午后蹲在树下吃的冰淇淋,就像刚好触及你裤脚的小白花,就像你以为会有很漫长很漫长的成...
    刘十七_R阅读 62评论 0 5