從《數字海洋》中的視頻播放Bug案例談程序員的態度

一、簡介

2019年,我曾經在一家公司擔任前端開發工程師,主要負責開發公司官網和數字海洋項目。數字海洋是一個提供在線視頻學習課程的平台,用戶可以通過該平台學習各種課程,但是在運營過程中,我們遇到了一個非常棘手的Bug:在播放視頻的時候,視頻會播放幾秒鐘後自動暫停,刷新頁面就可以繼續播放,但是僅僅是一時的解決辦法,很快又會復現此問題。

二、查找問題

我們經過仔細的分析,一開始懷疑是網絡問題,但是通過檢測,網絡沒有問題。緊接着我們又懷疑是服務器問題,通過對服務器進行排查,也未發現服務器問題。我們還懷疑是客戶端瀏覽器的問題,但是驗證後也排除了這個問題。看來問題並不好找。

我們當時非常困擾,但是我們並沒有放棄,我們開始投入更多的時間去找尋問題的根源。我們檢查了代碼,嘗試了多種解決方案,但均以失敗告終。

幸運的是,在我與同事互相交流的過程中,我發現了一個通用現象:Bug出現後,刷新頁面就可以正常工作。有了這個線索後,我們逐漸鎖定了問題範圍。我們發現了是在訪問後端接口時出現了問題。

三、修改代碼

我們在開始修改代碼之前,先從後端入手。我們對後台源代碼進行了仔細的檢查,逐一排查可能存在的問題,最終鎖定了問題出現的位置。在請求視頻的URL之後,後端返回的結果中,有一種情況是會返回特定的錯誤代碼。在錯誤代碼出現時,前端客戶端會自動停止向服務器發送獲取視頻流的請求,導致視頻暫停。

為了解決這個問題,我們修改了相關代碼,使得在遇到該錯誤代碼時,客戶端能夠自動重新向服務器發送請求,以獲取視頻流。之後,再運行測試,問題已得到解決。

四、總結

這個Bug的解決,雖然花費了我們很多的時間和精力,但是也使得我們對開發過程中的一些問題有了更深的理解。這個案例中最大的收穫就是我們真的牢記:“不要輕易認為你發現了問題的根源,充分探查相關信息,在各個角度下尋找解決方案,從而邁向更高級的程序員!”

五、代碼

async function getVideoStream(url, options) {
  let response = await fetch(url, options);

  let reader = response.body.getReader();
  let isRunning = true;

  while (isRunning) {
    let chunk = await reader.read();
    let buffer = chunk.done ? null : chunk.value.buffer;

    if (buffer) {
      // 處理獲取到的流
      handleVideoStream(buffer);
    } else {
      // 重新向服務器發送請求,獲取視頻流
      let responseRe = await fetch(url, options);

      if (responseRe.status !== 200) {
        console.error(`Failed to get video stream : ${responseRe.statusText}`);
        isRunning = false;
      } else {
        reader = responseRe.body.getReader();
      }
    }
  }
}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/301772.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-30 16:09
下一篇 2024-12-30 16:09

相關推薦

  • 兼職程序員能掙錢嗎?

    可以。不過,兼職程序員賺錢的關鍵就在於如何找到並利用合適的機會。 一、掌握技能 作為程序員,掌握必要的技能是兼職掙錢的前提。除了紮實的編程技能,了解相關工具和平台也非常重要。常見的…

    編程 2025-04-29
  • 兼職程序員外包平台的開發與實現

    隨着社會經濟和科技的快速發展,更多人選擇通過互聯網進入編程行業。兼職開發已成為一種新型就業方式,並且這種方式在新冠肺炎疫情襲來、大規模遠程辦公的背景下更為普遍。本文將從多個方面詳細…

    編程 2025-04-28
  • 傳智播客黑馬程序員怎麼樣

    傳智播客是一家專業的IT培訓機構,旗下的黑馬程序員培訓項目備受好評,那麼傳智播客黑馬程序員怎麼樣呢?本文將從多個方面為大家詳細闡述,讓大家更加了解其優缺點。 一、學習方式 傳智播客…

    編程 2025-04-27
  • 如何使用getField函數:Java程序員的必備技能

    Java中有很多反射API可以幫助開發者在運行時獲取或者修改某些屬性或方法的值。getField方法就是Java反射中一個非常實用的方法。本文將詳細介紹getField方法的用法以…

    編程 2025-04-23
  • firstthen-程序員的神器

    一、輕鬆管理你的代碼庫 firstthen是一種簡單易用的代碼管理工具,它可以輕鬆地幫助您管理代碼版本、分支、合併和提交。無論您是一個個人開發者還是一個團隊,firstthen都能…

    編程 2025-02-25
  • 程序員面試金典

    《Cracking the Coding Interview》(程序員面試金典)是一本專門針對程序員的面試準備指導書籍,書中包含了各種面試題目,以及闡述解法和優化算法。該書作者Ga…

    編程 2025-02-24
  • 從入門到放棄:一位程序員的路程

    一、追求編程夢想的初衷 很多人成為程序員的起點是因為在初中、高中階段開發了一些簡單的程序,就對編程產生了興趣。通過自學或者參加培訓班,我們開始踏入編程的大門。初期的學習是比較輕鬆愉…

    編程 2025-02-05
  • JavaArchive – 全球領先的Java程序員社區

    JavaArchive是一個全球領先的Java程序員社區,致力於為Java程序員提供最優秀的資源和支持。在JavaArchive上,你可以學習Java編程技術,獲取最新的開發動態,…

    編程 2025-01-21
  • Gitupdateproject:Python程序員必備的版本控制工具

    在當今的軟件開發中,版本控制是一個極其重要的環節,而Gitupdateproject則是Python programmers必備的一款版本控制工具。Gitupdateproject…

    編程 2025-01-20
  • 面試java程序員自我介紹(面試自我介紹 java)

    本文目錄一覽: 1、應聘java程序員該怎麼自我介紹? 2、Java程序員面試時如何自我介紹(中英文) 3、面試自我介紹 4、自我評價或是自我介紹(我是Java程序員) 5、JAV…

    編程 2025-01-16

發表回復

登錄後才能評論