流媒体,H.264,RTP,FU-A,解码播放

收藏流媒体,H.264,RTP,FU-A,解码播放[问题点数:100分,结帖人:ioly001]

  • ioly001
  • (ioly)
  • 等 级:
  • 结帖率:

楼主发表于:2010-10-26 17:51:26
开发某实时视频浏览程序,使用RTSP握手后,设备向PC指定UDP端口回传FU-A封包的H.264视频数据,不知道如何进行解码。
交互过程如下(P:PC, D:设备):
P -> D:
DESCRIBE rtsp://192.168.0.13:554/h264.sdp?res=full&x0=0&y0=0&x1=352&y1=288 RTSP/1.0
Accept: application/sdp
Authorization: Basic YWRtaW46ODg4ODg4ODg=
User-Agent: H264TestClient
CSeq: 1

D -> P:
RTSP/1.0 200 OK
CSeq: 1
Cache-Control: no-cache
Content-Length: 234
Content-Type: application/sdp
x-Accept-Retransmit: our-retransmit
x-Accept-Dynamic-Rate: 1

v=0
o=channel0 37541 33321 IN IP4 192.168.0.13
s=h264.sdp
t=0 0
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=control:trackID=1
a=fmtp:96 packetization-mode=1;profile-level-id=428032;sprop-parameter-sets=Z0KAMukCgSyA,aM48gA==

P -> D:
SETUP rtsp://192.168.0.13:554/h264.sdp?res=full&x0=0&y0=0&x1=352&y1=288 RTSP/1.0
Transport: RTP/AVP/TCP;unicast;client_port=10000-10001;ssrc=0
User-Agent: H264TestClient
CSeq: 2

D -> P:
RTSP/1.0 200 OK
CSeq: 2
Cache-Control: no-cache
Session: 135514808124572
Transport: RTP/AVP;unicast;client_port=10000-10001;server_port=6970-6971

P -> D:
PLAY rtsp://192.168.0.13:554/h264.sdp?res=full&x0=0&y0=0&x1=352&y1=288 RTSP/1.0
Session: 135514808124572
Range: npt=0.000000-0.000000
User-Agent: H264TestClient
CSeq: 3

D -> P:
RTSP/1.0 200 OK
CSeq: 3
Session: 135514808124572
Range: npt=now-


至此rtsp握手成功,设备开始用UDP回传数据,每一个UDP包都是一个FU-A包(首12字节是RTP包头),如:
packet 1, length = 1472:
80 60 00 01 7A FD 74 05 
4B 0B B9 BE 7C 85 88 80 
15 40 34 23 14 00 04 52 
F5 26 E4 E4 E4 E4 E4 E4 
........

packet 2, length = 1472:
80 60 00 02 7A FD 74 05 
4B 0B B9 BE 7C 05 B2 A8 
3F 0B 0A 2F F4 FE DE 17 
C0 04 8A 1A 15 46 80 95
....
....

packet 5, length = 500:
80 E0 00 05 7A FD 74 05 
4B 0B B9 BE 7C 45 F5 AF 
F4 47 EA C1 4E 80 8C 3B 
3C EE 93 08 94 81 EE 09 
....

用VLC是可以直接连接并播放的。
目前问题是提取FU-A的payload后不知道应当如何进行播放,盼高手赐教。
 
 
#1楼 得分:0回复于:2010-11-10 11:32:55
自己摸索解决了,关键点如下:
1,将FU-A包根据rtp的包序号和FU-A的header字节,组成完整264帧;
2,判断帧类型如果是idr帧,需要在帧头加上sps和pps,格式为:
  起始码(0x00000001)+sps+起始码+pps+起始码+完整帧数据
3,帧末添加帧间分隔符“0x00, 0x00, 0x01, 0x09, 0x10”
4,使用网上精简过的"ff_264_dec_vc"进行解码。该项目不支持imgconvert,可从最新ff源码查找
  并拷贝yuv420p_to_xxx函数进行合适转码
 
#2楼 得分:100回复于:2010-11-10 11:37:30
sps和pps在rtsp的describe回复中:sprop-parameter-sets=Z0KAMukCgSyA,aM48gA==,base64解码后获得参数数组
 
  

公司简介| 招贤纳士| 广告服务| 银行汇款帐号| 联系方式| 版权声明| 法律顾问| 问题报告
北京创新乐知信息技术有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
江苏乐知网络技术有限公司 提供商务支持
Email:webmaster@csdn.net
Copyright © 1999-2011, CSDN.NET, All Rights Reserved
GongshangLogo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值