iPhone12:視頻有聲音、畫面藍(lán)屏的問題分析解決

一两入、問題描述

線上工單:用戶反饋净宵,系統(tǒng)相冊(cè)的視頻 導(dǎo)入發(fā)布 視頻出現(xiàn)藍(lán)屏的問題,視頻有聲音裹纳,但畫面藍(lán)屏择葡。


1212.png

反復(fù)協(xié)調(diào)溝通之后,分析問題復(fù)現(xiàn)場(chǎng)景是:
1剃氧、iPhone12用相機(jī)拍攝視頻(方向LandscapeRight敏储,其他方向不會(huì)有問題),并且iPhone12上App發(fā)布才會(huì)藍(lán)屏朋鞍。
2已添、原視頻放到非iPhone12手機(jī),App版本號(hào)一樣滥酥,也不會(huì)由此問題更舞。

有了問題復(fù)現(xiàn)場(chǎng)景,那就找設(shè)備了坎吻±虏酰可惜公司測(cè)試設(shè)備沒有,最后溝通其他部分禾怠,發(fā)現(xiàn)有把iPhone12手機(jī)。設(shè)備有了贝搁,那就分析開搞了吗氏。

二、分析雷逆、定位

2.1弦讽、實(shí)現(xiàn)代碼邏輯

  • 1、使用AVAssetExportSession導(dǎo)出MP4視頻格式膀哲。
  • 2往产、獲取視頻的方向,需要對(duì)不同方向做些修正某宪。
  • 3仿村、針對(duì)Portrait 90LandscapeLeft 180兴喂、PortraitUpsideDown 270角度(分別對(duì)應(yīng)不同的角度拍攝的適配)的視頻蔼囊,重新設(shè)置AVAssetExportSession.videoComposition(AVVideoComposition)屬性焚志,核心就是利用CGAffineTransformRotate做transform的變換角度。
  • 4畏鼓、調(diào)用exportAsynchronouslyWithCompletionHandler:轉(zhuǎn)化輸出酱酬。

2.2、嘗試解決

代碼跟蹤云矫,exportAsynchronouslyWithCompletionHandler:的回調(diào)里膳沽,AVAssetExportSessionStatus status = [exportSession status];,并沒有返回失敗让禀,返回AVAssetExportSessionStatusCompleted也就是轉(zhuǎn)成功挑社。

問題出現(xiàn)在哪里?

把同一個(gè)「異常視頻」在iPhone12 和 非iPhone12 發(fā)布的視頻堆缘,對(duì)比發(fā)現(xiàn)滔灶。iPhone12發(fā)布的視頻bitrate偏小,這應(yīng)該是導(dǎo)致問題原因吼肥。


1313.png
分析問題的解決方案:
  • 解決辦法1:
    嘗試使用項(xiàng)目其他地方录平,使用開源庫(kù)SDAVAssetExportSession,其允許指定birtate的壓縮轉(zhuǎn)碼缀皱。
    結(jié)果是正常的斗这,第三方庫(kù)能正確轉(zhuǎn)碼,不會(huì)導(dǎo)致藍(lán)屏問題啤斗。

  • 解決辦法2:
    突然替換為第三方庫(kù)表箭,不是一種明智的選擇,看發(fā)版還有些時(shí)間钮莲,那就在折騰折騰了免钻。

    查閱相關(guān)資料中,AVAssetExportSession并不能直接設(shè)置bitrate屬性崔拥,對(duì)比了AVAssetExportSession屬性极舔,也沒有發(fā)現(xiàn)啥有用的線索×赐撸看代碼拆魏,在初始化AVAssetExportSession的時(shí)候,AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetMediumQuality];慈俯,使用中等分辨率AVAssetExportPresetMediumQuality渤刃,嘗試AVAssetExportPresetHighestQuality發(fā)現(xiàn)頁(yè)不行。

    突然記起贴膘,之前也有藍(lán)屏的問題卖子,那時(shí)候是因?yàn)樾D(zhuǎn)角度的問題,然道也是同樣的問題嗎刑峡?看代碼揪胃,并沒有針對(duì)LandscapeRight做旋轉(zhuǎn)璃哟。
    那么會(huì)不會(huì)iPhone12手機(jī)真的視頻方向判斷有差異呢?
    嘗試想其他角度旋轉(zhuǎn)處理一樣喊递,重新設(shè)置AVAssetExportSession.videoComposition(AVVideoComposition)屬性随闪,變換角度CGAffineTransformIdentity 也就是不做變換。
    奇跡出現(xiàn)骚勘,可以了n戆椤!俏讹!
    基本上可以確定当宴,是因?yàn)樾D(zhuǎn)角度的問題,可以為什么會(huì)有差異呢泽疆?查了國(guó)內(nèi)外相關(guān)技術(shù)網(wǎng)站户矢,沒發(fā)現(xiàn)有用的線索。

    今天就要發(fā)版了殉疼,只能寫入筆記梯浪,后續(xù)跟蹤了。

2.3瓢娜、最終解決方案

由于只有在iPhone12手機(jī)上App發(fā)布挂洛,并且「系統(tǒng)相機(jī)」拍攝的 「方向?yàn)長(zhǎng)andscapeRight的視頻」才會(huì)有問題,其他正常眠砾,為了規(guī)避風(fēng)險(xiǎn)虏劲,只針對(duì)iPhone12手機(jī),并且「方向?yàn)長(zhǎng)andscapeRight的視頻」特殊處理褒颈。

  • iPhone12真機(jī)判斷
NSString *model = [[UIDevice currentDevice] machineModel];
NSArray *iPhone12_id_list = @[@"iPhone13,1", @"iPhone13,2", @"iPhone13,3", @"iPhone13,4"];
BOOL szy_is_iPhone12 = iPhone12_id_list ? [iPhone12_id_list containsObject:model] : NO;
  • 視頻方向的判斷
- (int)degressFromVideoFileWithAsset:(AVAsset *)asset {
    int degress = 0;
    NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeVideo];
    if([tracks count] > 0) {
        AVAssetTrack *videoTrack = [tracks objectAtIndex:0];
        CGAffineTransform t = videoTrack.preferredTransform;
        if(t.a == 0 && t.b == 1.0 && t.c == -1.0 && t.d == 0){
            // Portrait
            degress = 90;
        } else if(t.a == 0 && t.b == -1.0 && t.c == 1.0 && t.d == 0){
            // PortraitUpsideDown
            degress = 270;
        } else if(t.a == 1.0 && t.b == 0 && t.c == 0 && t.d == 1.0){
            // LandscapeRight
            degress = 0;
        } else if(t.a == -1.0 && t.b == 0 && t.c == 0 && t.d == -1.0){
            // LandscapeLeft
            degress = 180;
        }
    }
    return degress;
}

三柒巫、寫在最后
工單的排查,往往困難重重谷丸,需要客戶空間堡掏、時(shí)間上與客戶差異溝通問題。線索的收集更是不容易淤井。溝通中也會(huì)有很多障礙布疼。

這一一切困難摊趾,還是本著職業(yè)精神币狠、客戶至上精神,克服吧砾层。及時(shí)問題解決不了漩绵,你也可以從中學(xué)到很多。

針對(duì)視頻相關(guān)類AVAssetExportSession肛炮、AVAsset止吐、AVAssetTrack宝踪、AVVideoCompositionAVMutableVideoCompositionInstruction等與編碼有關(guān)的碍扔,后續(xù)還是要好好總結(jié)瘩燥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市不同,隨后出現(xiàn)的幾起案子厉膀,更是在濱河造成了極大的恐慌,老刑警劉巖二拐,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件服鹅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡百新,警方通過查閱死者的電腦和手機(jī)企软,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)饭望,“玉大人仗哨,你說(shuō)我怎么就攤上這事〗芗耍” “怎么了藻治?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)巷挥。 經(jīng)常有香客問我桩卵,道長(zhǎng),這世上最難降的妖魔是什么倍宾? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任雏节,我火速辦了婚禮,結(jié)果婚禮上高职,老公的妹妹穿的比我還像新娘钩乍。我一直安慰自己,他們只是感情好怔锌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布寥粹。 她就那樣靜靜地躺著,像睡著了一般埃元。 火紅的嫁衣襯著肌膚如雪涝涤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天岛杀,我揣著相機(jī)與錄音阔拳,去河邊找鬼。 笑死类嗤,一個(gè)胖子當(dāng)著我的面吹牛糊肠,可吹牛的內(nèi)容都是我干的辨宠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼货裹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嗤形!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起弧圆,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤派殷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后墓阀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毡惜,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年斯撮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了经伙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡勿锅,死狀恐怖帕膜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情溢十,我是刑警寧澤垮刹,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站张弛,受9級(jí)特大地震影響荒典,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吞鸭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一寺董、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刻剥,春花似錦遮咖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至漓藕,卻和暖如春陶珠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撵术。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工背率, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留话瞧,地道東北人嫩与。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓寝姿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親划滋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子饵筑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355