好久沒這么興奮了钠署,解決了很長時間自己棘手的問題勾怒。
因為項目需要搬瑰,最近自己著手了ios開發(fā),主要業(yè)務(wù)是拿到蘋果手機的共享原生屏幕流控硼,因為我們的主項目是h5項目,所以我還需要把這個流發(fā)到h5上艾少,這里面也涉及了很多跨平臺交互的問題卡乾,但是這次文章先不談這個難點。
這次主要談?wù)刬os上建立的廣播擴展缚够,如何優(yōu)雅的結(jié)束這次廣播
問題:
我正在使用自己的自定義SampleHandler
展RPBroadcastSampleHandler
在iOS中實現(xiàn)一個廣播上傳擴展幔妨。問題很簡單--我需要一種在擴展中優(yōu)雅地結(jié)束廣播的方法。要求是當(dāng)所有其他用戶停止觀看廣播時谍椅,停止廣播并關(guān)閉屏幕錄制误堡。我可以很容易地偵測到這種情況。然而雏吭,RPBroadcastSampleHandler
似乎沒有提供一種完成它的方法锁施,至少不是一種優(yōu)雅的方法≌让牵基于apple的開發(fā)者文檔悉抵,在廣播結(jié)束時(當(dāng)用戶結(jié)束時)有一個[broadcastFinished()
]回調(diào),并且有一種方法可以在出現(xiàn)錯誤時完成它- [finishBroadcastWithError(_:)
]摘完。我可以提供一些很好的錯誤消息姥饰,并以錯誤結(jié)束它,但我更喜歡在結(jié)束它時根本不顯示任何錯誤-我不想指出有任何錯誤孝治,因為這是預(yù)期的行為列粪。
解決方案:
Stack Overflow用戶
發(fā)布于 2021-08-23 20:03:29
您應(yīng)該使用Obj-C代碼來完成此操作。正如您在[Telegram Official repository]上看到的谈飒,它們使用BroadcastUploadHelpers來優(yōu)雅地停止sampleHandler岂座。
void finishBroadcastGracefully(RPBroadcastSampleHandler * _Nonnull broadcastSampleHandler) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnonnull"
[broadcastSampleHandler finishBroadcastWithError:nil];
#pragma clang diagnostic pop
}
真的很厲害,這個方法步绸,巧妙的運用了編譯器的指令掺逼,讓nil作為參數(shù)傳進去也沒有報錯,也優(yōu)雅的完成了我們停止廣播的任務(wù)瓤介。