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

CSDN-CSDN社区-.NET技术-C#

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

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

楼主发表于: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后不知道应当如何进行播放,盼高手赐教。
 
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
回复次数: 2
  • ioly001用户头像
  • ioly001
  • (ioly)
  • 等 级:

#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函数进行合适转码
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐: [攒分贴]每日小知识
  • ioly002
  • (ioly002)
  • 等 级:

#2楼 得分:100回复于:2010-11-10 11:37:30
sps和pps在rtsp的describe回复中:sprop-parameter-sets=Z0KAMukCgSyA,aM48gA==,base64解码后获得参数数组
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐: 请大家说说Linq的缺点
相关问题
【流媒体新手】:如何使用jrtplib传输H.264的视频流? - 专题开发/技术/项 ...
用rtsp流媒体服务器,vlc播放器播放h264视频流,播放有问题- 专题开发/技 ...
   

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

你可能感兴趣的:(流媒体,H.264,RTP,FU-A,解码播放)