序
由于项目需求需要直播的时候连麦.于是就走了一段苦逼路. 按照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 再次运行项目.成功.
温馨提示, 主播连麦最好比 推流 延迟两秒(否则 容易出现连麦失败).
网友评论