iOS12+ 的屏幕共享及遇到的某些坑

最近在弄屏幕共享事宜亚享,看了很多文章了解了從iOS9一直到iOS12 蘋果在直播錄像方面做的改變啄枕。
如果你對(duì)直播實(shí)現(xiàn)的演變感興趣請(qǐng)點(diǎn)擊此處:傳送門

現(xiàn)在說(shuō)一下iOS12 用Replaykit2 獲取屏幕流的過(guò)程:

屏幕流獲取

1:在項(xiàng)目中添加Targets


Targets

2:添加Broadcast Upload Extension--->Next


添加Broadcast Upload Extension

3:在你想要實(shí)現(xiàn)屏幕共享的界面添加調(diào)取方法
#import "ViewController.h"
#import <ReplayKit/ReplayKit.h>

#define TAG_SHARESCREEN 10086

@interface ViewController ()
@property (nonatomic, strong) RPSystemBroadcastPickerView*broadPickerView;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    _broadPickerView = [[RPSystemBroadcastPickerView alloc] initWithFrame:CGRectMake(50, 50, 200, 200)];
    _broadPickerView.preferredExtension = @"此處填寫你創(chuàng)建的Broadcast Upload Extension 的Bundle id(不是SetupUI的那個(gè))";
    [self.view addSubview:_broadPickerView];
}
@end

運(yùn)行點(diǎn)擊屏幕上的按鈕便調(diào)取出來(lái)了開始錄屏的界面

根據(jù)需求:可能不想要系統(tǒng)自帶的按鈕霹疫,可以做以下優(yōu)化:
#import "ViewController.h"
#import <ReplayKit/ReplayKit.h>

#define TAG_SHARESCREEN 10086

@interface ViewController ()
@property (nonatomic, strong) RPSystemBroadcastPickerView*broadPickerView;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    _broadPickerView = [[RPSystemBroadcastPickerView alloc] initWithFrame:CGRectMake(50, 50, 200, 200)];
    _broadPickerView.preferredExtension = @"此處填寫你創(chuàng)建的Broadcast Upload Extension 的Bundle id(不是SetupUI的那個(gè))";

    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(50, 50, 300, 40)];
    [button setTitle:@"點(diǎn)我就好了" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(clickedOnStartRecordButton:) forControlEvents:UIControlEventTouchUpInside];
    [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    button.tag = TAG_SHARESCREEN;
    [self.view addSubview:button];
}
- (void)clickedOnStartRecordButton:(UIButton *)sender
{
    if (sender.tag == TAG_SHARESCREEN)
    {
        for (UIView *view in _broadPickerView.subviews)
        {
            if ([view isKindOfClass:[UIButton class]])
            {
                //調(diào)起錄像方法绵疲,UIControlEventTouchUpInside的方法看其他文章用的是UIControlEventTouchDown梭姓,
                //我使用時(shí)用UIControlEventTouchUpInside用好使仪搔,看個(gè)人情況決定
                [(UIButton*)view sendActionsForControlEvents:UIControlEventTouchUpInside];
            }
        }
    }
}

@end

\color{red}{Tips:}使用RPSystemBroadcastPickerView調(diào)取系統(tǒng)錄制頁(yè)面時(shí)忧换,如果手機(jī)系統(tǒng)為:\color{red}{iOS12 前兩個(gè)版本恬惯、}可能會(huì)導(dǎo)致調(diào)取\color{red}{不成功},本人\color{red}{屏蔽}了iOS12.1之前版本的功能使用亚茬,請(qǐng)諸位自行整理解決辦法酪耳。(此乃蘋果系統(tǒng)的坑、無(wú)法解決----如有大佬有解決方法刹缝,請(qǐng)您不吝賜教~小狼拜謝ing)

調(diào)試:

1碗暗、先運(yùn)行項(xiàng)目(test_fore)到手機(jī)上


運(yùn)行項(xiàng)目

此時(shí)操作錄屏等操作,只能斷點(diǎn)到test_fore里的代碼

2梢夯、檢測(cè)test_fore_sharing中的數(shù)據(jù):運(yùn)行test_fore_sharing 選擇上述的項(xiàng)目


test_fore_sharing

選擇與哪個(gè)項(xiàng)目匹配

此時(shí)可斷點(diǎn)到 test_fore_sharing 下的所有代碼

3讹堤、檢測(cè)test_fore_sharingSetupUI:運(yùn)行test_fore_sharingSetupUI


檢測(cè)test_fore_sharingSetupUI

此時(shí)可斷點(diǎn)到 test_fore_sharingSetupUI 下的所有代碼

同步數(shù)據(jù)

把test_fore_sharing獲取的屏幕流推送給test_fore(主App),test_fore(主App)推送屏幕流給RTC

可參考文章:
網(wǎng)易云信_(tái)Socket
網(wǎng)易云信_(tái)App Groups
華為云_App Groups//已封裝好SDK
騰訊云_CFNotificationCenter
騰訊云_App Group

暫時(shí)使用的是Socket方法厨疙,等實(shí)現(xiàn)完善后會(huì)發(fā)布完善的方法
類庫(kù)的使用方法
1洲守、使用了Socket和Codec兩個(gè)文件夾中的代碼,把兩個(gè)文件夾拖入自己的主App中沾凄。
2梗醇、SampleHandler中使用時(shí),需要關(guān)聯(lián)主App加載的代碼撒蟀,方法如下:


SampleHandler調(diào)用App中的類方法

如果您有好的方法請(qǐng)不要吝惜叙谨,留言告訴我吧~

\color{red}{Tips:}關(guān)于調(diào)起方法\color{red}{UIControlEventTouchUpInside }遇到的問(wèn)題:我遇到的iOS12.4.4使用此方法是調(diào)用不起來(lái)的,又嘗試了UIControlEventTouchDown可以成功保屯,可是方法分界的版本號(hào)就成了問(wèn)題手负、又跟杭研融合通信iOS哥哥溝通了一下、推薦使用\color{red}{UIControlEventAllTouchEvents}調(diào)起

關(guān)于數(shù)據(jù)同步的補(bǔ)充:

進(jìn)程間數(shù)據(jù)同步:CFNotificationCenter與App Groups 結(jié)合

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末姑尺,一起剝皮案震驚了整個(gè)濱河市竟终,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌切蟋,老刑警劉巖统捶,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡喘鸟,警方通過(guò)查閱死者的電腦和手機(jī)匆绣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)什黑,“玉大人崎淳,你說(shuō)我怎么就攤上這事°蛋眩” “怎么了拣凹?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)礼华。 經(jīng)常有香客問(wèn)我咐鹤,道長(zhǎng),這世上最難降的妖魔是什么圣絮? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任祈惶,我火速辦了婚禮,結(jié)果婚禮上扮匠,老公的妹妹穿的比我還像新娘捧请。我一直安慰自己,他們只是感情好棒搜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布疹蛉。 她就那樣靜靜地躺著,像睡著了一般力麸。 火紅的嫁衣襯著肌膚如雪可款。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天克蚂,我揣著相機(jī)與錄音闺鲸,去河邊找鬼。 笑死埃叭,一個(gè)胖子當(dāng)著我的面吹牛摸恍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赤屋,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼立镶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了类早?” 一聲冷哼從身側(cè)響起媚媒,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎莺奔,沒(méi)想到半個(gè)月后欣范,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體变泄,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡令哟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年恼琼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了论寨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片集币。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖种呐,靈堂內(nèi)的尸體忽然破棺而出狠半,到底是詐尸還是另有隱情噩死,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布神年,位于F島的核電站已维,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏已日。R本人自食惡果不足惜垛耳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望飘千。 院中可真熱鬧堂鲜,春花似錦、人聲如沸护奈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)霉旗。三九已至痴奏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厌秒,已是汗流浹背读拆。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留简僧,地道東北人建椰。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像岛马,于是被迫代替她去往敵國(guó)和親棉姐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344