音视频开发常见问题(四):视频花屏和绿屏

这篇具有很好参考价值的文章主要介绍了音视频开发常见问题(四):视频花屏和绿屏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘要

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

一、音视频常见问题系列

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

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

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

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

视频花屏的定义和表现

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

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

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

3.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 进行渲染。
  • 如果接收端使用自渲染,你需要自行排查接收端自渲染模块的问题。

3.2 视频花屏/绿屏的原因

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

3.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的各种功能,以及如何正确使用来防止或解决 视频花屏和绿屏问题文章来源地址https://www.toymoban.com/news/detail-715004.html

到了这里,关于音视频开发常见问题(四):视频花屏和绿屏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt音视频开发33-vlc和mpv打开后鼠标打圈圈问题的解决

    如果采用的vlc句柄模式,如果鼠标停留在句柄控件中会发现在打开后鼠标打圈圈,mpv句柄模式是在关闭后鼠标打圈圈,这两者真是一前一后,这种给人的体验其实很不友好的,播放开始后或者播放完成后鼠标指针居然变成了繁忙,但是当你将鼠标位置从句柄控件中移到外面的

    2023年04月08日
    浏览(25)
  • Qt之基于QMediaPlayer的音视频播放器(支持常见音视频格式)

    Qt自带了一个Media Player的例子,如下图所示: 但是运行这个例子机会发现,连最基本的MP4格式视频都播放不了。因为QMediaPlayer是个壳(也可以叫框架),依赖本地解码器,视频这块默认基本上就播放个MP4,甚至连MP4都不能播放,如果要支持其他格式需要下载k-lite或者LAVFilter

    2024年02月02日
    浏览(41)
  • 音视频八股文(3)--ffmpeg常见命令(2)

    播放本地 MP4 视频文件 test.mp4 的命令,从第 2 秒位置开始播放,播放时长为 10 秒,并且在窗口标题中显示 “test time”: 播放本地 MP3 音频文件 buweishui.mp3 的命令: 播放网络 RTMP 流的命令,使用 -window_title 参数设置窗口标题为 “rtmp stream”,并指定流地址为 rtmp://202.69.69.180

    2023年04月27日
    浏览(34)
  • 音视频八股文(2)--ffmpeg常见命令(1)

    官方文档: https://www.ffmpeg.org/ffplay-all.html https://www.ffmpeg.org/ffmpeg-all.html 要在Windows系统上使用FFmpeg命令行,可以按照以下步骤搭建环境: 1.访问FFmpeg官方网站,下载已经编译好的Windows shared库。 2.将下载得到的包中的执行文件ffmpeg.exe、ffplay.exe和ffprobe.exe拷贝到C:Windows目录下。

    2024年02月16日
    浏览(35)
  • linux 音视频架构 linux音视频开发

    转载 mob6454cc65110a 2023-07-26 22:27:01 文章标签 linux 音视频架构 ci QT 视频教程 文章分类 架构 后端开发 阅读数 117 目录 前言 1、软件工具准备 a. 录音软件 b. 录屏软件 c. 摄像头软件 d. 安卓屏幕操作软件 e. 视频剪辑软件

    2024年02月07日
    浏览(42)
  • 【音视频原理】图像相关概念 ② ( 帧率 | 常见帧率标准 | 码率 | 码率单位 )

    帧率 Frame Rate , 帧 指的是 是 画面帧 , 帧率 是 画面帧 的 速率 ; 帧率 的 单位是 FPS , Frames Per Second , 是 每秒钟 的 画面帧 个数 ; 帧率 是 动画 / 电影 / 游戏 的 每秒钟 的 画面数 , 用于 测量 视频 的 信息数量 ; 帧率 越高 , 视频 信息数量越多 ; 帧率 与 流畅度 相关 , 帧率越高

    2024年01月20日
    浏览(79)
  • Qt音视频开发45-音视频类结构体参数的设计

    视频监控内核组件重构和完善花了一年多时间,整个组件个人认为设计的最好的部分就是各种结构体参数的设计,而且分门别类,有枚举值,也有窗体相关的结构体参数,解码相关的结构体参数,同时将部分常用的结构体参数的获取和设置单独提供了函数,参阅海康大华等大

    2024年02月05日
    浏览(53)
  • ffmpeg解决bilibili下载的音视频分离问题,将音视频一键合成

    1:到FFmpeg下载安装包,我安装的是windows 下载打包文件 2:解压文件到本地 以下为解压后的文件视图 3:点击进去第一个bin文件,复制该目录,安装到本地环境变量中 然后点击确定进行保存设置 4:ctrl+r打开运行,输入cmd打开命令窗口,输入ffmpeg -version查看版本 安装成功 将所

    2024年02月11日
    浏览(32)
  • net音视频问题

    记录日常工作中遇到的音视频问题,以供大家借鉴或参考!

    2024年02月04日
    浏览(27)
  • Qt/C++音视频开发46-音视频同步保存到MP4

    用ffmpeg单独做视频保存不难,单独做音频保存也不难,难的是音视频同步保存到MP4中,重点是音视频要同步,其实这也不难,只要播放那边音视频同步后的数据,写入到文件即可。最难的是在播放过程中不断随机的切换播放进度,而且还会暂停播放、暂停录制的情况出现,这

    2024年02月17日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包