1. 程式人生 > >百度CarLife Android車機端黑屏問題

百度CarLife Android車機端黑屏問題

  1. 問題描述

手機端與車機端通過carlife連線後,車機端畫面與手機同步,在carlife軟體內點選退出後,在車機端再次點選APP,車機端黑屏,不能同步手機端畫面。

2.分析

在車機端點選退出時,呼叫了銷燬Activity的方法:

getActivity().finish();

只有carLife的後臺服務還沒銷燬,當再次啟動的時候這個Activity再次啟動,新建surfaceView,兩次日誌比較如下圖:


基本上沒什麼區別,但是第一次進有介面同步,第二次卻是黑屏。

後面發現與視訊頭幀sps和pps有關。

在ShowFragment裡獲取了視訊的頭幀sps和pps,在介面內退出時,銷燬了介面,也刪除了頭幀資訊,後面雖然有資料繼續傳輸到車機端,但是缺少了sps和pps就解不了碼,因此黑屏。

那為什麼手機USB線斷開後,再次連線就連得上呢?

因為手機USB斷開之後,車機端將重新開啟ADB,並反初始化各引數,而手機端則停止了視訊傳輸,當再一次連線時,會重發頭幀sps和pps,自然可以解碼成功。

3.解決

因為希望carlife介面內退出,carlife後臺服務繼續,所以不能像手機斷開USB後那樣處理,所以解決辦法是記下sps和pps資料,但是不能在Activity中記,因為退出時會被銷燬,這裡在AppManager這個管理Activity的類裡記,然後在顯示的ShowFragment裡需要視訊頭幀的時候取出,車機視訊就不在黑屏。