音视频开发常见问题(五):视频黑屏

摘要

本文介绍了视频黑屏的可能原因和解决方案。主要原因包括用户主动关闭视频、网络问题和渲染问题。解决方案包括优化网络稳定性、确保视频渲染视图设置正确、提供清晰的提示、实时监测网络质量、使用详细的日志系统、开启视频预览功能、使用视频流回调、处理编解码问题、处理权限问题、自定义视频渲染逻辑和使用实时反馈系统。此外,即构 Express SDK 提供了一系列的功能和方法来帮助开发者定位和解决视频黑屏问题。

一、前言

对于音视频开发者来说,掌握排查问题的技术技巧方法是非常必要的,排查问题的技术方法也能够帮助开发者更好地了解音视频技术的原理和工作机制,从而更加深入地理解音视频开发中遇到的各种问题。

即构基于多年实时互动领域技术的沉淀和客户服务保障,我们将推出《音视频技术常见问题FAQ》系列文章,将音视频技术领域的常见问题和经验分享出来,同时会针对具体问题附上业务通识和常用解决方案以及案例经验,希望本系列能成为你手边的音视频通识册子,帮助到开发者们快速定位问题并找到合适的解决方案。

本系列将不定期更新,目前已整理了以下常见问题:

  1. 视频卡顿
  2. 延时高
  3. 音画不同步
  4. 视频花屏、绿屏
  5. 视频黑屏
  6. 视频放大或黑边
  7. 首开慢
  8. 音视频流控
  9. 视频模糊
  10. 无法打开摄像头
  11. 音频回声
  12. 音量太小
  13. 音频噪声
  14. 无声
  15. 上下麦音量变化

本文是《音视频技术常见问题FAQ》系列的第五篇文章。我们将专注于 “视频黑屏” 这一问题,详细分析可能导致此问题的原因,用户主动关闭视频、网络问题和渲染问题等,并为开发者提供相应的解决方案。希望本文能帮助大家更好地理解和解决实时音视频中的这一常见问题。

二、视频黑屏的表现

视频黑屏是音视频应用中一个表示视频无法正常播放或显示的现象。

视频黑屏的定义:是指在使用音视频应用,如直播、视频会议或音视频通信时,预期应该显示视频图像的地方,却只显示一个纯黑的画面。
视频黑屏的现象:画面是黑的,没有图像,但是有声音。

首先,我们需要明白当直播中出现视频黑屏、花屏、绿屏、闪屏等画面问题时,问题可能出现在推流端(即视频来源、主播端)或者拉流端(即播放器、观众端)。

常见的视频黑屏有以下三种情况:

1. 本地预览视频黑屏,拉流视频正常

2. 本地预览视频正常,拉流视频黑屏

3. 本地预览拉流视频都黑屏

直播的数据流是单向的,从推流端流向拉流端。如果推流端没有发送正确的视频数据,那么拉流端自然无法正常显示;反之,如果推流端的数据是正确的,但拉流端出现问题,也可能导致黑屏。

如何简单快速地判断问题出现在哪一端?

  • 使用第三方工具观看: 可以使用VLC、ffplay等第三方播放器尝试拉流。如果在第三方播放器上可以正常播放,那么问题可能出在拉流端的播放器上;反之,那么问题更有可能出在推流端。
  • 查看推流端预览: 在开始推流之前,主播通常可以在本地预览视频。如果预览正常,但拉流端黑屏,那么问题可能与推流的编码或网络传输有关;如果预览也是黑屏,问题可能与摄像头或其他采集环节有关。

通过上述方法,通常可以初步判断问题出现的环节,从而更有针对性地进行进一步的诊断和解决。

三、视频黑屏产生的原因和排查办法

产生的原因

出现黑屏的原因有很多,常见原因有:

- 网络问题:如果本地网络连接很差或者中断,就会看不到其他用户的视频。如果通话中有一方的网络出现问题,其他人也看不到这个用户的视频。

- 渲染问题: 渲染视图设置不正确或者生命周期异常也会导致黑屏。

- 另外,如果用户主动关闭视频,也会出现黑屏,包括但不限于没有权限、主动禁用、切后台等情况。

如何自行排查

1 本地预览视频黑屏,拉流视频正常

这种情况一般是摄像头故障或者被占用等原因导致本地视频采集出现问题,请按以下步骤排查:

  • 检查推流质量参数,查看采集帧率、渲染帧率是否正常。(这个排查方法的前提需要基于开发者前期打点才可统计到数据)
    • 如果采集帧率为零,请检查用户是否禁用本地视频。或者设置错误的采集/编码分辨率。
    • 如果上述配置正常,可能为摄像头硬件问题。打开系统自带的拍摄视频程序看是否可以录像,如果不行,需要更换摄像头。
    • 如果摄像头没有问题,需要确认是否开启摄像头权限。Android 和 iOS 系统都有权限管理,请在系统设置中检查。
  • 检查是否有其他应用占据摄像头。关闭其他应用然后打开自己的应用进行测试。Windows 平台请检查是否有虚拟摄像头占用物理摄像头。
  • 如果采集帧率不为零,渲染帧率为零,请参考第三种情况“本地预览拉流视频都黑屏”中的步骤进行排查。
  • 如果是自定义视频采集,需要确认自定义视频采集数据是否有问题,请注意时间戳的单位。

2 本地预览视频正常,拉流视频黑屏

这种情况可能是远端采集/推流问题或者本地下行网络原因导致,请参考以下步骤排查:

  • 检查用户是否禁用拉取远端视频。如果没有禁用拉取远端视频,检查拉流质量参数,查看网络帧率、解码帧率、渲染帧率是否正常。如果网络帧率为零,建议更换网络查看是否还存在问题来排除网络原因,同时检查远端视频摄像头状态。
  • 如果远端视频摄像头状态正常,检查远端用户能否在自己的设备上看到自己的画面。如果看不到,则是远端用户的视频问题。请参考第一种情况“本地视频黑屏,远端视频正常”中的步骤来进行排查。如果网络帧率不为零,渲染帧率为零,请参考第三种情况“本地预览拉流视频都黑屏”中的步骤进行排查。

3 本地预览拉流视频都黑屏

这种情况可能是渲染出现问题或者没有启用视频,请参考以下步骤排查:

  • 检查是否有禁用本地摄像头及禁用拉取远端视频。如果是自定义视频渲染,需要排查渲染模块。检查是否使用纯音频 SDK,而没有使用视频 SDK。
  • 检查本地预览和拉流渲染视图是否设置正确。比如视图的宽高是否均不为 0,视图生命周期是否正常,视图是否被其他黑色视图覆盖。

四、视频黑屏的解决方案

原因1:网络问题

网络稳定性是音视频通信中最关键的因素之一。不稳定的网络连接会导致数据包的延迟、丢失或错乱,这些都可能导致视频画面黑屏或卡顿。

  • 延迟:音视频数据包需要在一定时间内到达对方设备,如果网络延迟过大,数据包可能会被视为过期并被丢弃,导致黑屏。
  • 数据丢失:关键帧丢失是视频黑屏的常见原因。没有关键帧,解码器无法正确解码其他帧。
  • 错乱:数据包的接收顺序与发送顺序不一致,可能导致解码错误和视频黑屏。

解决方法:

  • 对于网络不稳定的情况,通常的做法是采用丢帧策略,只保留关键帧,同时优化编解码算法来应对网络波动。
  • 使用前向纠错、自适应码率等技术来适应不同的网络环境。

原因2:渲染问题

在音视频应用中,视频数据经过解码后需要渲染到屏幕上。如果渲染环节出现问题,即使视频数据正常,用户也无法看到画面。

  • 视图设置问题:视频渲染视图可能被其他视图遮挡,或者视图尺寸、位置设置错误。
  • 生命周期异常:如果应用的生命周期管理存在问题,如在某些状态下未正确处理视频渲染,也可能导致黑屏。

解决方法:

  • 确保视频渲染视图的设置正确,并且始终处于可见状态。
  • 仔细管理应用的生命周期,确保在所有状态下都正确处理视频渲染。

原因3:用户主动关闭视频

某些场景下,用户可能会主动关闭视频或者由于权限问题而无法开启视频。

解决方法:

  • 应用应该提供清晰的提示,让用户知道他们的视频为何处于关闭状态。
  • 对于权限问题,应用应该在用户尝试开启视频时提醒并引导用户授予权限。

五、第三方音视频解决方案- ZEGO 即构 Express SDK

即构 Express SDK 是音视频厂商即构推出的一款提供实时音视频通信能力的软件开发工具包。 当遇到视频黑屏问题时,ZEGO Express SDK 提供了一系列的功能和方法来帮助开发者定位和解决问题。以下从 Express SDK的功能点角度阐述如何解决视频黑屏问题:

解决策略一:推流质量回调

  • 功能描述: 当主播进行推流时,ZEGO Express SDK 提供实时的推流质量回调,包括视频帧率、码率、延迟等关键指标。

  • 如何解决黑屏问题: 通过实时监测推流的质量,开发者可以迅速发现潜在的问题。例如,如果视频帧率突然降低或为零,这可能是导致黑屏的原因。同时,根据码率和延迟的情况,可以判断网络的稳定性。对于不稳定的网络,可考虑降低推流的视频质量或提示主播。

解决策略二:拉流质量回调

  • 功能描述: 当用户拉取直播流时,ZEGO Express SDK 提供实时的拉流质量回调,如视频缓冲次数、帧率、码率等。

  • 如何解决黑屏问题: 黑屏可能是由于拉流的质量问题。例如,如果观众频繁经历视频缓冲,可能是由于网络不稳定或者CDN问题导致的。通过拉流质量回调,开发者可以诊断问题并做出相应的处理,如切换备用的流地址、调整拉流的质量或给出用户提示。

解决策略三:星图音视频质量运营平台

  • 功能描述: 星图是即构的实时网络质量可视化工具,能够详细展示推流和拉流的网络状态、设备信息等。
  • 如何解决黑屏问题: 利用星图,开发者可以更直观地看到每个用户的网络状况、设备型号、系统版本等信息。对于黑屏问题,星图可以帮助开发者快速找出可能的原因,比如某些特定的设备或网络环境与SDK不兼容。

解决策略四:质量跟踪

  • 功能描述: 即构提供了一个完整的质量跟踪系统,可以跟踪每一次的音视频通话,记录各种质量相关的参数。
  • 如何解决黑屏问题: 当出现黑屏问题时,开发者可以查阅相关的质量报告,找出问题的模式和规律。例如,某一天的某个时间段出现了大量的黑屏报告,可能是服务器或CDN出现问题。或者某个特定地区的用户报告黑屏,可能是网络环境导致的。

即构通过其Express SDK为开发者提供了全方位的工具和功能来帮助定位和解决视频黑屏问题。但也需要开发者结合实际应用场景,仔细检查和调整相关设置,确保音视频通信的稳定性和质量。

六、总结

最后,我们来总结:视频黑屏问题的排查和解决方案,首先我们先分析导致视频黑屏的原因,包括用户主动关闭视频、网络问题、渲染问题等。针对上述四种情况分别都有对应的解决方案。

对于网络问题,建议采用丢帧策略、前向纠错和自适应码率等技术来适应不同的网络环境。对于渲染问题,需要确保视频渲染视图设置正确,并正确处理应用的生命周期。对于用户主动关闭视频或权限问题,应提供清晰的提示和引导。

此外, ZEGO Express SDK 提供的解决方案,包括推流质量回调、拉流质量回调、星图和质量跟踪等功能。能够帮助开发者快速定位和解决视频黑屏问题,提高音视频通信的稳定性和质量。

综上所述,开发者通过理解可能导致视频黑屏的原因并采取相应的解决方法,能够有效解决视频黑屏问题,提供稳定和高质量的音视频通信体验。