网络视频流解码显示后花屏问题的分析

news2025/3/17 6:09:20

问题描述

rtp打包的ps视频流发送到客户端后显示花屏。

数据分析过程

1、用tcpdump抓包

tcpdump -i eth0 -vnn -w rtp.pcap

2、用wireshark提取rtp的payload

保存为record.h264文件

3、用vlc播放器播放

显示花屏

4、提取关键帧

用xxd命令将h264文件转为txt文件

xxd -p record.h264 > record.txt

 选取一个关键帧单独保存为frame.txt

000001ba44099d268401003a9bf8000001bb000c801efffde17fe0e800c0c200000001bc0012e1ff000000081be0000090c0000045bddcf4000001e0f81180c00a31026749a111026749a100000001674d001f9a6402802dff35010101400000fa000030d4010000000168ee3c800000000165888010000afff88198fc0704b552be75547b530a9b815add7238af32c6d113fef2fc09f70103eb062510477a8d1fd86ce122d1b474fd48fb62342893af148b9da27a42c4ca6c52f4549aa2e1a3184ab8abd0a28e55c2e6da455f298f9b0e2c0623ae75204592ab79056969cb95348dcee08bebb2c12ed6c1744289062881f2194820c7a154594ce951a87d4f059abceeb607df330a823317e62588275ead9caf1085ab170ae732e6a9f01621ca5bfc9f8977e39449d29cc895d4c6577e59ba89ac90310ef6bd95c41759af85b63124b329ce7c8c20c04e79bcead58f4bcb514857837ae0b90da327c3704365ebc9561d5b97d7743aec97d1960f7549b8301ee8459ba4955ba0699f3d44a70ec2e7234e5f3c0c5e7b8331f0661e0a3cb8c24462f477abbe203ed2fddb4931f65fc1cd073c5fd3799f03fe51d47d40510d1747226a956c237846feeebeb294373ed7983c923f85239f3d889199828383494162818038b815b6ae547773d4e2dad3acca897d8916ffff53244ec8ae08cc3e1db4be1c440059a459fa94b888ae344a248a3d666a83fe1c9778de8733b1bca152af6d0886b77e1b30b84ad5153644357ce4a14da8224de6b5a0a2fee80d91c2b4251c7678e047eff342ea82b86a72d833eb78d955486db661d6a206f14d8ed9ae2769e11223983981ea4ebec9c6b7d5cf08c71a11a84ab692d81d7dc914de59d76e8e3c52df919e0034cde670412983ecfa6ea88d02cb4709a1f67d18fb857bcb882404a7ed0998cb1f3c316b1e0f149ccbf285133f08bb839bebb1a99e2b1ebc28a559bdaf0617905351d56ffa35949cb6ca74f84afd3a208631bf0f62c8482b9565ddda95f9c3d2c40bdd6dd8cef22244dfd7cbb2097aceed269acbd33d72810870abe573f156ab97e67c9e8ece23451ef9795889468dd8ff10a6a2ccc1f464466e11c66958a5659b173adef9b23440dfbf493ae7dbc81514513573e0094dd23c3e27859477052f3977d2fbb472d1eabd29509244bbf6fe1082d0b7f02c3c32efa335ed8c3a16f3d5fe08c3754fd491ea23f81db0301c6b52bdae4112969ee97cf1cdfe6125daf1ff850ad393195234e2ab1ac1ef08c5ddbf11caa63c9e9c1d25864ee9ecdcdc6d7daf050c88c2733603747d04602443c898a6aca2ed70aeb9349d19a0d160af760b0ca2fb582b4c3ba168bd8c8aaa3b2975e6d51c66b0d7934fa6134b3672ffaac8ab9d0a35df14c5c138c6bfe0735ef1e4c5d82f185770554d68f820dbaa55947fb6b537bb1ec711c770d9541413c5f1e649272dafae5a474c8ae47ab86fbd376ed7d012e416ffc16e7de0eea7df918797066c8f07e8c71835a20829bec575b0fdbaeeb53f784031feac7f2a9c4d7f3e98cee262ee333583ecf3632089e438061b0afd59ba02cf8f661321224ac23f2e4d30c5fccb56bc4c45ab8646b9176951d4b94b6b3181fc94aa62ceeb1ee922be177404a5b49c59a17a823db0bae183156cc69af4b86d8623e91aa6928617e4090f0a1f15c6f3e735f3ec15ad693b3fa75b40199e3c25126146a4bb6bc9dafde28944af09d2c0df2df1fb6dcb1e00d4bba784a508ced34bb3f3e35d0e8f2f0acf9412341b8a74ba9646fe6729be2921da06588f2abc86d45504044a26aa0dd88f9b41d10b8f0dfd45ebf63e66fd7f0701a2763b23acc348837d8597e4fc6304b2efa9c8ec5d7338abde9d580c2a5f8c8979bc5c0203bd6bbd61bdba9c21050eef4116bc2f59ed824f4ea7d03307053321609503d5c2d844bc6b7eb5d4f4099ebb38859f67549fd1dd3c8c87771385ecf7b17b162a6607eb42cdfb34e198fcaf280228b489f7a90a409d1cabc7d35d9ba6dd2179182652cb0a95bc70b268883a591fac0d72f82b041f8bdff58d295831541b727a69c7c9aa5e819a0601e916c9c207e993a65a33d9d230a3d4d6fb046030f701c90f36be25d3b8b7f20b45619ab933b09ae3dbbd67492cda5620df574a62b5e6ff6b8a83fd7c90bff2e0956f37bf954ad440185a7559805430e514d0daab1531fa8a9fdda766efa1b09db19fe9ff5e459a3e2bd3b26be261cd18f1cc6a7c245976807cfca557c376e00abf7ba01a11eec784abcb480c5cbc5c4da2077658b02f89ff10b5b582896700a68c72c5e3c5e260c180eeba79a74aa980eff7bc2cb5726130797fcc9c58c481af1b51b7d5942b1d31a4eea850ab91959bdca24fbc5b2a3fc523a81eb3aeb983df546a125e775222113907f2bec084e27df888b4bbaf5c8510573017b2163bab298cb86f18e6aa72e5ae045ad1f91d4b442130e8ddc1065716130b5a9c4debd9f5aa669fc4edf3760bbde607341977f4bcec4738b1cfd5c6ecf364e3ed260e28773f70822f6b1b71da5507f991d494e8aec5e02d2e1ddd076275983912bee679300d6edbb76062dfdef8e3afb59d47f97d8ed4e6d4b6c3d661747631aec957a8f019b1f17565b7ef73b0cc243597da634c4b8a05070598cc0307a42da83cc96f6c427912184ac17af41b631a107c0cfbb9f83d06e5fe904a89ff3457b20292618c8b0f72945596db264df11513bc275a6963ae5b8a01eef66be2ab6e1689635b289e0b05fcae907c27166a5419b26e9a1ce63e2bbca084c4b51f671c4a534aaa2e927836918a8f2cb9b45a895c6330656d5c533243ff4a9bca431927a90c077fa25e5e5481f327cf7ab8d13ec4beb54fdbab700b4b5d8d7b93ef34f7b2386e82da8881197687d524e455fc3ac7f771721cc2fcfb8ccba546bb45965edb8aef4c0c49ef6254a8d44b0f27c07dee29bcd4cea015bcf3415129b1ec71d295488f81792288e3cbcf3acdaf3266e56ae5e430411263accb32ca59025ea6dd8358920c59182851b2d7a42499829d3aafa1821453564fbe308e92c71c21efb27d128fb63fd02a2965e54c3946c5c5d5ba582fb3081720af9c1bfd31f23d2107ab8ef274c9b383c6683b241bbe5aef34d8926ced1500ee2c85715cffff979a8459d2be07325944849edf45b5d048c71ce21b7e42f8c08939205411116400d163eac5502825b420954499a3dab6bdcc2297d642628f5c0fbf8231b5bbf96c03564a2c8d50d5ab4c36cddd91581bfad6b092ab694bd12d3ed6ed9524dba45ab703e5460ea345b21da17088b9e431e5518ace12efadbd38c2d3723fc5de1f5ea5c864cb3410ca25f45bdbcfbd29458a1040e5df18410158eb20f920ca1de4f87c9f59eceabb9e20c3085574ea490f96e17ae79c0a9c2aed6e34f82a672dbce5e79e238ce0edec652823efb49361255554495a41a12220fc8e33108dbebe3fcf078b0f56052d52274c879c2dec2ff127c8296e253bea3d883ccfcb0ffccb02a4ec204ede7b5945a235ab361cab816d9ea9b7241524639210c310d6ce53ec62e448aa34d720da015acfc9b18cd6a2ce6ee566711e9450bff3b9860716d4788ab5890c8b2bb2fb1ee43b3fbd935412e8e7720440ffbae1c395b23eeac74b0c32190d4db9d6ea6974d308b6659e4ef050ed3953de1a0acab3739ab54024fd26582a24e902e

用python脚本将frame.txt转为二进制frame.h264

def hex_string_to_binary_file(hex_string, output_file):
    # 将十六进制字符串转换为字节
    binary_data = bytes.fromhex(hex_string)

    # 将字节数据写入到二进制文件
    with open(output_file, 'wb') as f:
        f.write(binary_data)


# 读取包含十六进制字符串的文件
input_file = r'frame.txt'
output_file = r'frame.h264'

with open(input_file, 'r') as f:
    hex_string = f.read().strip()

# 调用函数进行转换
hex_string_to_binary_file(hex_string, output_file)

print(f"Binary file '{output_file}' has been created.")

5、用ffmpeg解码关键帧

下面两条指令都可以

ffmpeg -f h264 -i frame.h264 -vsync 0 -vf "select=eq(n\,0)" -vsync vfr output.png

这个命令强制从输入视频中选择第一个帧,并且不处理时间戳(-vsync 0),以避免时间戳问题。

ffmpeg -f h264 -i frame.h264 -frames:v 1 output.png

这条命令从视频流中提取一帧并保存为图像。

6、查看图像

显示正常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2112518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Xpath] Xpath基础知识

1.Xpath(XML Path Language)介绍 Xpath用于在HTML文档中通过元素(HTML标签)和属性(HTML标签的属性)进行数据定位 Xpath的优势:灵活且稳定 HTML树状结构 HTML的结构是树形结构,HTML是根节点,所有的其他元素节点都是从根节点发出的&#xff0…

Adobe After Effects的插件--------CC Particle World

CC Particle World是一个粒子效果器,用于在三维空间中生成和模拟各种粒子系统,包括火焰、雨、雪、爆炸、烟雾等等。它会自动随时间变化发射粒子。 本文部分参照 https://www.163.com/dy/article/IEJVDN760536FE6V.html 使用条件 使用该插件的图层需是2D图层。 我们新建一个…

图像生成技术飞速发展,个人化艺术创造还有多远?

图像生成技术飞速发展,个人化艺术创造还有多远? 通义万相文本绘图与人像美化希望图像生成类应用具备哪些功能通义万相改进建议 在当今这个创意与科技交织的时代,图像生成技术正以前所未有的速度重塑视觉艺术的边界。不管你是否有艺术细胞&…

递推,CF 353D - Queue

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 353D - Queue 二、解题报告 1、思路分析 手玩一下,我们发现相…

数据结构 - 线性表

0.线性表 1.定义 线性表就是零个或多个相同数据元素的有限序列。 2.线性表的存储结构 ①.顺序结构 ②.链式结构 3.线性表的表示方法 例如: 一.线性表的基本运算 二.线性表的复杂运算 1.线性表的合并运算 2.线性表的去重运算 三.顺序表 1.定义 顺序表,就…

Tensorflow2 如何扩展现有数据集(缩放、随机旋转、水平翻转、平移等),从而提高模型的准确率 -- Tensorflow自学笔记14

实际生活中的数据集,往往不是标准的数据,而是有倾斜角度、有旋转、有偏移的数据,为了提高数据集的真实性,提高模型预测的准确率,可以用ImageDataGenerator函数来扩展数据集 import tensorflow as tffrom tensorflow.k…

单机部署Redis集群

文章目录 Redis集群1.单机安装Redis2.Redis主从集群2.1.集群结构2.2.准备实例和配置2.3.启动2.4.开启主从关系2.5.测试 3.搭建哨兵集群3.1.集群结构3.2.准备实例和配置3.3.启动3.4.测试 4.搭建分片集群4.1.集群结构4.2.准备实例和配置4.3.启动4.4.创建集群4.5.测试 Redis集群 …

[数据集][目标检测]井盖丢失未盖破损检测数据集VOC+YOLO格式2890张5类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2890 标注数量(xml文件个数):2890 标注数量(txt文件个数):2890 标注…

基于人工智能的聊天情感分析系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 情感分析是一种自然语言处理任务,旨在识别文本中的情感,如“积极”、“消极”或“中立”。在聊天应用中&#…

Unity制作更换字体的插件

目录 1.前置知识 1.1 EditorWindow 1)目的 2)使用方式 1.2 OnGUI() 1)目的 2)使用方式 1.3 AssetDatabase 1)目的 2)使用方式 1.4 PrefabUtility 1)目的 2)使用方式 2…

永远学习:为什么人工智能难以适应新挑战

理解深度学习的局限性并追求真正的持续适应 欢迎来到雲闪世界。 “智者适应环境,正如水适应水瓶。”——中国谚语 “适应或灭亡,现在和以往一样,是大自然的必然法则。”——赫伯特乔治威尔斯 近年来,人工智能取得了长足的进步。所…

Android的logcat日志详解

Android log系统 logcat介绍 logcat是android中的一个命令行工具,可以用于得到程序的log信息。下面介绍 adb logcat中的详细参数命令以及如何才能高效的打印日志,或把日志保存到我们指定的位置。 可以输入 adb logcat --help,查看一下一些简…

Xinstall助力App全渠道统计,参数传递下载提升用户体验!

在移动互联网时代,App已成为我们日常生活中不可或缺的一部分。然而,对于App开发者来说,如何有效地推广和运营自己的应用,却是一个不小的挑战。尤其是在面对众多渠道、复杂的数据统计和用户需求多样化的情况下,如何精准…

【ffmpeg】转换音频格式

在音频文件所在目录启动终端输入以下 ffmpeg -y -i original.aac target.mp3-y 如果输出文件已经存在,则覆盖它而不询问。 执行完毕后在当前文件夹目录下生成目标文件

项目9-网页聊天室9(测试报告)

1.项目背景 本项目采用 SSM框架结合 Websocket 技术构建。用户通过简单的注册和登录即可进入聊天室,与其他在线用户实时交 流。系统支持文字消息的快速发送和接收、消息实时推送,确保交流的及时性和流畅性。SSM 框架为项目提供了稳定的架构和高效的 数据…

学习笔记--MybatisPlus

官网:MyBatis-Plus 🚀 为简化开发而生 快速入门 入门案例 引入MybatisPlus的起步依赖 定义Mapper 问题: MybatisPlus中Invalid bound statement (not found): com.itheima.mp.mapper.UserMapper.insert 一定要指定实体类!&am…

ASTER 地表动能温度 (AST_08) 是利用 8 至 12 µm 光谱范围内的五个热红外波段

ASTER L2 Surface Temperature V00 简介 ASTER 地表动能温度 (AST_08) 是利用 8 至 12 m 光谱范围内的五个热红外波段(白天或夜间获取)生成的 (https://lpdaac.usgs.gov/documents/996/ASTER_Earthdata_Search_Order_Instructions.pdf)。 它只包含陆地…

Slideflow:数字病理学中的深度学习与全切片可视化工具库|文献精析·24-09-02

小罗碎碎念 群里今天有人提问Histolab相关的问题,作者在交流的过程中谈到了Slideflow,恰好我没有看过这篇文章,所以便有了这期推文。 作者角色作者姓名单位名称(英文)单位名称(中文)第一作者Jam…

性能工具之 JProfiler 简单登录案例分析实战

文章目录 一、前言二、准备工作三、使用JProfile定位问题四、登陆案例分析四、总结 一、前言 JProfiler是一款 Java的性能监控工具。可以查看当前应用的对象、对象引用、内存、CPU使用情况、线程、线程运行情况(阻塞、等待等),同时可以查找应…

66、脑机接口产业联盟天津第一次全体大会参会分享

我注意到脑机联盟网上搜不到第一次和第二次大会的有关资料,这是非常遗憾的,所以我根据自己参会的记录,写成文章,与各位同学分享,此课件我也做成了公开课讲解,连接在我的Github。写这些,也算是为…