H264解码显示开发记
文章平均质量分 89
记录在工作工程中用到的一些实用代码,解决问题方案。
SunkingYang
C++资深工程师,拥有12年C++开发经验。
期间从事Windows客户端及Linux服务端开发。客户端有ActiveX、MFC、QT,医疗虚拟与现实(Ogre、QT、OpenCV等),三维人脸识别。
拥有4年天网视频监控开发经验,包含ocx插件开发、国标解码库:软解码和硬解码开发等(Windows平台),2年雪亮工程国标服务开发经验,包含国标28181级联服务、国标流媒体等(Linux平台)。
展开
-
数组类型转为整型
在解码h264文件时,常常会遇到解析二进制,将其保存到一个BYTE数组,或者其他类型数组中,但如果二进制代表得是整型,就需要进行转换,下例是数组转整型:cpp:// ShiftDemo.cpp : 定义控制台应用程序的入口点。////功能:将数组(指针)类型转为整型#include "stdafx.h"#include <iostream>using namespace s...原创 2018-07-06 16:56:28 · 3358 阅读 · 0 评论 -
h264解码之自定义信息(SEI)
针对h264的解析网上优秀得博文、帖子一抓一大把,我就不在这班门弄斧了,仅仅提取一些自己在用的过程中比较有用的信息,对于sei自定义信息字段,虽然网上信息很多,但不容易精确搜到,就像我之前曾遇到一篇对我个人非常有用的文章,但后面一直找不到,现在再次看到,就把部分提取了出来,记录下,方便自己后面再次用到方便,也看能不能帮助到部分码友。 参考博客:https://www.ji...原创 2018-07-06 17:57:12 · 35768 阅读 · 6 评论 -
H264解码之读取本地H264文件
读取本地文件,并逐帧读取:onReadThread():void RtspVideo::onReadThread(){ // 解码参数 char *virInBuf = new char[MAX_DECODER_INPUT_BUFFER_SIZE]; //初始化文件读入buf if (init_frame_parser() < 0) { fprintf(stderr...原创 2018-07-23 15:16:53 · 6481 阅读 · 1 评论 -
H264解码之解析从Live555接收到的数据
Live555接收数据:数据解析、SEI解析: void RtspVideo::process(RtspCliSession::Type type, const std::string& codec, char* data, int size, void* pdatauser){ unsigned char const start_code[4] = { 0x00, 0x00,...原创 2018-07-23 15:04:28 · 627 阅读 · 0 评论 -
H264解码之D3D显示YUV
文章目录概述关系参考接口介绍显示方式纹理方式使用shader的纹理方式不使用shader的纹理方式表面(Surface)方式概述备注:本文主要针对DirectX 9.0版本来讨论的。在开始这篇文章之前,我们先阐述一下一些名词:DX、DDraw、DirectShow、D3D、DirectX、DirectDraw等。关系首先我们理一理他们之间的关系,这些关键词统称DirectX,简称DX,它...原创 2019-06-12 17:27:38 · 2414 阅读 · 1 评论 -
H264解码之DDraw显示YUV
头文件:#pragma once#include "ddraw.h"#include <time.h>#pragma comment (lib, "ddraw.lib")#pragma comment(lib, "dxguid.lib")class display{public: display(void);public: ~display(void);p...原创 2018-07-23 14:45:35 · 972 阅读 · 0 评论 -
H264解码之YUV格式转换及缩放
int video_decoder::swscale(const char* srcbuf, int ntype, int nsrcwidth, int nsrcheight, int ndstwidth, int ndstheight, unsigned char* dstbuf){ if (5 != ntype && 3 != ntype) { return -1;...原创 2018-07-23 15:28:55 · 1918 阅读 · 0 评论 -
H264解码之ddraw画矩形框和画字(滤镜)
void display::showOSD(HRESULT ddrval, int in_width, int in_height, FaceStructInfo *pUser, int nCount){ HDC hDC = NULL; ddrval = m_pOsdSurface->GetDC(&hDC); if ((ddrval == DD_OK) &&...原创 2018-07-23 15:59:38 · 711 阅读 · 0 评论 -
H264解码之ffmpeg画矩形框和画字(滤镜)
int display::initFrameBuffer(int in_width, int in_height){ avfilter_register_all(); buffersrc = avfilter_get_by_name("buffer"); buffersink = avfilter_get_by_name("buffersink"); frame_buffer_in...原创 2018-07-23 16:02:18 · 3031 阅读 · 0 评论 -
RTP、RTSP和ES、PES、PS以及TS码流的区别
ES、PES、PS以及TS区别基本概念ESES–Elementary Streams (原始流)是直接从编码器出来的数据流,可以是编码过的视频数据流(H.264,MJPEG等),音频数据流(AAC),或其他编码数据流的统称。ES流经过PES打包器之后,被转换成PES包。ES是只包含一种内容的数据流,如只含视频或只含音频等,打包之后的PES也是只含一种性质的ES,如只含视频ES的PES,...原创 2019-07-29 15:57:11 · 11555 阅读 · 0 评论 -
H264解码之RTP流解析
RTP包头格式RTP包头占位12个字节,其字段组成如下图所示: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...原创 2019-07-30 16:34:15 · 2791 阅读 · 0 评论 -
H264解码之PS流解析
PS头封装格式PS流是对PES的进一步封装,是将具有共同时间基准的一个或多个PES包组合而成的单一的数据流;其基本单位是PS包,PS流由很多个PS包组成,PS包主要由固定包头,系统头,和PES包组成,其具体组成如下图所示:下图更为清晰:PS流有一个结束码MPEG_program_end_code:占位32bit,其值为0x000001B9,PS流总是以0x000001BA开始,以0x00...原创 2019-07-30 15:06:56 · 2440 阅读 · 0 评论 -
H264解码之PES流解析
PES简介:PES–Packetized Elementary Streams (分组的ES),ES形成的分组称为PES分组,是用来传递ES的一种数据结构。PES流是ES流经过PES打包器处理后形成的数据流,在这个过程中完成了将ES流分组、打包、加入包头信息等操作(对ES流的第一次打包)。PES流的基本单位是PES包。PES包由包头和payload组成。PES流是对原始ES流进行的第一层...原创 2019-07-29 16:04:03 · 3710 阅读 · 1 评论 -
H264解码之TS流解析
TS包头格式TS流,即传输流,是对PES包的进一步封装,基本单位为TS包,固定每包大小为188字节(或204字节,在188字节后加上16字节的CRC校验数据),由TS包头和payload组成;其组成如下图:其中包头由4个字节的固定头部和其后的adaptation field数据构成,字节顺序依次如下:sync_byte:同步码,其大小为固定8个bit,值为0x47;transpo...原创 2019-07-29 16:05:53 · 2639 阅读 · 0 评论 -
H264解码之FFmepg解码ES数据
前言在项目开发中,我们收到的数据流,一般是RTP数据流,所以在解码过程中,我们分为以下几个步骤:解析RTP数据包,去RTP头,得到PS数据解析PS数据,去掉PS头,得到PES数据解析PES数据,去掉PES头,得到ES数据解析ES数据,如解析出:PPS、SPS、IDR、P等本文,我们就来探究怎么用FFmepg解析ES数据。解析ES数据在解析ES数据之前,我们会解析PES,在解析P...原创 2019-08-09 10:54:19 · 1246 阅读 · 2 评论