流媒体传输 JRTPLIB实现RTP/RTCP若干问题

akydx2 2012-07-24 03:13:53
先向各位大神问安:
本人毕设方向是关于流媒体的传输,但是之前并没有接触过这方面,加上手头资料并不丰富,看过后有如下几个问题一直困扰着我,望各位大神不吝赐教,先行拜谢。
看到一些文献后想直接使用JRTPLIB库进行实现(jrtplib-3.7.1),发送端通过RTP传输MPEG4码流至接收端,通过RTCP进行拥塞控制(打包方式、码率)。
问题:
1.关于接收端
固定模式是:
if (sess.GotoFirstSourceWithData()) {
do {
RTPPacket *pack;
pack = sess.GetNextPacket(); // 处理接收到的数据
delete pack;
} while (sess.GotoNextSourceWithData());
}
我测试过这程序,他不会一直等待接收RTP包,没有接收到后直接往下执行,所以需要加while(1)语句让他停留在此等待发送端发送数据。但是不知道需要在发送端发送什么数据让他知道码流发送完毕,跳出循环。
while(1){
if (sess.GotoFirstSourceWithData())
……
……
if( ???? )
break;
}
2. 关于 RTCP
介绍RTCP的资料更少,也可能是我看的太粗泛。
(1)RTCP包有好几种类型 SR, RR, SDES, BYE, APP 其中RR包是不是只由接收端往发送端发,而SR是不是只由发送端往接收端发;还是说不论是发送端还是接收端的RTCP包都有这些类型。
(2)在接收端需要接受RTP包进行处理同时在一定时间间隔内也要发送RTCP给发送端,这是不是表示需要开启两个线程? 想问各位大神讨要几个实例程序。
(3)关于RTCP的打包,RTCP的打包数据需要人为操作吗?还是说JRTPLIB 已经封装好了,直接调用?

本人诚心想各位请教,各位拉小弟一把。也欢迎正在弄这个同仁一起交流
邮箱: calvine_cuc@163.com
QQ : 332644260












...全文
813 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 11 楼 backylee 的回复:
JRTPLIB 接口里已经处理RTCP了,不需要管他了。
我只管使用rtp的发送数据,但是rtcp回复数据,该怎么去接受呢? 或者说是使用例程4一样的,循环getnextsource等来接受吗?那个怎么调用它呢。。
backylee 2014-02-18
  • 打赏
  • 举报
回复
JRTPLIB 接口里已经处理RTCP了,不需要管他了。
GDUTxin 2013-10-31
  • 打赏
  • 举报
回复
引用 9 楼 suojia 的回复:
蛋碎啊!example4里面没有rtcp!
没有的吗?不是发送和接收RTP的同时也会发送RTCP包的吗?菜鸟求大神回答!
suojia 2013-05-15
  • 打赏
  • 举报
回复
蛋碎啊!example4里面没有rtcp!
lodayang 2012-11-22
  • 打赏
  • 举报
回复
不知楼主解决了这个问题了没?能不能说一下RTCP发送和接收用到接口、流程?
markbank 2012-11-09
  • 打赏
  • 举报
回复
//將檔案分包傳送實例 char sdData[ByteInRtpPack+50]; ////每次傳送最大 BYTE 數 … for( ;; ) { nByte=fread(sdData, 1, ByteInRtpPack, pRtpTxFile); //從檔案中讀取 bytes 傳送 if( nByte!=ByteInRtpPack ) { //結束了 ret=pActRtp.SendPacket(sdData, nByte, 0,true,2); break; } else ret=pActRtp.SendPacket(sdData, ByteInRtpPack, 0,false,1); } //接收方記得判斷HasMarker .. if( pack->HasMarker() ) { //end of FRAME ….. } **如果網路線是直接以點對點方式連接, 那幾個範例的確可用(文宇/圖檔都可傳, 速度快…) **如果點對點的網路連接中間有switcher或router, 或許就牽涉到rtcp了, 我猜接收者可能要為switcher設備回ack 之類的訊號, hand-shakeing 可能是需要的)
miracle222 2012-07-26
  • 打赏
  • 举报
回复
看看协议吧。。。不过有些看不懂。
http://www.blogjava.net/amigoxie/archive/2009/08/04/289809.html

另外jrtplib是自己已经实现了rtcp发包了,至于怎么发的就不知道了,先编译一下里面的5个例子吧,example4好像就是有rtcp的,不过需要先配置jthread库。
akydx2 2012-07-26
  • 打赏
  • 举报
回复
自己顶 不能被阉掉了
akydx2 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

用库的话就不用管rtp,rtcp了
直接调用接口把一帧数据传进去,可以rtp自己分包。好像是这样
[/Quote]
那如果我想自己分包呢? 可以自己分包吗? 您能说的详细点吗
rightorwrong 2012-07-26
  • 打赏
  • 举报
回复
用库的话就不用管rtp,rtcp了
直接调用接口把一帧数据传进去,可以rtp自己分包。好像是这样
akydx2 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

看看协议吧。。。不过有些看不懂。
http://www.blogjava.net/amigoxie/archive/2009/08/04/289809.html

另外jrtplib是自己已经实现了rtcp发包了,至于怎么发的就不知道了,先编译一下里面的5个例子吧,example4好像就是有rtcp的,不过需要先配置jthread库。
[/Quote]
这几个例子都有编译,但是里面并没有提及到RTCP的内容啊? RFC3550我有看过,谢谢您的解答
UP 等待高手

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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