播放视频时有残影、水纹的原因

简介: 播放视频时有残影、水纹的原因

关键字:播放 残影

简介:播放有残影、水纹,是因为某些帧没有参与解码。


专门截图,可以看看是怎样的:https://blog.csdn.net/quantum7/article/details/89297300


以前做视频的时候,因为软解性能差,对于1080P无能为力,于是想到了硬解。找到了硬解资料调通,测试播放时发现,开始几秒还好,过一会就有类似水纹的残影。反复检查、修改代码,找不到原因,也无法解决此问题,只好放弃。


近来做新的视频播放功能,突然发现平常播放(调用了硬解)正常的功能,也有了残影水纹。开始以为是代码问题,反复检查、回滚,没有解决;后来以为是发送方问题,又一番折腾,还是没有解决。经过一个星期的反复折腾,找不到原因,只能放弃。


之后发现播放时帧率,低于发送方的帧率。于是又检查代码,原来有人根据自己理解,随意加了一个帧率控制代码(实际上对于发送、接收来说,帧都不是均匀到达的)。去掉这部分代码后,帧率正常了,残影也很神奇的没有了。


于是就明白了,残影水纹产生的原因是:编码方编码(软编、硬编)产生的帧,解码方(使用硬解,软解一般无此问题)只解码了一部分。出现这种情况,有几种可能:


编码了,发送时做了控制,过滤了一些。


网络太差,接收方丢弃了不完整的帧。这只会偶尔发生。各位在看网络视频时,也会发现这种情况。


硬件解码时播放时做了控制,放弃了一些帧。


考虑到实际情况,帧率控制应该在发送方处理,而且要在编码之前。


目录
相关文章
|
API 图形学
Unity设置播放模式下始终先执行指定的场景
通过我们使用Unity开发游戏,是在PC/Mac上。而一个游戏通常也会有很多的场景,比如A、B、C、D三个场景,正常流程下的执行顺序是 A –> B –> C –> D。在具体一点,比如 A —— 启动场景、B —— 资源加载场景、C —— 登录场景、D —— 战斗场景。
1750 0
|
5月前
|
API Android开发 Kotlin
kotlin 音频播放,多音轨同时播放,音频播放期间,可以随时设置播放速度
在Android中,`SoundPool` 适合播放短音频但不支持直接改变播放速度。若需调整播放速度,可使用 `AudioTrack` 或 `MediaPlayer`。以下是一个使用 `MediaPlayer` 实现多音轨播放并调整播放速度的简单Kotlin代码示例,特别注意,`setPlaybackParams` 方法在API 23及以上版本才能调整播放速度。别忘了在不再使用时释放 `MediaPlayer` 资源以防止内存泄漏。
|
6月前
|
XML Android开发 数据格式
使用默认闪电浏览器 全屏播放视频时有黑边
使用默认闪电浏览器 全屏播放视频时有黑边
89 5
|
6月前
运行和其他应用同时播放的实现原理
运行和其他应用同时播放的实现原理
61 1
|
6月前
|
缓存
停止AVPlayer并在缓存阶段立即播放其它视频闪退问题及解决方案
停止AVPlayer并在缓存阶段立即播放其它视频闪退问题及解决方案
77 0
|
存储 移动开发 小程序
小程序:播放视频
小程序:播放视频
366 0
播放视频时有残影、水纹的原因
播放视频时有残影、水纹的原因
173 0
|
XML Java Android开发
【安卓开发】调用系统相机录像并保存到本地
【安卓开发】调用系统相机录像并保存到本地
344 0
|
存储 编解码 计算机视觉
项目实战:Qt+OpenCV视频播放器(支持播放器操作,如暂停、恢复、停止、时间、进度条拽托等)
项目实战:Qt+OpenCV视频播放器(支持播放器操作,如暂停、恢复、停止、时间、进度条拽托等)
项目实战:Qt+OpenCV视频播放器(支持播放器操作,如暂停、恢复、停止、时间、进度条拽托等)
【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )(一)
【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )(一)
1490 0
【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )(一)