电视会议常用原始码流播放器的编写

【音视频数据数据处理 11】【H.264篇】解析H.264原始码流中所有的NAL单元数据 【音视频数据数据处理 11】【H.264篇】解析H.264原始码流中所有的NAL单元数据一、NAL头组成二、准备H.264 视频素材三、解析H.264码流NAL单元代码实现四、运行结果 有关H.264的基础知识,可以参考下我之前转载学习的文章《 H264编码基本原理(一)》 在第六章中,我们学习到,在实际的网络数据传输过程中H264的数据结构是以NALU(NAL单元)进行传输的,传输数据结构组成为[NALU Header]+[RBSP],如下图所示: 简单来说,就是H.264的原始码流数据是由一个一个N 阅读详情
 
 
 
一.             编写播放器的起因
在电视会议媒体问题诊断中,常常需要截取IP网络的流量并处理成原始码流以供播放器播放并根据播放效果诊断问题所在。该过程一般分为如下几个步骤:
1)              首先使用ethereal判断rtp流是否跟信令吻合,比如媒体类型,媒体封装格式以及媒体传输层地址等是否吻合。这一步主要是诊断出信令媒体配合问题以及互通问题。
2)              使用ethereal的RTP分析工具判断是否存在RTP包丢包或者严重的抖动情况,因为这些也会影响到电视会议的效果。这一部主要是诊断出网络问题。
3)              使用基于winpcap开发工具包编写的码流提取工具提取出纯码流,然后经过合适处理,送给pc解码器(图像可以用图像组的C03或者开源的ffplay等,音频可以用audacity)播放,观看播放效果。主要I帧的有无以及画质问题。这一部常用于诊断编解码器和主控配合问题。这一步因为牵涉比较多,下面列出需要注意的问题:
a)       对于H.261、H.263等码流,需要注意sbit和ebit的拼接,对于H.263+码流,按照规范简单处理就好了,对于H.264码流,需要在每一个NAL单元前面添加0x00,0x00,0x00,0x01用于帮助解码器解码,注意,H.264码流必须要有图像参数集PPS和序列参数集SPS后才能正确解码,对于没有必要参数集的,可以尝试配置一个默认的参数集。
b)       对于音频,可以使用一些辅助的库将G.722,G.728,G.723.1以及G.729转化成有符号16位的pcm然后播放,注意G.722的采样率是14K,如果按照8K播放,声音会很奇怪。在使用audacity的时候,可以先听出声音异常段,然后再看对应处的波形,看是否有丢包问题,最后再根据audacity显示的时间去截包文件中找到对应的包,看有无抖动过大或者丢包问题存在。
从以上罗列内容可以看出,码流的提取和播放需要一定的步骤和技巧,并且牵涉到了一些工具的使用,在使用ffmpeg或者mplayer的时候,一些参数的填写需要记忆,在audacity的导入对话框,也需要一定的码流知识,这些知识对于一般不是很熟悉媒体的技术人员来说很难掌握。基于这个目的,所以编写了一个集成的工具,该工具操作的对象是网络截包,然后基于传输地址自动把相关码流汇集起来,只要选择对应的码流,就可以播放出该码流。如果嵌入了QoS算法,那么还可以模拟出真实码流在该算法下丢包情况。比较适合一般工程人员初步定位问题使用。
二.             编写播放器的准备工作
1) GUI库的使用 使用wxWidgets用于界面显示
2) 解码库的使用 使用ffmpeg作为解码
3) 图形显示库的使用 使用了SDL作为图形显示
4) 截包解析库的使用 使用了winpcap作为操纵截包的库
5) 音频解码库的使用 使用了一个商业试用库,imtelephone公司的easy系列的库
6) 音频播放库的使用 使用了portaudio库播放声音
三.             播放器的大致思路
播放器工作的基本步骤:
1) 首先使用winpcap库读取截包文件,按照传输地址将码流分类读入内存
2) 根据一定的规则推测各个传输地址所包含码流的类型。如果是固定负载类型,那么直接给出类型,如果是动态负载类型,那么根据先验知识推断(目前也就是视频的h263+和h264,还是很容易判断出来的)。
3) 在用户选择了QoS模拟后,按照内存内保存的包的时间线索以及QoS调度时间,以步进方式模拟,对于每一个丢包,做一个适当的纪录,模拟结束后,输出汇总信息。
4) 如果用户选择播放,如果用户已经打开过截包文件,并且有过选择,那么需要询问用户是否播放选择的,或者需要打开磁盘上的文件播放。虽然有所区别,但是对于播放器来说就没有太大区别。下面按照两个分支分别叙述:
a)         如果是播放码流文件,需要注意的是要在送给解码器前预处理一下,对于视频,比如H.261和H.263的负载头的剥离和sbit、ebit的拼接,H.263+头部的简单变化,H.264的流头的添加。对于音频,在音频库需要数据的时候,需要解码出数据,然后在回调内提供给以音频播放。
b)        如果是播放磁盘文件,那么需要在一些无法确认的地方需要提示用户选择,比如G.723的5.3K和6.3K,有了用户确认后,也就很好处理了。
播放器编程中一些要点:
1) ffmpeg库的使用,比如库的初始化,如何启动特定解码器,如何获得解码后的帧,如何处理函数返回值,以及数据结构是如何包含图像数据的,只有了解这些,才能够顺利的解出图像。
2) 如何在wxPanel中绘制图像,主要是利用了SDL_Surface,将解码后的数据填写到SDL_Surface内,然后在重画的时候利用SDL_Surface内部数据生成缓冲的wxBitmap,然后直接绘制。
3) 在播放音频的时候要正确的理解采样率,单双声道以及采样数据类型,在回调函数中要能够正确的给缓冲区赋值
4) 在wxWidgets环境中正确的使用线程,由于图像的播放需要定时地驱动,所以要派生出线程来生成定时事件。同时线程间同步的处理也要谨慎,否则容易造成死锁或其他异常。
 
原始码流打包成ts流 原始码流打包成ts流的源码,好不容易找到的 立即下载

相关推荐

h264原始码流,清晰又流畅

720*480的H264原始码流。自己录的放心使用,有需要的其他的可以联系我。

音视频入门(1)——H.264视频码流分析

文章目录一、原理 一、原理 H.264原始码流(又称为“裸流”)是由一个一个的NALU组成的。他们的结构如下图所示: NALU (Network Abstraction Layer Unit) 翻译过来就是网络抽象层单元。在 H.264/AVC 视频编码标准中,所有的码流数据,最终都被封装成了一个一个的 NALU(Network Abstract Layer Unit)就是网络抽象层单元。 既然是视频流,那么NALU里面存放的必然有视频数据,除此之外,还有一些其他的信息,比如说时间戳,帧率,画面是否翻转

永不秃头的程序员的博客 2055

Lisflood

文献:基于SWMM和LISFLOOD-FP模型的居住区低影响开发模拟评价。问题:多个节点溢流同时,不行,待解决。目录下,cmd命令行。

警警的博客 2660

H264视频编码基础

​H.264是MPEG(Moving Picture Experts Group)和 VCEG(Video Coding Experts Group)联合开发的一个比早期研发的MPEG 和 H.263 性能更好的视频压缩编码标准,这就是被命名 为 AVC(Advanced Video Coding),也被称为 ITU-T H.264 建议和 MPEG-4 的第 10 部分的标准,简称为 H.264/AVC 或 H.264。这个国际标准已经与 2003 年 3 月正式被 ITU-T 所通过并在国际上正式颁布。

布里啾啾提不哩多的博客 1638

STM32开发者必看:如何在正点原子探索者开发板上快速移植CANopenNode协议栈

本文为STM32开发者提供了在正点原子探索者开发板上快速移植CANopenNode协议栈的实战指南。文章详细介绍了从环境准备、硬件抽象层适配到协议栈初始化与测试的全过程,并分享了PDO配置与性能优化等关键技巧,帮助开发者高效实现CANopen标准化通信。

weixin_29173777的博客 462

Dify Rerank 模型配置全流程解析:从报错定位到代码实现

Dify Rerank 模型配置全流程解析:从报错定位到代码实现

engchina的专栏 4468

音视频数据处理:H.264视频码流解析

本文介绍视音频码流的处理程序。本文介绍的程序是视频码流处理程序。视频码流在视频播放器中的位置如下所示。本文中的程序是一个H.264码流解析程序。该程序可以从H.264码流中分析得到它的基本单元NALU,并且可以简单解析NALU首部的字段。通过修改该程序可以实现不同的H.264码流处理功能。

KQe397773106的博客 801

用户和实体行为分析(UEBA)基础指南及解决方案

用户和实体行为分析(UEBA)或异常检测是一种网络安全技术,它使用机器学习(ML)算法来检测网络中用户、主机和其他实体的异常活动。

ITmoster的博客 2892

码流基础

负载类型(或载荷类型):视频、音频 1、ES:Elementary Stream(基本码流),是由编码器输出的原始基础码流,它只含有解码器所必需的、并与原始图象或原始音频相接近的信息。由由压缩器输出的用于传送 单路视音频信号的原始码流。ES只包含一种内容的数据流,如只含视频或只含音频等。 2、PES:Packetized Elementary Streams (分组的ES),ES形成的分...

luyumiao1990的专栏 1644

宝塔面板+pbootCMS建站全流程:从服务器选购到上线优化(附常见问题排查)

本文提供了一份详尽的宝塔面板与pbootCMS建站实战指南。内容涵盖从云服务器选购、宝塔面板部署与安全加固,到pbootCMS安装、权限配置、数据库连接等核心步骤。同时深入讲解了PHP环境优化、Nginx伪静态设置、缓存开启等性能与SEO优化技巧,并附有常见问题排查与后期维护建议,帮助用户高效、稳健地完成专业网站构建。

e4f5g6h的博客 658

基于Simulink的基于MPC的实时ZMP约束步态优化仿真

本文完成了基于Simulink的MPC实时ZMP约束步态优化仿真,实现了:✅ 建立3D-LIPM预测模型✅ 设计带ZMP可行域约束的MPC优化器✅ 实现闭环实时求解与扰动抑制✅ 验证强鲁棒性与安全性✅ 为人形机器人野外行走、人机交互提供先进控制方案。

xiaoheshang_123的博客 85

码流基本概念

1、码流(码率) 码流(Data Rate)是指视频文件单位时间内使用的数据流量,也叫码率或码流率,单位是kb/s或者Mb/s。同样分辨率下,视频文件的码流越大,画面质量就越高。,要求播放设备的解码能力也越高。 码流越大,文件体积也越大,其计算公式是文件体积=时间X码率/8。例如,网络上常见的一部90分钟1Mbps码流的720P RMVB文件,其体积就=5400秒×1Mb/8=675MB。 2、采样率 采样率(也称为采样速度或者采样频率)定义了每秒从连续信号中提取并组成离散信号的采样个数,赫兹(Hz)来表示

weixin_39736022的博客 2万+

通信原理 | python调制识别数据及代码

数据集包含了从-20dB 到+18dB 总共 20 个信噪比(步长为 2)下的 11 种调制信号, 包括 AM-DSB、 AM-SSB 和 WBFM 三种模拟调制信号,以及 BPSK、 QPSK、 8PSK、 CPFSK、 GFSK、 PAM4、 QAM16 和 QAM64 八种数字调制信号。其中信号的中心频率为 200KHz,采样频率为 1Msamp/s,且每个信噪比下每种调制信号包含 1000 个信号。其中每个信号包含 IQ 两路数据,且每一路数据都包含有 128 个采样点。

若北辰 1757

H.264基础知识及视频码流解析

H.264基础知识及视频码流解析 目录 H.264概述 H264相关概念 H264压缩方式 H264分层结构 H264码流结构 H264的NAL单元 H.264视频码流解析 转载:入门理解H264编码 视音频数据处理入门:H.264视频码流解析 1. H.264概述 编码是为了将数据进行压缩,这样在传输的过程中就不会使资源被浪费。 用一个简单的例子来说明编码的必要性:当你此刻显示器正在播放一个视频,分辨率是1280720,帧率是25,那么一秒所产生正常的数据大小为:1280720(位像素)*25(

努力努力再努力L 6838

Unity之OpenXR+XR Interaction Toolkit实现 Gaze眼部追踪

在虚拟现实(VR)和增强现实(AR)应用中,眼动追踪是一项强大而受欢迎的技术。它可以让开发者更好地理解用户的注意力和行为,并创造出更加沉浸和智能的体验。在本文中,我们将探讨如何使用 Unity OpenXR 实现Gaze眼部追踪功能。

TxNet 1751

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

opencv 获取rtsp原始码流代码

opencv不仅可以获取解码后的图片数据,还可以获取未经解码的原始码流数据, 这样为使用其他硬解码器提供方便 在编译opencv cmake时需要指定 -D WITH_FFMPEG=ON python 代码如下,需要指定CAP_PROP_FORMAT 为 -1 指定关闭软解码功能 需要说明的是,获取的原始码流数据需要通过视频流解码器才能获取到图片数据 import cv2 rtsp_url = "rtsp://192.167.15.41/g2.mp4" logger.info(rtsp_url)

u011337602的博客 1787

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

原始 H.264 码流播放

我们平时遇到的视频文件各式各样,五花八门。通常它们会根据格式的不同,而有着不同的扩展名,比如 avi,rmvb,mkv,mp4 等等等。这些格式代表的都是 封装格式。这些文件通常产生的过程是这样的: 1. 通过录制工具录制一帧一帧的图像,可能是 Camera,屏幕截取工具等。 2. 将录制的图像送给编码器进行编码,得到原始的视频码流,也称为裸流。比如视频中常用的 H.264 格式的编码。 3.

tq08g2z的专栏 9765

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

视音频数据处理入门:H.264视频码流解析

前两篇文章介绍的YUV/RGB处理程序以及PCM处理程序都属于视音频原始数据的处理程序。从本文开始介绍视音频码流的处理程序。本文介绍的程序是视频码流处理程序。视频码流在视频播放器中的位置如下所示。本文中的程序是一个H.264码流解析程序。该程序可以从H.264码流中分析得到它的基本单元NALU,并且可以简单解析NALU首部的字段。通过修改该程序可以实现不同的H.264码流处理功能。原理H.264原

雷霄骅(leixiaohua1020)的专栏 25万+

分析IPNC_RDK H264编码器输出原始码流信息

最近在研究FLV视频格式,发现要想把H264码流解出来,就需要AVCDecoderConfigurationRecord 的信息,具体AVCDecoderConfigurationRecord  如何解析,可以参考:h264中avc和flv数据的解析 为了保证播放器可以正常解析数据出来,我们在打包数据格式无论是FLV还是MP4都必须提供AVCDecoderConfigurationRecor

1904

H.264视频码流解析

原理 H.264原始码流(又称为“裸流”)是由一个一个的NALU组成的。他们的结构如下图所示。 其中每个NALU之间通过startcode(起始码)进行分隔,起始码分成两种:0x000001(3Byte)或者0x00000001(4Byte)。如果NALU对应的Slice为一帧的开始就用0x00000001,否则就用0x000001。 H.264码流解析的步骤就是

RunningZyx的博客 5350

将摄像头原始RGB数据流编码成H.264文件

http://www.cnblogs.com/youfal/archive/2012/08/31/2665900.html 查阅了很多资料,都是将YUV文件编码成H.264视频,几乎没有找到用摄像头数据直接存储为H.264文件的。 以下是我的实现方法,借鉴了网上的一些做法,整合而成。需要先安装ffshow。   extern "C" { #include "avcodec.h"

cjsycyl的专栏 9193
上一篇: Ethereal 也可以使用lua做一些自定义的功能了--编写lua脚本扩展ethereal的功能
下一篇: ethereal的捕获过滤器和显示过滤器
matlab2000
博客等级 码龄24年 37粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值