★★★★★ testRTSPClient.cpp 的学习 live555 ★★★★★ 时间戳和264 aac输出方法
来源:互联网 发布:电脑系统优化软件知乎 编辑:程序博客网 时间:2024/06/05 16:54
2013-04-26 16:05:21| 分类:LIVE555 | 标签:|字号大中小 订阅
// Request the next frame of data from our input source. "afterGettingFrame()" will get called later, when it arrives:
fSource->getNextFrame(fReceiveBuffer, DUMMY_SINK_RECEIVE_BUFFER_SIZE,
afterGettingFrame, this,
onSourceClosure, this);
//这里是请求得到一帧数据,成功后会调用下面的函数
void DummySink::afterGettingFrame(unsigned frameSize, unsigned numTruncatedBytes,
struct timeval presentationTime, unsigned /*durationInMicroseconds*/)
framesize是长度
保存裸码流的过程如下
//add by ralf 20130425
//处理接收到得码流数据
fwrite(bufPreFix,4,1,m_fileH264);
fwrite(fReceiveBuffer,frameSize,1,m_fileH264);
________________________________________________________________________________________
Live555是可以用VC编译的。他的例子程序testRTSPClient.cpp,可以让我们了解客户端调用过程。很轻易的,就能得到rtspserver返回的每帧数据。
afterGettingFrame音频、视频是一个线程,presentationTime就是时间戳。
- 音视频输出:
视频:是H264编码,据说在得到帧数据头加“00 00 00 01”字节,ffshow就可以解码;还有一个说法,在“00 00 00 01”之后,还要把格式信息的扩展数据放进去。我用的是后者。
音频:是AAC,直接把数据送到thunder或realaudio的音频解码器,就放出来了。 - 音视频同步:
afterGettingFrame的presentationTime就是时间戳。转成directshow需要的:
REFERENCE_TIME t = pt.tv_sec;
t *= 1000000;
t += pt.tv_usec;
REFERENCE_TIME st = t;
REFERENCE_TIME et = st + 4000;//视频,t每次差值得到
REFERENCE_TIME et = st + 23219;//音频,t每次差值得到
也有人说,可以根据媒体信息计算出来,我也确信。但确实没有找到计算方法,看到计算方法的可以回复一下儿。
上面数据填写正确了,音视频就是同步的。
- 花屏、延迟:放一阵子就会花屏、延迟。
pSamp->SetSyncPoint(TRUE);不要设,设了就是花屏,延迟了。还有一个SetDiscontinuity也不知道具体用途。
- directshow filter的状态和锁定。
STDMETHODIMP CRtspSourceFilter::GetState(DWORD dw, FILTER_STATE *pState)
{
CheckPointer(pState, E_POINTER);
*pState=m_State;
if(m_State==State_Paused){
return VFW_S_CANT_CUE;
}else{
return S_OK;
}
}
——————————————————————————————————————————————————————
源:http://bdbaishitong.blog.163.com/blog/static/20149308020133264521416/
- ★★★★★ testRTSPClient.cpp 的学习 live555 ★★★★★ 时间戳和264 aac输出方法
- LIVE555再学习 -- testRTSPClient 实例
- LIVE555再学习 -- testRTSPClient 源码分析
- live555--testRTSPClient学习心得
- Live555学习之(五)------live555ProxyServer.cpp的学习
- live555 server 数据流发送流程和时间戳的分析
- live555 h264 videostream 数据流和时间戳的分析
- 庖丁解牛-----Live555源码彻底解密(testRTSPClient流程图)
- live555 使用testRTSPClient 接收h264记录
- Live555源码彻底解密(根据testRTSPClient讲解)
- live555里的rtp时间戳算法
- ★空间、时间加倍 C/C++
- AAC音频裸码流时间戳与时间长度的关系
- AAC音频裸码流时间戳与时间长度的关系
- ★★★同时支持iexplorer和firefox的javascript复制拷贝信息到剪贴板方法
- NSLog不输出时间戳的方法
- 【IOS 开发学习总结-OC-26】★★★objective-c——foundation 框架之日期与时间
- live555学习笔记12-h264 rtp包的时间戳
- hdu 1540 Tunnel Warfare 线段树
- Android中处理崩溃异常
- 实时系统HBase读写优化--大量写入无障碍
- iometer
- Java学习笔记44:常用集合使用
- ★★★★★ testRTSPClient.cpp 的学习 live555 ★★★★★ 时间戳和264 aac输出方法
- db2分页的sql
- Android 代码名字-版本号-API级别-NDK版本对应关系
- tomcat javaweb(实验二 使用JSP处理客户端请求)
- hdu2844 Coins
- 怎样成为一个好的程序员
- iOS开发工具:Alcatraz、SVGKit、Lin以及Transformifier等
- 入门经典 例题9-2 嵌套矩阵
- 土豆视频外部调用无广告播放器代码