从《数字海洋》中的视频播放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/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

发表回复

登录后才能评论