一個(gè)詭異的視頻導(dǎo)出bug

昨天qim遇到一個(gè)非常詭異的bug。
步驟:
1 橫屏拍攝一段視頻后,添加濾鏡馬賽克,發(fā)表,然后把發(fā)表的視頻保存到本地。
2 啟動拍攝,選擇上一步保存的視頻,發(fā)表。

問題:
1 發(fā)表成功后,本地緩存的視頻被拉伸放大。
2 其他客戶端看到的這個(gè)視頻,下半部黑屏,顯然是橫的視頻沒有被翻轉(zhuǎn)90度。
3 本地清緩存,重新下載的視頻,下半部黑屏,跟其他客戶端看到的一致。

報(bào)過來這個(gè)bug的時(shí)候,我第一反應(yīng)是不是視頻導(dǎo)出的代碼有問題,因?yàn)榍岸螘r(shí)間也遇到過類似的問題。自從產(chǎn)品上了本地視頻可編輯這個(gè)功能后,就像開啟了潘多拉魔盒,各種奇怪的bug不斷。因?yàn)楸镜匾曨l可能來自不同的設(shè)備,可能被各種編輯軟件編輯過,其比例,參數(shù),格式等等千差萬別,而日跡只支持豎屏,這意味著很多的視頻在發(fā)表的時(shí)候都需要處理一次,把橫的豎過來,并且統(tǒng)一尺寸。

本地嘗試重現(xiàn):
模擬器無法重現(xiàn)。
真機(jī)調(diào)試,可以重現(xiàn)。

這就非常蛋疼了。

再仔細(xì)分析現(xiàn)象,發(fā)現(xiàn)問題沒這么簡單:
1 發(fā)布端第一次看到的視頻僅僅被拉伸,清緩存后的視頻卻是下半部分黑屏

比較.jpg

2 同一個(gè)視頻,用模擬器發(fā)沒問題,真機(jī)有問題
3 其他的橫屏視頻沒問題

首先第一個(gè)問題,我懷疑是不是本地預(yù)覽視頻跟最后上傳服務(wù)器的視頻不是同一個(gè),因?yàn)椤翱?的和“傳”的不是同一個(gè)。于是視頻抓出來看看,裝了itools,搗鼓搗鼓了半天,終于把視頻抓出來了。但是問題更加詭異了。

視頻處理后生成的本地文件:

compare.jpg

上圖可以看到,用系統(tǒng)默認(rèn)播放器播放,視頻被拉伸。用其他播放器mpv,mplayerx等,可以正常觀看。

清緩存,從服務(wù)器把剛上傳的文件拉下來:

屏幕快照 2017-09-08 09.46.35.jpg

上圖看到,下載后的視頻,兩種播放器都是下半部分黑屏。

第一個(gè)現(xiàn)象,我懷疑是導(dǎo)出視頻時(shí),視頻信息被寫亂了?;蛘邔?dǎo)出的視頻和上傳視頻不是同一個(gè)
第二個(gè)現(xiàn)象,無法解釋,難道視頻在上傳時(shí)(復(fù)制時(shí)),視頻信息被修改了??

第一個(gè)問題確認(rèn),導(dǎo)出的視頻在上傳前需要經(jīng)過壓縮處理,所以這一步,拉伸的視頻被裁剪了?
第二個(gè)問題,視頻尺寸在壓縮時(shí)會被修改,從320x569 變成 640x960。

問題原因找到了,但是解決方案呢? 沒有,讓我們再總結(jié)一下這個(gè)bug詭異的地方:
1 模擬器沒問題,真機(jī)有問題。 (排除了ios版本問題)
2 本地導(dǎo)出的視頻,quicktime播放有問題,其他播放器播放沒問題。
3 視頻壓縮后被裁剪,其他同樣尺寸的視頻卻無此問題。

模擬器沒問題,真機(jī)有問題,為毛? 難道蘋果的模擬器有問題
其他播放器看視頻沒問題,就系統(tǒng)播放器有問題? 難道系統(tǒng)的默認(rèn)播放參數(shù)與其他播放器不一樣 ?

專門看了一下系統(tǒng)播放器是否有什么參數(shù)可調(diào),又變現(xiàn)一個(gè)奇怪的現(xiàn)象:

屏幕快照 2017-09-11 09.02.33.png

有問題的視頻,其”實(shí)際大小“的選項(xiàng)是灰色的

屏幕快照 2017-09-11 09.03.02.png

一般的視頻,其”實(shí)際大小”是可以點(diǎn)擊的。

不過也不是必然,有些正常播放的視頻,其”實(shí)際大小“也是disable。

我又比較了一下,正常與不正常的視頻的參數(shù),發(fā)現(xiàn)一個(gè)問題:

正常視頻

橫視頻,正常.png

被拉伸視頻

被放大的視頻.png

其clean Aperture width 與實(shí)際大小不相符,問題應(yīng)該處在這里

壓縮后的視頻

發(fā)表后視頻.png

壓縮后的視頻其clean Aperture width和width又是一致的

猜測這里的問題是,導(dǎo)出的視頻clean Aperture width與實(shí)際width不一致,所以在系統(tǒng)播放器里,視頻被拉伸了320->568,其他播放器忽略或者糾正了這個(gè)問題,所以能正常播放。

然后,系統(tǒng)繼續(xù)使用錯(cuò)誤參數(shù),在視頻壓縮的時(shí)候,被拉伸的視頻被裁剪了。

屏幕快照 2017-09-11 09.32.09.png

所以問題出在導(dǎo)出視頻的時(shí)候,參數(shù)錯(cuò)了。
上面的推論可以解釋現(xiàn)象,但無法解釋為什么模擬器是正常的。但問題肯定出在導(dǎo)出這一步,所以我調(diào)整參數(shù)看看正導(dǎo)出過程到底發(fā)生了什么。

屏幕快照 2017-09-11 10.14.41.png

這個(gè)過程看起來都沒問題,但是發(fā)現(xiàn)一旦把最后的平移設(shè)置為視頻的寬度時(shí)(320),導(dǎo)出的視頻就會拉伸,最后經(jīng)過測試,取了一個(gè)最接近值319.999999。算暫時(shí)解決了這個(gè)問題。

最后總結(jié)一下這個(gè)問題的原因:
1 導(dǎo)出視頻時(shí),視頻的長寬參數(shù)有問題,系統(tǒng)播放視頻時(shí)拉伸了視頻。
2 視頻壓縮時(shí),按照錯(cuò)誤的長寬進(jìn)行了裁剪。
3 模擬器沒問題,真機(jī)有問題。

最后通過修改精度解決此問題,這是否是因?yàn)槟M器的計(jì)算精度比真機(jī)的計(jì)算高度要高,所以能正確導(dǎo)出這個(gè)視頻 ?待有時(shí)間繼續(xù)研究。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,781評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 一節(jié)晚自修 她從水房接水回來,莫名覺得教室里氣氛與先前有些不同。像是受到不自覺的吸引,她的目光找到了原因。斜前方新...
    靜心即可閱讀 365評論 4 3
  • 石麥心里害怕極了,雖然他曾不止一次的看過武俠小說中的人物手握長劍與人對峙的情節(jié)。但萬萬沒想到今天成真了...
    石三三閱讀 532評論 0 2
  • 列王記下第5章 本章記載亞蘭王的元帥乃縵得了大麻風(fēng),尋求神人(以利沙)醫(yī)治,結(jié)果大麻風(fēng)被醫(yī)治好,乃縵回來答謝神人,...
    梁耀平閱讀 2,849評論 2 1

友情鏈接更多精彩內(nèi)容