资源简介
简单实现RTSP, RTP, RTCP收发功能,可用于基础入门的学习研究。由于只是闲时兴趣随意花2星期凑出实现,代码及功能并非完善,只是能够多路VLC及MPLAYER作为客户端同时播放。
代码片段和文件信息
#include
#include “CMediaSession.h“
#define PRE_PARSE_frame (50)
CMediaSession::CMediaSession(std::string strFileName)
{
m_strFileName = strFileName;
m_fpFile = NULL;
m_pBuf = NULL;
m_u32BufLen = 1 * 1024 * 1024;
}
CMediaSession::~CMediaSession()
{
Stop();
}
BOOL CMediaSession::GetMediaInfo(MediaInfo_t *pMediaInfo)
{
ASSERT(pMediaInfo);
pMediaInfo->stVideoInfo.eType = StreamType_H264;
strcpy(pMediaInfo->stVideoInfo.strStreamType “H264“);
pMediaInfo->stVideoInfo.u32frameRate = 25;
strcpy(pMediaInfo->acFileName “Bibubibu“);
pMediaInfo->bHaveVideo = TRUE;
pMediaInfo->bHaveAudio = FALSE;
return TRUE;
}
BOOL CMediaSession::GetframeInfoByCSeq(frameInfo_t &stFrmInfo INT32 s32FrmIdx)
{
FrmInfo_t stFrm;
INT32 s32Offset = 0;
std::map::iterator iter;
memset(&stFrm 0x0 sizeof(stFrm));
///printf(“s32FrmIdx:%d\n“ s32FrmIdx);
iter = m_mapFrmInfo.find(s32FrmIdx - 1);
if (iter != m_mapFrmInfo.end())
{
FrmInfo_t *p = NULL;
p = &(iter->second);
s32Offset = p->u32Offset + p->u32Len;
}
if (!findNextNalu(stFrm s32Offset))
{
printf(“can‘t find nalu error\n“);
return FALSE;
}
stFrmInfo.pframe = m_pBuf + stFrm.u32Offset - s32Offset;
stFrmInfo.s32frameSize = stFrm.u32Len;
stFrmInfo.s8NaluType = stFrm.s8NaluType;
stFrmInfo.s32StreamType = H264;
iter = m_mapFrmInfo.find(s32FrmIdx);
if (iter == m_mapFrmInfo.end())
{
if (m_listFrmKey.size() >= PRE_PARSE_frame)
{
m_mapFrmInfo.erase(m_listFrmKey.front());
m_listFrmKey.pop_front();
}
m_listFrmKey.push_back(s32FrmIdx);
}
m_mapFrmInfo.insert(std::pair(s32FrmIdx stFrm));
return TRUE;
}
BOOL CMediaSession::findNextNalu(FrmInfo_t &stFrmInfo INT32 &s32Offset)
{
INT32 s32RLen = 0;
INT32 s32Pos = 0;
ASSERT(m_fpFile);
///printf(“s32Offset:0x%x\n“ s32Offset);
fseek(m_fpFile s32Offset SEEK_SET);
s32RLen = fread(m_pBuf 1 m_u32BufLen m_fpFile);
///ASSERT(s32RLen > 0);
///TODO:replace END MSG
if (s32RLen <= 0)
{
s32Offset = 0;
fseek(m_fpFile s32Offset SEEK_SET);
s32RLen = fread(m_pBuf 1 m_u32BufLen m_fpFile);
ASSERT(s32RLen > 0);
}
while ((s32Pos + 2) < m_u32BufLen)
{
if ( (m_pBuf[s32Pos] == 0x00)
&& (m_pBuf[s32Pos + 1] == 0x00)
&& (m_pBuf[s32Pos + 2] == 0x01)
)
{
stFrmInfo.u32Offset = s32Offset + s32Pos + 3;
stFrmInfo.s8NaluType = m_pBuf[s32Pos + 3] & 0x1F;
break;
}
else if ( (m_pBuf[s32Pos] == 0x00)
&& (m_pBuf[s32Pos + 1] == 0x00)
&& (m_pBuf[s32Pos + 2] == 0x00)
&& (m_
相关资源
- 支持高版本谷歌播放rtsp的插件vxg me
- rtsp 服务器代码,VC可编译使用,RTS
- RTSP流媒体客户端播放器demo
- FLV测试文件,亲身验证,用过VLC可以
- RTSP_RFC2326(中文版).pdf
- zw_csharp_ffmpeg_rtsp_demo.zip
- DDS-RTPS 实时发布订阅协议 DDS互操作协
- h264码流rtp传输demo
- ActiveX RTSP实时流媒体播放器 支持录像
- onvif rtsp流对接
- VLC播放RTSP流
- 获取摄像头ip与视频流
- linux 使用jrtplib收发h.264视频文件
- rtsp_server C 源码详解与分析
- live555 RTSP RTCP RTP。live555类关系图,
- A10-rtsph264_硬件编码.zip
- udp码流接收录制工具
- H264流媒体RTP打包源代码和相关资料
- SmartPrinter3.6破解版(附带命令行与批
- ONVIF RTSP查看助手
- linux+QT下基于RTP协议的实时视频传输客
- 基于ARM的嵌入式网络视频监控系统的
- PowerTCP Telnet for .NET 4.4.5 破解去除试用
-
rtspPla
yer.rar - GB28181转RTSP、RTMP和HLS
- 微积分_Stewart_第六版Calculus6th edition
- 接收RTP包保存为h264文件
- RTSP视频播放器
- H264编解码rtp发送
- 海康webcomponents最新版64位,32位内附各
评论
共有 条评论