HTML 5 播放streaming video造成卡住的問題

這個bug,是google自帶的問題。 和見到的諸多android的疑難問題一樣,這又是一個可以歸類爲 多線程同步/狀態機 問題。


問題處在NuPlayer的異步消息的handle中,現象和原因不細說了,被此BUG糾結的頭大的,應該一看就明白。
 
重現步驟:反覆進入、退出html5的流媒體播放 (瀏覽器的UA設成Ipad模式,去如youku網、百度視頻中去播視頻),會出現卡死情況
 
卡住的原因,就是剛播放開始的初始化過程中,按了返回鍵,要返回,NUPlayerDriver 會執行reset操作,並且向NUPlayer 發送reset 消息,收到此消息NUPlayer就向Acodec 發送kwhatflush 消息。由於component當時處於LoadedToIdleState狀態,  還沒有運行起來,實質上不需要flush decoder,但是ACodec 必須要向NUPlayer回饋kwhatflushcomplete消息,以上整個流程能夠順利走完,否則上層模塊在等待flush的迴應,會一直等待下去。
 

解決方法:在ACodec中的baseState中,也加入一個case,向上回個消息就好了(問題很嚴重,但知道原因後,解決方法都很簡單,呵呵,想起那德國工程師劃線的故事了沒?)

		case kWhatFlush:
		{
			sp<AMessage> notify = mCodec->mNotify->dup();
            		notify->setInt32("what", ACodec::kWhatFlushCompleted);
            		notify->post();
            		break;
		}

這個BUG,那天某知名公司的展臺上,也看到了,不過他們給的回覆是因爲我把UA設成IPAD模式造成的,改成android後,會走flash的解碼過程,就不會有問題了。呵呵,這是在搗漿糊啊,做產品不能這樣唉~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章