iOS防截屏方案(基于DRM)

背景

在iOS開(kāi)發(fā)的一些業(yè)務(wù)場(chǎng)景中,可能有一些敏感信息(如付款的二維碼等)冯键,我們不希望被隨意傳播惹盼。應(yīng)用內(nèi)禁止截屏,可以一定程度上惫确,提高敏感信息被傳播的門檻(可能需要另外一臺(tái)手機(jī)拍照手报,并手機(jī)間傳輸)。

然而改化,由于iOS系統(tǒng)的特殊性掩蛤,常規(guī)方法無(wú)法完全禁止用戶截屏落地成系統(tǒng)圖片。目前陈肛,網(wǎng)上的解決方案揍鸟,主要有兩種:

監(jiān)聽(tīng)截屏后通知(UIApplicationUserDidTakeScreenshotNotification),并進(jìn)行提示句旱。

讓用戶安裝禁用屏幕快照和屏幕錄制的配置文件阳藻。

前者無(wú)法禁止截屏內(nèi)容落地,后者閹割了手機(jī)功能前翎,導(dǎo)致其他應(yīng)用也無(wú)法截屏稚配。二者均不能滿足需求。

其他刪除本地相冊(cè)的方案在新系統(tǒng)上不能滿足需求港华。

本文在研究了參考資料給出的一些建議,使用DRM最終實(shí)現(xiàn)了對(duì)控件的防止截屏功能午衰。

該方案有以下特點(diǎn):

可以做到真正意義防止敏感內(nèi)容落地立宜。

沒(méi)有用到私有api冒萄,是蘋果原生支持的。

支持主流系統(tǒng)版本橙数。

注: 本文方案只能對(duì)敏感控件進(jìn)行防截屏處理尊流,無(wú)法做到全局任何位置防截屏(全部控件加drm,代價(jià)太大)灯帮。

使用DRM實(shí)現(xiàn)防止截屏

演示demo: https://github.com/ohswift/VTAntiScreenCapture

蘋果系統(tǒng)是支持DRM(Digital Rights Management崖技,數(shù)字版權(quán)管理)的。它表現(xiàn)在钟哥,當(dāng)你播放一個(gè)加密了的hls流時(shí)迎献,你進(jìn)行截屏(用手機(jī)截屏或用Xcode截屏),該視頻控件會(huì)顯示空白腻贰。

所以吁恍,我們的思路就很清晰了。我們可以把一個(gè)敏感信息的控件播演,轉(zhuǎn)化為帶DRM加密的視頻冀瓦,然后播放。此后写烤,系統(tǒng)進(jìn)行截屏?xí)r翼闽,該控件就會(huì)消失,達(dá)到防止敏感內(nèi)容落地的目的洲炊。

你可以在敏感信息控件后放個(gè)背景感局,用來(lái)在截屏?xí)r敏感控件消失后,做更友好的提示选浑。

如demo所示蓝厌。

演示工程的效果如下:



如demo所示,截屏截不到真實(shí)的內(nèi)容古徒,敏感信息會(huì)被過(guò)濾拓提。

我們的整個(gè)流程差不多如下:

根據(jù)控件內(nèi)容生成mp4文件

啟動(dòng)webserver

本地播放帶DRM加密的hls流

其中1不是重點(diǎn),我們將放后面講隧膘。我們先驗(yàn)證DRM是否真的可以做到防止截屏代态。假設(shè),我們已經(jīng)把一個(gè)文本內(nèi)容轉(zhuǎn)換為mp4了(demo工程中的text.mp4)疹吃。那么蹦疑,我們首先讓這個(gè)視頻可以播放起來(lái)。

啟動(dòng)webserver

我們需要把該mp4拷貝到一個(gè)目錄后萨驶,啟動(dòng)webServer歉摧,如demo中,我們把它拷到tmp目錄下(演示用,實(shí)際可以做到mp4數(shù)據(jù)也不落地)叁温。

[_webServer addGETHandlerForBasePath:@"/" directoryPath:dir indexFilename:nil cacheAge:3600 allowRangeRequests:YES];

[_webServer startWithPort:8989 bonjourName:nil];

播放帶hls加密的流

如果你按上面播放再悼,發(fā)現(xiàn)只是單純的展示內(nèi)容,并沒(méi)有防截屏的效果膝但。我們需要加密播放流冲九。

你可能需要一些AVPlayer播放視頻的基礎(chǔ),可以參考[iOS]仿微博視頻邊下邊播之封裝播放器和Playing Offline HLS with AES-128 encryption iOS跟束。

當(dāng)你理解了AVAssetResourceLoaderDelegate了后莺奸,就可以開(kāi)始了。我們讓播放器去播放一個(gè)私有協(xié)議的m3u8文件冀宴。

[self.player playURL:@"jedi://text.m3u8" inView:self.labelContainer];

而當(dāng)它無(wú)法解析時(shí)灭贷,就需要走AVAssetResourceLoaderDelegate,我們?cè)谄渲谢ǘ欤祷貙懰赖膖ext.m3u8數(shù)據(jù)氧腰。

#EXTM3U

#EXT-X-PLAYLIST-TYPE:VOD

#EXT-X-VERSION:5

#EXT-X-TARGETDURATION:1

#EXT-X-KEY:METHOD=SAMPLE-AES,URI="jedi://text.key"

#EXTINF:0.067,

http://localhost:8989/text.mp4

#EXT-X-ENDLIST

m3u8中寫入了mp4的url地址,同時(shí)刨肃,也通過(guò)EXT-X-KEY來(lái)描述當(dāng)前的加密key古拴,說(shuō)明當(dāng)前的流是經(jīng)過(guò)加密的。

同樣真友,這里的key的獲取也是用的私有協(xié)議黄痪,同樣需要走AVAssetResourceLoaderDelegate。所以盔然,最終AVAssetResourceLoaderDelegate中的方法看起來(lái)如下:

這里桅打,我們返回的key是16字節(jié)純0的數(shù)據(jù),其實(shí)mp4文件并沒(méi)有加密愈案,只是讓系統(tǒng)以為加密了挺尾,好在截屏?xí)r進(jìn)行保護(hù)。

如果你看到此站绪,應(yīng)該已經(jīng)基本掌握了防止截屏的大致流程了遭铺。如果效果無(wú)法達(dá)到的話,可以隨時(shí)參照demo中的示例恢准。

編碼生成mp4

這里用AVAssetWriter和CVPixelBuffer即可生成mp4魂挂。這里參考了https://github.com/caferrara/img-to-video.git的代碼。

VTMP4Encoder中包含根據(jù)view生成mp4的邏輯馁筐,這里不展開(kāi)涂召,感興趣的可以查看代碼。

注:要注意敏沉,AVAssetWriter要設(shè)置shouldOptimizeForNetworkUse = YES果正,

讓它支持faststart,否則在m3u8中播放不了炎码。

生成的mp4可以在demo中試用,或在mac端啟nginx配置m3u8測(cè)試舱卡。

Prevent screen capture in an iOS app

Playing Offline HLS with AES-128 encryption iOS

[iOS]仿微博視頻邊下邊播之封裝播放器辅肾。

img-to-video

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末队萤,一起剝皮案震驚了整個(gè)濱河市轮锥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌要尔,老刑警劉巖舍杜,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異赵辕,居然都是意外死亡既绩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門还惠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)饲握,“玉大人,你說(shuō)我怎么就攤上這事蚕键【扰罚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵锣光,是天一觀的道長(zhǎng)笆怠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)誊爹,這世上最難降的妖魔是什么蹬刷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮频丘,結(jié)果婚禮上办成,老公的妹妹穿的比我還像新娘。我一直安慰自己搂漠,他們只是感情好迂卢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著状答,像睡著了一般冷守。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惊科,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天拍摇,我揣著相機(jī)與錄音,去河邊找鬼馆截。 笑死充活,一個(gè)胖子當(dāng)著我的面吹牛蜂莉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播混卵,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼映穗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了幕随?” 一聲冷哼從身側(cè)響起蚁滋,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赘淮,沒(méi)想到半個(gè)月后辕录,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梢卸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年走诞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛤高。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚣旱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出戴陡,到底是詐尸還是另有隱情塞绿,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布猜欺,位于F島的核電站位隶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏开皿。R本人自食惡果不足惜涧黄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赋荆。 院中可真熱鬧笋妥,春花似錦、人聲如沸窄潭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嫉你。三九已至月帝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幽污,已是汗流浹背嚷辅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留距误,地道東北人簸搞。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓扁位,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親趁俊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子域仇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 背景 在iOS開(kāi)發(fā)的一些業(yè)務(wù)場(chǎng)景中,可能有一些敏感信息(如付款的二維碼等)寺擂,我們不希望被隨意傳播暇务。應(yīng)用內(nèi)禁止截屏,...
    俞子將閱讀 36,148評(píng)論 19 84
  • 背景 在iOS開(kāi)發(fā)的一些業(yè)務(wù)場(chǎng)景中沽讹,可能有一些敏感信息(如付款的二維碼等)般卑,我們不希望被隨意傳播。應(yīng)用內(nèi)禁止截屏爽雄,...
    iOS_林亦辰閱讀 2,243評(píng)論 3 2
  • 直播云解決方案整理 [TOC] 1.又拍云直播 又拍直播云(UPLive),基于又拍云內(nèi)容分發(fā)網(wǎng)絡(luò)為直播應(yīng)用提供超...
    MaxWellPro閱讀 7,831評(píng)論 0 21
  • 手游直播是直播行業(yè)中非常重要的一個(gè)垂直領(lǐng)域. 手游直播與其他移動(dòng)直播相比主要是畫(huà)面的來(lái)源不同, 手游直播其實(shí)是一種...
    金山視頻云閱讀 12,542評(píng)論 13 18
  • 為了方便以后查詢沐鼠,收藏呼神的博客 前言 保護(hù)好第三方的版權(quán)是視頻類公司要考慮的問(wèn)題挚瘟。如何防止用戶通過(guò)錄屏手段取得受...
    阿姣_0405閱讀 3,673評(píng)論 0 0