资源简介
读取H264文件,获得每一帧的数据,然后切分成NAL,封装成RTP包,用UDP发送到网络。

代码片段和文件信息
#include “stdafx.h“
#include “fframeExtractFilter.h“
#include “MfcParser.h“
static unsigned char delimiter_H264[] = {0x00 0x00 0x00 0x01}; // H.264
static unsigned char delimiter_MPEG4[] = {0x00 0x00 0x01}; //MPEG4
//
// Constructor
//
CframeExtractFilter::CframeExtractFilter()
: m_pframexCtx(NULL)
{
m_first = 1;
memset(m_szFileName 0 sizeof(m_szFileName));
m_frame_num = 0;
m_bLoopAfterEnd = FALSE;
m_bReadFileEnd = FALSE;
}
//
// Destructor
//
CframeExtractFilter::~CframeExtractFilter()
{
if(m_pframexCtx != NULL)
{
SsbSipParserDeInit(m_pframexCtx);
m_pframexCtx = NULL;
}
}
//
// 设置文件读取路径
//
void CframeExtractFilter::SetFileName(LPCTSTR pszFileName)
{
lstrcpy(m_szFileName pszFileName);
}
//设置是否循环读取文件
void CframeExtractFilter::SetLoopMode(BOOL bLoop)
{
m_bLoopAfterEnd = bLoop;
}
//
// ReadTheFile
//
int CframeExtractFilter::OpenFile(LPCTSTR pszFileName SSBSIP_MFC_CODEC_TYPE file_codec_type)
{
SSBSIP_MFC_CODEC_TYPE codec_type = UNKNOWN_TYPE;
TCHAR file_ext[6] = {0};
TCHAR file_name[128] = {0};
int nRead;
unsigned int width height;
width = height = 0;
char * divider = NULL;
char ext[8] = {0};
USES_CONVERSION;
divider = strrchr(T2A(pszFileName) ‘.‘);
if(divider)
strcpy(ext divider+1);
bool bFlag = false;
if(file_codec_type != UNKNOWN_TYPE) //根据输入的编码类型来确定格式
{
bFlag = true;
codec_type = file_codec_type;
}
else
{
bFlag = GetCodecType(ext (SSBSIP_MFC_CODEC_TYPE&)codec_type); //根据文件后缀名获取视频编码格式
}
if(!bFlag) //不是支持的格式
return -1;
SetFileName(pszFileName); //保存文件路径
m_StrmType = codec_type;
ATLTRACE(_T(“OpenFile: %s \n“) pszFileName);
if(m_pframexCtx != NULL)
{
SsbSipParserDeInit(m_pframexCtx);
}
MPEG4_CONFIG_DATA conf_data;
memset(&conf_data 0 sizeof(MPEG4_CONFIG_DATA));
conf_data.bGetWH = TRUE; //是否获取分辨率
//读取整个文件,获得视频分辨率和每一帧的信息
if((m_pframexCtx = SsbSipParserInit((SSBSIP_MFC_CODEC_TYPE)m_StrmType T2A(pszFileName) MAX_DECODER_INPUT_BUFFER_SIZE &conf_data)) == NULL)
{
::OutputDebugString(L“SsbSipParserInit Failed\n“);
return -2;
}
width = conf_data.width;
height = conf_data.height;
ATLTRACE(“Width: %d Height: %d \n“ width height);
// Validate the width & height value
if ((width > 4096) || (width < 16) || (height > 2048) || (height < 16)) {
ATLTRACE(_T(“video size is not vaild. (width=%d height=%d)\n“) width height);
return -3;
}
m_bReadFileEnd = FALSE;
return 0;
}
//函数:GetNextframe
//说明: 读取下一个帧的数据,如果是第一次调用,则读取第一帧。
// m_bLoopAfterEnd变量设置是否循环读取文件,会影响GetNextframe函数的行为。如果m_bLoopAfterEnd为true,则调用GetNextframe永远都会返回成功;否则,则读到文件尾部最后一帧就结束。
//返回值:大于0返回实际读取的帧长度;==0表示已经读到最后一帧,调用者应该停止继续调用该函数,准备关闭文件;-1表示读取错误。
int CframeExtractFilter::GetNextframe(unsigned char *pframeBuf unsigned int *pSize char *
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-12-03 15:33 VsParserSendH264\
目录 0 2018-12-03 15:33 VsParserSendH264\Debug\
文件 4640 2018-12-03 13:35 VsParserSendH264\ffr
文件 1597 2018-12-03 13:35 VsParserSendH264\ffr
文件 1135 2018-12-03 13:36 VsParserSendH264\mfcparser.h
文件 11516 2013-11-12 10:13 VsParserSendH264\NALUnit.cpp
文件 4637 2013-11-12 10:13 VsParserSendH264\NALUnit.h
文件 1207 2018-12-02 17:27 VsParserSendH264\ReadMe.txt
文件 2121 2018-12-03 14:14 VsParserSendH264\RTPPacket.cpp
文件 1320 2018-12-03 14:51 VsParserSendH264\RTPPacket.h
文件 3780 2018-12-03 15:30 VsParserSendH264\RTSPStream.cpp
文件 1602 2018-12-03 15:30 VsParserSendH264\RTSPStream.h
文件 7087 2013-11-12 10:13 VsParserSendH264\smartptr.h
文件 3765 2015-06-19 09:53 VsParserSendH264\SpsDecode.h
文件 2385 2018-12-03 13:41 VsParserSendH264\SsbSipMfcDecParser.cpp
文件 216 2018-12-02 17:27 VsParserSendH264\stdafx.cpp
文件 394 2018-12-03 14:37 VsParserSendH264\stdafx.h
文件 4173 2013-12-28 13:14 VsParserSendH264\Structure.h
文件 498 2018-12-02 17:27 VsParserSendH264\targetver.h
文件 12077 2018-12-03 14:58 VsParserSendH264\TypeHandler.cpp
文件 2037 2018-12-03 15:31 VsParserSendH264\TypeHandler.h
文件 34810 2018-12-02 17:57 VsParserSendH264\vsparser.cpp
文件 3281 2018-12-02 17:29 VsParserSendH264\vsparser.h
文件 7451 2018-12-03 15:32 VsParserSendH264\VsParserPro.cpp
文件 5628 2018-12-03 14:29 VsParserSendH264\VsParserPro.vcproj
文件 909 2018-12-03 13:23 VsParserSendH264.sln
相关资源
- JM阅读笔记(学习H264)
- h264 ip核,经过asic验证
- MT6771T_LTE-A_Smartphone_Application_Processor
- FFMEPG实现h264解码
- H264标准的详细图解
- 在QT中使用RTP进行视频的采集和传输
- 流媒体相关协议标准RTP/RTSP/RTCP PDF文档
- RTMP_H265推流直播技术研讨
- vs2010 ffmpeg实时解码h264码流
- 海思rtp封包发送
- Qt基于FFmpeg播放本地 H.264H264文件
- 从ffmpeg中抽取的h264解码器,可用于
- ffmpeg解码sdl播放h264
- 使用ffmpeg将多张图片生成H264裸流并获
- ffmpeg h264 转换jpg
- ffmpeg_windows屏幕录制并编码成H264
- ffmpeg封装H264成MP4、AVI视频格式,及提
- H264实时编码RTSP直播
- h264经典学习指南书籍
- rtmp流播放工具
- h264裸流文件
- 内存H264+PCM发布rtmp.rar
- .h264文件裸流制作与播放
- rtsp-h264.zip
- 使用gpac封装MP4源码(新)
- 视频压缩编码H.264源代码
- smartprinter3.6免注册
- H.264标准文档中文完整版
- 使用ffmpeg api解码h264视频码流,并且能
- H264流转为AVI文件
评论
共有 条评论