摘要

本文介绍了视频视频花屏/绿屏问题的常见原因,如丢失关键帧、metadata的变化、硬件编解码的兼容性问题和颜色格式不一致问题。以及排查方法和解决策略,包括检查视频数据格式、排查自采集/自渲染模块问题、联系第三方音视频SDK技术支持等。最后,还介绍了即构 Express SDK的解决方案,包括自适应采集策略和适配3000+种视频采集设备等功能点,以确保视频通信的高质量和稳定性,有效地避免了视频花屏和绿屏问题。

一、音视频常见问题系列

对于音视频开发者来说,掌握排查问题的技术技巧方法是非常必要的,排查问题的技术方法也能够帮助开发者更好地了解音视频技术的原理和工作机制,从而更加深入地理解音视频开发中遇到的各种问题。 即构基于多年实时互动领域技术的沉淀和客户服务保障,我们将推出《音视频技术FAQ》系列文章,将音视频技术领域的常见问题和经验分享出来,同时会针对具体问题附上业务通识和常用解决方案以及案例经验,希望本系列能成为你手边的音视频通识册子,帮助到开发者们快速定位问题并找到合适的解决方案。 本系列将不定期更新,目前已整理了以下常见问题:

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

本文是《音视频技术FAQ》系列的第四篇文章。我们将专注于“视频花屏和绿屏”这一问题,详细分析可能导致此问题的原因,如编码解码问题、数据包丢失或硬件兼容性问题等,并为开发者提供相应的解决方案。希望本文能帮助大家更好地理解和解决实时音视频中的这一常见问题。

二、视频花屏/绿屏的定义和表现

视频花屏的定义和表现

  • 花屏的定义:指的是视频画面中出现颜色错误的不规则像素块,导致视频显示效果异常。图像的纹理可能会出现部分,或者全局不连续。
  • 花屏的表现:花屏幕播放的视频图像中出现不规则的、颜色异常的噪点,导致视频内容变得模糊、扭曲。 视频绿屏的定义和表现:
  • 绿屏的定义:指的是视频画面中出现绿色色块,导致视频无法正常显示。
  • 绿屏的表现:播放的视频整个屏幕或部分区域呈现出绿色,而无法看到实际的视频内容。

注意:花屏与视频模糊不同,视频模糊一般由于分辨率或码率过低导致。在模糊的视频中画面依然是完整的,常见现象是全局块状马赛克,或者局部斜线曲线锯齿。

三、视频花屏/绿屏排查、原因和解决方案

4.1 视频花屏/绿屏的排查定位

常见的视频花屏/绿屏有以下三种情况:

  1. 推流端预览视频花屏/绿屏,拉流端视频正常
  2. 推流端预览视频正常,拉流端视频花屏/绿屏
  3. 推流端预览视频和拉流端视频都花屏/绿屏

花屏或绿屏可能由摄像头、第三方美颜 SDK、视频分辨率、或采集和渲染模块的问题导致。 开发者可以参考以下步骤进行自检。

推流端花屏/绿屏

按照视频传输模块(采集-编码-传输-解码-渲染),以开发者是否使用SDK分成两种情况进行说明。

未使用第三方SDK:

  • 采集模块:

    • 权限检查:确保应用已获取摄像头和麦克风的权限。
    • 硬件检查:使用其他应用如系统自带的相机,检查摄像头是否能正常工作。
    • 数据检查:保存采集到的原始视频数据,并使用工具(如VLC)查看,确认是否存在问题。
    • 代码审查:逐一检查与采集相关的代码段,确保没有逻辑错误或误用API。
  • 编码和传输模块:

    • 编码格式与参数:确保使用的编码格式与目标播放设备和平台兼容。检查编码参数,如码率、帧率、分辨率等,是否设置得当。
    • 网络连接:测试当前网络连接的稳定性和速度。使用工具(如ping)检查网络延迟、丢包率等。
    • 服务器配置:确认服务器的配置,如推流地址、端口、协议等是否正确。

使用第三方SDK: 可根据具体的使用场景进行逐一排查,确保自定义采集和自定义渲染与第三方SDK之间的数据交换格式正确和兼容。

  • 采集和渲染模块
    • 排查第三方美颜SDK:如果你使用了第三方美颜 SDK,尝试关闭美颜功能并检查是否花屏。如果花屏现象消失,那么可能是第三方美颜 SDK 的问题,请联系第三方美颜 SDK 的技术支持。
    • 排查视频分辨率:如果出现条纹斜线状纹理,请检查视频分辨率是否是预设的分辨率。如果不是,尝试改变视频分辨率。
    • 如果推流端使用自定义采集,开发者需要自行排查自定义采集模块的问题。以即构 ZEGO Express SDK 为例,检查 enableCustomVideoCapture 函数的 ZegoCustomVideoCaptureConfig参数中的ZegoVideoBufferType 中指定的视频数据格式和传回 SDK 的视频数据格式是否一致。
    • 如果推流端使用自定义采集、第三方SDK 渲染,开发者需要自行排查第三方SDK渲染,使用第三方渲染,请检查返回的图像中 “stride” 参数和 “width” 参数的使用是否混淆,RGB 和 YUV 都需要根据实际的 “stride” 进行渲染。
    • 如果推流端使用 第三方SDK 采集、自定义渲染,可自行排查自定义渲染模块的问题。
    • 如果推流端使用第三方SDK 采集、SDK 渲染,可联系厂商的技术支持,若使用即构 ZEGO Express SDK 可登陆 即构官网

拉流端花屏/绿屏

如果发送端和接收端同时出现花屏,你需要首先参考上面 “4.1推流端花屏/绿屏排查发送端”排查推流端的问题。

如果只有接收端花屏/绿屏,可根据视频解码和渲染步骤进行排查。开发者可参考以下步骤进行排查,同样分为开发者是否使用SDK两种情况:

未使用第三方SDK:

  • 解码和渲染检查:确保解码器可以处理推流端的编码格式,并且渲染环境已经正确设置。
  • 网络检查:检查网络连接,确认是否有大量数据丢失。
  • 切换播放源:与使用SDK时相同,换个推流源试试。 使用第三方SDK:
  • 无论接收端使用第三方 SDK 渲染还是自定义渲染,首先你需要排查发送端的问题。如果发送端使用了自定义采集,你需要检查发送端自定义采集的数据在传输给 SDK 的过程中是否存在问题。以即构 ZEGO Express SDK 为例,如果拉流端使用自定义视频渲染,需要您自行排查拉流端自定义视频渲染模块的问题,检查返回图像中 “stride” 参数和 “width” 参数的使用是否混淆,RGB 和 YUV 都需要根据实际的 stride 进行渲染。
  • 如果接收端使用自渲染,你需要自行排查接收端自渲染模块的问题。

4.2 视频花屏/绿屏的原因

直播中的画面花屏、绿屏是实时视频传输中经常碰到的问题。这种问题的原因有很多,但通常与编码和传输的细节有关。以下为详细原因: 1. 丢失关键帧 在视频流中,关键帧(I帧)为完整的帧,它不依赖于其他任何帧。而其后的预测帧(P帧)和双向预测帧(B帧)则依赖于关键帧来进行解码。这意味着:如果关键帧丢失,那么所有直到下一个关键帧的P帧和B帧都无法被正确解码,从而导致花屏、绿屏等问题。 2. Metadata的变化 视频流的metadata包含了视频的关键参数(如分辨率、帧率、编码格式等),如果直播中metadata发生变化,播放器可能无法适应这些变化,从而导致解码问题,如花屏或绿屏。 3. 硬件编解码的兼容性问题 尤其在Android设备上,硬件编解码的实现差异可能导致一些兼容性问题。一些Android设备上的硬件编解码器可能实现得并不好,导致其兼容性不佳。 4. 颜色格式不一致问题 视频流中的颜色格式需要在推流和播放两端保持一致,如果推流端和播放端使用的颜色格式不同,解码时可能会出现花屏或绿屏等问题。

4.3 视频花屏/绿屏的解决方案

丢失关键帧的解决策略: 使用不同的播放器(如ffplay、VLC、Potplayer)可以帮助确定问题是否源自源码流。在必须丢帧的情况下,应该丢弃整个GOP,从而避免只丢失部分帧导致的花屏问题。 Metadata的变化的解决策略: 保持直播过程中的编码参数稳定,避免metadata信息发生变化。在必须丢帧的情况下,应该丢弃整个GOP,从而避免只丢失部分帧导致的花屏问题。 硬件编解码的兼容性问题的解决策略: 解决这类问题的一个方法是切换到软件编解码进行对比。为了提高兼容性,避免硬编解码的问题,开发者可以考虑使用软编码和解码,或者根据具体设备制定白名单或黑名单。 颜色格式不一致问题: 解决这类问题的办法是统一推流和拉流两端的颜色格式。确保图像的格式与编码器匹配。例如,如果采集到的视频是NV21格式,但编码器只支持I420,那么需要转换格式。在场景切换,如前后摄像头切换时,确保视频尺寸适应编码器的要求。

总之,当直播中出现花屏或绿屏问题时,开发者和操作人员需要进行全面的检查和排查,从源头到播放端逐一检查,以确保音视频流的稳定和清晰。

四、第三方音视频厂商解决方案即构 Express SDK

即构 Express SDK 为实时音视频通信提供了完整的解决方案。在实时音视频通信中,视频花屏/绿屏问题是常见的挑战。这些问题通常涉及编码和传输细节,如丢失关键帧、metadata的变化、硬件编解码的兼容性问题和颜色格式不一致问题。这些问题可能导致视频质量下降,甚至使通信过程中的视频变得不可用。

为了解决这些问题,即构 Express SDK采取了一系列策略来确保视频的稳定性和质量。从Express SDK的功能点角度,让我们来看看如何解决这些问题: 1. 自定义采集 即构 Express SDK 提供了自定义采集功能,确保原始视频数据的质量并确保从源头上获得最佳视频质量。这有助于避免因第三方采集工具或不合适的采集设置导致的花屏/绿屏问题。

  • 即构基于8年服务于4000家企业,单日30亿分钟时长的最佳实践,自研 ZEGO Express SDK,自定义采集功能避免了与第三方摄像头驱动或应用的兼容性问题。
  • 即构 Express SDK 保证了采集到的数据质量,确保了数据在传输过程中不会出现损坏或被篡改。
  • 即构 Express SDK支持动态调整黑白名单,灵活切换不同系统api和配置,确保用户获得最佳的体验。

2. 自适应采集策略 即构 Express SDK 内置了自适应采集策略。这意味着 SDK 能够基于当前的网络条件和设备性能动态调整视频的分辨率、帧率和码率。

  • 当网络条件不佳时,自适应策略可以降低视频质量,从而确保连续性并减少花屏/绿屏的机会。
  • 在设备性能受限的情况下,降低采集的分辨率或帧率,以减少编码压力,从而避免花屏/绿屏。

3. 适配3000+种视频采集设备 为了确保视频质量和兼容性, ZEGO Express SDK 针对3000+种不同的视频采集设备进行了优化和适配。

  • 由于设备和厂商之间的差异,即使是相同的视频采集参数,也可能导致不同的输出结果。通过适配各种设备,SDK 确保了每个设备都能提供最佳的视频质量。
  • 设备适配也涵盖了不同操作系统版本、摄像头驱动和硬件规格,确保在各种环境中都能获得最佳的视频体验。

除此之外,如果视频出现花屏或绿屏,即构ZEGO Express SDK会实时反馈错误信息,结合即构星图质量运营平台,帮助开发者全面监测音视频服务,低门槛且高效定位排查问题。同时,还提供了 丰富的技术文档和示例代码,帮助开发者了解SDK的各种功能,以及如何正确使用来防止或解决 视频花屏和绿屏问题