播放器直播時(shí)移節(jié)目單計(jì)算規(guī)則

哪個(gè)小可愛(ài)在偷偷的看我~~


偷瞄.gif

前言

以下只提供思路漏隐,其他方向也可適用铃将,我們?cè)诓シ牌鏖_(kāi)發(fā)中碧查,也許我們會(huì)遇到全屏直播時(shí)間移動(dòng)顯示功能,這時(shí)候就會(huì)遇到怎么樣能夠美觀顯示各個(gè)節(jié)目單長(zhǎng)度問(wèn)題邑遏,接下來(lái)講解一下如何計(jì)算,效果圖如下


直播.gif

說(shuō)明

比如cctv1頻道電視直播恰矩,它有已經(jīng)播放完的節(jié)目记盒,正在播放的,以后要播放的外傅,每個(gè)節(jié)目時(shí)間長(zhǎng)度不一樣纪吮,重點(diǎn)來(lái)了(每個(gè)節(jié)目單時(shí)間長(zhǎng)度不一樣,有的時(shí)間可能特別長(zhǎng)萎胰,有的時(shí)間很短)這時(shí)候我們需要把節(jié)目展示到手機(jī)上碾盟,一個(gè)橫向的列表,如果等比例根據(jù)時(shí)間長(zhǎng)度顯示進(jìn)度奥洼,這樣可能發(fā)生的情況是巷疼,一個(gè)屏幕全部展示一個(gè)節(jié)目,這樣就體驗(yàn)很差了,最好的方式是屏幕內(nèi)最多只能展示4個(gè)節(jié)目單嚼沿,長(zhǎng)的多展示點(diǎn)估盘,短的少展示點(diǎn),差距不大的展示出來(lái)骡尽,如何實(shí)現(xiàn)遣妥,往下看

開(kāi)始一步一步實(shí)現(xiàn)

當(dāng)前已知條件

1、節(jié)目單集合 list
2攀细、我們當(dāng)前已知條件箫踩,每個(gè)節(jié)目單的播放時(shí)長(zhǎng)playTimeLength
3、屏幕長(zhǎng)度大小screenWidth

計(jì)算規(guī)則

我們?cè)O(shè)定屏幕最多展示4(這個(gè)數(shù)字根據(jù)自己的想法進(jìn)行改變)個(gè)節(jié)目單谭贪,只能<=,可以得出境钟,每個(gè)item的寬度最大為screenWidth * 1/4
即:itemWidth=screenWidth * 1/4
那有些節(jié)目時(shí)間長(zhǎng),有些節(jié)目時(shí)間短俭识,這時(shí)候我們可以想到慨削,在基礎(chǔ)的屏幕1/4下進(jìn)行追加長(zhǎng)度 x
即:itemWidth=screenWidth * 1/4 + x
所以需要求出x的值


接下來(lái)是剖析x的計(jì)算規(guī)則

因?yàn)楣?jié)目單時(shí)間長(zhǎng)短不一,我們可以假設(shè)成套媚,最短的比例可以想象為x=0缚态,長(zhǎng)的遞增,這樣計(jì)算看是否成立
因?yàn)樯婕暗阶疃痰暮妥铋L(zhǎng)的堤瘤,所以需要最短的值和最長(zhǎng)的值

即:找出節(jié)目單集合中 最長(zhǎng)的時(shí)長(zhǎng):maxTimeLength 最短的時(shí)長(zhǎng):minTimeLength

因?yàn)閤為額外增加的值玫芦,所以需要一個(gè)比例來(lái)計(jì)算會(huì)更好,當(dāng)前有了最短時(shí)長(zhǎng)和最長(zhǎng)時(shí)間本辐,我們可以比較一下桥帆,當(dāng)前item的時(shí)長(zhǎng)playTimeLength-minTimeLengthmaxTimeLength-minTimeLength的比例是多少呢?

即:設(shè)定最短時(shí)長(zhǎng)和最長(zhǎng)時(shí)長(zhǎng)差值為 a=maxTimeLength-minTimeLength
設(shè)定當(dāng)前item的時(shí)長(zhǎng)和最短時(shí)長(zhǎng)差值為b=playTimeLength-minTimeLength
當(dāng)前item所占比例為c=b/a

比例得出了师郑,那根據(jù)這個(gè)比例可以額外調(diào)整一下 x的大小
即:x=c*z

z的值其實(shí)可以隨便給值了环葵,我們可以看下界面效果給值,根據(jù)屏幕的大小找一個(gè)比例給會(huì)比較合適
即:z=screenWidth*5/12 (屏幕的5/12可以調(diào)整)


當(dāng)然宝冕,有些值都是可以根據(jù)實(shí)際情況動(dòng)態(tài)調(diào)整的张遭,如界面最多展示4份, 屏幕的5/12 地梨,根據(jù)實(shí)際情況進(jìn)行調(diào)整

總結(jié)

itemWidth = screenWidth * 1/4 + (playTimeLength-minTimeLength/maxTimeLength-minTimeLength) * screenWidth*5/12

進(jìn)度條整體長(zhǎng)度 = itemWidth1 + itemWidth2 + itemWidth3 + itemWidth4 + ...

如下圖所示


itemWidth.jpg





交互篇

介紹

界面目前包含時(shí)移的名稱菊卷,播放某個(gè)會(huì)自動(dòng)高亮,有進(jìn)度條宝剖,需要自動(dòng)對(duì)應(yīng)到對(duì)應(yīng)點(diǎn)

頁(yè)面交互有以下幾點(diǎn)

1洁闰、點(diǎn)擊時(shí)移名稱
------ ① 點(diǎn)擊時(shí)移節(jié)目
------ ② 點(diǎn)擊直播節(jié)目
2、滑動(dòng)進(jìn)度條
------ ① 滑動(dòng)時(shí)移節(jié)目
------ ② 滑動(dòng)到直播對(duì)應(yīng)點(diǎn)
3万细、自動(dòng)更新
------ ① 自動(dòng)更新時(shí)移節(jié)目
------ ② 自動(dòng)更新直播節(jié)目

前提條件扑眉,后續(xù)計(jì)算會(huì)更方便

1、已知每個(gè)itemBeanstartTime,這個(gè)接口中已經(jīng)獲取

2腰素、我們可以在之前步驟提前給每個(gè)itemBean存一個(gè)startWidth聘裁,即開(kāi)始的這個(gè)點(diǎn)之前的itemWidth總和,和startTime一樣弓千,在后續(xù)的使用中直接取值即可衡便,即
startWidth2 = itemWidth1
startWidth3 = itemWidth1 + itemWidth2
startWidth100 = itemWidth1 + ...+ itemWidth99
...

3、獲取當(dāng)前直播的 itemBean
當(dāng)前直播 itemBean = startTime < currentTime < endTime
注:currentTime 為當(dāng)前時(shí)間

4洋访、已知每個(gè)itemBeanplayLength镣陕,這個(gè)接口中已經(jīng)獲取

5、當(dāng)前直播總長(zhǎng)度liveLength姻政,進(jìn)度條滑動(dòng)不能超過(guò)此點(diǎn)
liveMaxLength = currentTime ?? ( itemWidth ÷ playLength )

分步驟講解以下幾點(diǎn)呆抑,一點(diǎn)時(shí)移名稱
一、點(diǎn)時(shí)移名稱
① 點(diǎn)擊時(shí)移節(jié)目

目前已知每個(gè) itemBeanstartWidth
進(jìn)度條進(jìn)度 = startWidth

② 點(diǎn)擊直播節(jié)目

目前已知直播的 itemBean
點(diǎn)擊直播節(jié)目需要將進(jìn)度推到當(dāng)前直播的進(jìn)度
但是目前currentTime的距離還未知汁展,需要推算出比例理肺,再計(jì)算出進(jìn)度

進(jìn)度條進(jìn)度 = 當(dāng)前 (itemBeanplayWidth ÷ 當(dāng)前 itemBeanplayLength) ?? (currentTime - itemBeanstartTime)

二、滑動(dòng)進(jìn)度條
① 滑動(dòng)時(shí)移節(jié)目

滑動(dòng)只知滑動(dòng)的進(jìn)度善镰,這時(shí)候需要通過(guò)距離來(lái)推算出滑動(dòng)到哪個(gè)時(shí)移節(jié)目之下,進(jìn)行高亮展示

我們假設(shè)滑動(dòng)距離為 x
當(dāng)前播放遍歷所有集合年枕,找到 itemBean = startWidth < x < endWidth
即為播放的節(jié)目

② 滑動(dòng)到直播對(duì)應(yīng)點(diǎn)

目前已知直播的 liveLength,最大播放點(diǎn)距離
滑動(dòng)進(jìn)度條不可超過(guò)此點(diǎn)

優(yōu)化炫欺,因?yàn)榛瑒?dòng)到直播這個(gè)點(diǎn),手指滑動(dòng)可能會(huì)有偏差熏兄,看的滑動(dòng)到直播了品洛,但是px像素很微小,手指覆蓋面積很大摩桶,如果按照liveLength來(lái)算桥状,很難滑到最末尾,所以滑動(dòng)到liveLength可以給個(gè)誤差值硝清,體驗(yàn)會(huì)更好辅斟,可以假設(shè)為 liveLength - 10

三、自動(dòng)更新
① 自動(dòng)更新時(shí)移節(jié)目

當(dāng)我們切換到某個(gè)時(shí)移時(shí)芦拿,播放器播放需要一直更新進(jìn)度士飒,此時(shí)需要我們單獨(dú)起一個(gè)計(jì)時(shí)器,播放器起播蔗崎,既需要打開(kāi)酵幕,播放器停止計(jì)時(shí)器停止
計(jì)時(shí)器只進(jìn)行讀秒操作,每次讀秒缓苛,每一秒都需要換算成距離芳撒,進(jìn)行推動(dòng)進(jìn)度條進(jìn)行調(diào)整

進(jìn)度條的進(jìn)度 = 進(jìn)度條進(jìn)度+ itemBeanplayWidth ÷ playLength ?? 1000

此時(shí)還需要檢測(cè) 播放器進(jìn)度是否大于 startWidth + playWidth
如果大于,則播放到了下一個(gè)時(shí)移節(jié)目

優(yōu)化,因?yàn)檫@個(gè)一直需要計(jì)算調(diào)整著笔刹,性能開(kāi)銷會(huì)比較大芥备,播放器時(shí)移只在全屏下展示,并且點(diǎn)擊屏幕會(huì)顯示5秒徘熔,5秒后會(huì)自動(dòng)關(guān)閉门躯,所以此計(jì)算展示只在展示之前調(diào)整好即可

② 自動(dòng)更新直播節(jié)目

直播節(jié)目更新需要注意點(diǎn)是,前后臺(tái)后酷师,需要還是定位到直播這一點(diǎn)讶凉,不能根據(jù)計(jì)時(shí)器值來(lái)計(jì)算,所以需要特殊標(biāo)注山孔,一直是直播的時(shí)長(zhǎng)

最終需要整合所有邏輯懂讯,遺漏的待補(bǔ)充

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市台颠,隨后出現(xiàn)的幾起案子褐望,更是在濱河造成了極大的恐慌,老刑警劉巖串前,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘫里,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡荡碾,警方通過(guò)查閱死者的電腦和手機(jī)谨读,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)坛吁,“玉大人劳殖,你說(shuō)我怎么就攤上這事〔β觯” “怎么了哆姻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)玫膀。 經(jīng)常有香客問(wèn)我矛缨,道長(zhǎng),這世上最難降的妖魔是什么匆骗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任劳景,我火速辦了婚禮,結(jié)果婚禮上碉就,老公的妹妹穿的比我還像新娘盟广。我一直安慰自己,他們只是感情好瓮钥,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布筋量。 她就那樣靜靜地躺著烹吵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桨武。 梳的紋絲不亂的頭發(fā)上肋拔,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音呀酸,去河邊找鬼凉蜂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛性誉,可吹牛的內(nèi)容都是我干的窿吩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼错览,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼纫雁!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起倾哺,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤轧邪,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后羞海,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體忌愚,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年却邓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了菜循。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡申尤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出衙耕,到底是詐尸還是另有隱情昧穿,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布橙喘,位于F島的核電站时鸵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏厅瞎。R本人自食惡果不足惜饰潜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望和簸。 院中可真熱鬧彭雾,春花似錦、人聲如沸锁保。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至吴菠,卻和暖如春者填,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背做葵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工占哟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人酿矢。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓榨乎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親棠涮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谬哀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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