如何识别一个数据包是视频数据包

qqzijin 2010-02-04 05:30:08
用ethereal捕获本机的数据包,但如何判断是不是视频数据包呢?
有些流媒体传输时采用了rtp/rtcp协议,可以从协议上判断是视频(或音频)数据包;但有些可以传输时直接使用了http协议,或者直接使用了udp协议,遇到这种情况,该如何判断是否为视频数据包?

我的想法:找出现有的视频数据压缩格式(如AVI、MPEG-4、H.23X)的关键字,根据这些关键字进行匹配,但这些压缩格式有关键字吗?那这些关键字到底是什么呢?

谢谢!
...全文
315 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
steptodream 2010-02-05
  • 打赏
  • 举报
回复
其实我不会
qqzijin 2010-02-05
  • 打赏
  • 举报
回复
如果视频数据包,不是用的RTP/RTCP协议呢
比方说,直接用的UDP、TCP或者http,那又如何识别是不是视频数据包呢?
happybeginner 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qqzijin 的回复:]
如果视频数据包,不是用的RTP/RTCP协议呢
比方说,直接用的UDP、TCP或者http,那又如何识别是不是视频数据包呢?
[/Quote]

那就从RAW包开始分析, 先看是不是已知的udp/tcp/http/rtp的包头格式, 判定是个已知协议的包然后再去解析payload部分是不是视频包. 就是说你的程序要先自己training一下, 体力活呀.
happybeginner 2010-02-04
  • 打赏
  • 举报
回复
除去RTP的头之后,如果是个视频包, 前4个byte(假设指针为pbuffer)就会有它的编码信息, 后四个byte是I帧和P帧的信息.
给你看几行代码:
if((pbuffer & 0x3fcffff) == 0x2800000 ) { //decode H263 bit stream
////H263
}else{
////MPEG-4
}
.....

if((((pbuffer & 0x3fcffff) == 0x2800000)&&(((pbuffer+4) & 0x2) == 0x2/*not I-frame?*/))||(head_mpeg_h263 == 0xb6010000)) {//the frame is a P-frame of H263 or a I/P-frame of mpeg
{
//////////P 帧
}else if((((pbuffer & 0x3fcffff) == 0x2800000)&&(((pbuffer+4) & 0x2) == 0)/* I-frame?*/)||(pbuffer == 0x00010000)) {
/////////I帧

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧