一些有用的对话信息,并在自己的工程中得到了验正是可行的

文章讨论了在使用live555接收H.264 RTP视频流时,从SPS帧中解析出视频宽高的方法,并通过实例代码展示了遇到的问题及解决方案。此外,作者分享了将live555接收模块封装成DShow接收滤镜的经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#80楼 得分:0回复于:2009-10-28 13:47:56
我是楼主,自己再来顶一下..

最近在调试Streaming Client端的程序,使用live555接收streaming server传输过来的h.264 rtp视频流,然后解码,播放.
现在live555的rtp数据接收基本上是可以了,不过在解码这块还有点小问题,想问一下: 如何从SPS帧里解析出video width and height呢?
部分代码如下: 
/*
 parse SPS for extract video width and height....
*/
if(naltype == 7) {
  unsigned char* data = &_pcbdata[4];
  int len = 0;
  int val = 0x00;
  int bitoffset = 0;

  val = _get_ue(data, 64, bitoffset, &len);
  bitoffset += len;
  val = _get_ue(data, 64, bitoffset, &len);
  bitoffset += len;
  val = _get_ue(data, 64, bitoffset, &len);
  if(val == 0) {
  bitoffset += len;
val = _get_ue(data, 64, bitoffset, &len);
  } else if(val == 1) {
return ;
  } else {
// don't anything
}
  bitoffset += len;
  val = _get_ue(data, 64, bitoffset, &len);
  // gaps_in_frame_num_value_allowed_flag bit
  bitoffset ++;
  // get width
  bitoffset += len;
  val = _get_ue(data, 64, bitoffset, &len);
  m_nWidth = (val + 1)*16;
  if(m_nWidth==144)
m_nWidth=176;
  _ptHdr->nWidth = m_nWidth;
  _ptHdr->cSeqLow = m_cbSeqLow;
  // get height
  bitoffset += len;
  val = _get_ue(data, 64, bitoffset, &len);
  m_nHeight = (val + 1)*16;
  if(m_nHeight==128)
m_nHeight=120;
  _ptHdr->nHeight = m_nHeight;
}
编码端的参数设置为720*480,怎么我执行这段代码从SPS里解析出来的video width and height为608*480呢?
请各位高手给小弟答疑啊!..
 
#81楼 得分:0回复于:2009-10-31 09:58:46
自己来up,不能让这个帖子沉了啊!

上面的问题基本上搞清楚了.其实不用俺根据SPS去计算video width and height这么麻烦,直接用ffmpeg就可以了. 
nGet = avcodec_decode_video(pDCodecCtx,frame,&frameFinished, pSourceBuffer,dwSrcLength);
在调用这个前,pDCodecCtx->width和pDCodecCtx->height不用去赋值,avcodec_decode_video执行完后,ffmpeg会自己将video width and height计算出来.
只是如果是要写成一个DShow decoder filter,pDCodecCtx->width和pDCodecCtx->height如果不事先赋值,decoder filter的pinout无法连接video render,会报错. 好像是dshow filter架构里有这样的要求?

现在我已经用live555搭建起了一个streaming server,可以发送和接收h.264的视频,并能正常的解码播放出来.目前我想把PC端的live555接收h.264网络视频流这部分封装成一个dshow receive filter(source filter),不知道有没有哪位高人做过这方面的工作? 给小弟我一些指点啊~!
我想参照 DXSDK90A\Samples\C++\DirectShow\Filters\DSNetwork 这个sample进行修改,不过感觉代码写得很复杂,比较庞大... 不知道哪位大虾有没有关于介绍source filter架构的资料? 貌似DirectX SDK DOC里没这方面详细的说明..?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值