关于RTP,音频、视频同步(200分)

cctime 2006-08-08 07:56:41
方案1:发送方先把音频和视频各自编码,再Mux成一个流,以RTP发送,接收方先Splitter,再各自解码分别播放;

方案2:音频、视频分别以RTP发送,接收方也分别接收并播放;

问题1:方案1的同步效果是不是更好?如果是,我用DirectShow的AVI Mux filter可以把音、视频mux,但是不知道如何Splitter?

问题2:如果用方案2,应该注意哪些问题,音视频帧数据中的时间戳和RTP包的时间戳需要处理吗?

问题3:按我的理解,音视频帧数据自身已经包含时间戳,播放时根据音视频帧数据中的时间戳就可以控制播放速度以及同步,那为什么还要RTP呢?最多也就是要排列一下数据包的顺序而已啊。

谁能帮我搞清楚这些问题,本贴100分,另有一贴是同一个问题还有100分。见:http://community.csdn.net/Expert/TopicView.asp?id=4933387
...全文
1743 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2006-08-23
  • 打赏
  • 举报
回复
那为什么还要RTP呢?最多也就是要排列一下数据包的顺序而已啊。
------------

RTP是个标准,
可以互通,当然你也可以不用这个标准自己做,他提供了一些保证QOS的数据,当然他自身不处理QOS

另外,现有的RTP开源协议栈一般是没组包功能的,需要自己写代码组包排序
「已注销」 2006-08-23
  • 打赏
  • 举报
回复
方案2吧,声音和视频通过时间戳来同步,
SnowOnSahara 2006-08-21
  • 打赏
  • 举报
回复
首先,RTP并不仅仅用来视音频同步。
其次,TFRC等功能也需要以RTP为基础实现。
如果要考虑自己应用程序的扩展性,最好根据规范来实现。
要是只想做个普通的应用或者验证的话,自己作作同步算法就可以了,没有必要进行RTP封装
stonesky 2006-08-20
  • 打赏
  • 举报
回复
哪个方案都是可行,只是你还没有理解同步问题
wangbangjie 2006-08-18
  • 打赏
  • 举报
回复
我没有具体做过这方面的coding,只能大概说一下。
1.方案一的同步效果比方案二好。
2.音视频帧数据中的时间戳和RTP包的时间戳都需要处理,rtp目的就是是提供时间信息和实现流同步,建议看rfc,了解一下原理。
3.当然,要是你能接受有延迟或波动的视频,或是网络够快,你也可以不需要rtp,直接udp。
cici2006 2006-08-16
  • 打赏
  • 举报
回复
学习
cctime 2006-08-15
  • 打赏
  • 举报
回复
ding2
cctime 2006-08-11
  • 打赏
  • 举报
回复
up
xiaojun789 2006-08-11
  • 打赏
  • 举报
回复
ding
cctime 2006-08-10
  • 打赏
  • 举报
回复
我被几个时间戳搞糊涂了!

最基本原则:发数据时,每个sample都设置正确的时间戳数据,接收播放时,根据每个sample里的时间戳进行同步。 ----- 是不是这样?

1、IMediaSample::GetTime() 据说是帧的播放时间, 包括开始结束;
2、IMediaSample::GetMediaTime() sample的data里的时间戳数据???
3、RTP中的时间戳;

问题1:时间戳1不在sample的data里吧?把pSample->GetPointer()得到的数据发出去之后这个时间戳信息就没了吧?

问题2:发送时,我到底如何设置时间戳,用哪个值(GetTime得到的time_start还是time_end?还是其他值?),设置在哪里(调用SetMediaTime()设,还是调用RTP的函数设置到RTP包里?还是其他?),接收时如何恢复?

问题3:我的发送filter以什么频率发送sample数据?只要capture到一个sample就发出去?capture filter可以设置这个采集速度的吧?

问题4:RTP的时间单位怎么设置?
justin108 2006-08-10
  • 打赏
  • 举报
回复
建议LZ看看时间戳
constantine 2006-08-10
  • 打赏
  • 举报
回复
如果要求不挑剔的话用2,然后以音频为主,以时间戳判断,视频的如果不同步的进行调整,比如慢的直接丢弃
cctime 2006-08-09
  • 打赏
  • 举报
回复
不错,我想也是这样,那RTP有什么优势?期待......
StreamMedia 2006-08-09
  • 打赏
  • 举报
回复
首先需要明确,音视频的同步和发送方式关系不大……
只需要保证,以时间戳为同步条件均匀的发送音频和视频数据就成
因此你说的第一种和第二种方法都适用,目前比较常见的WMS服务器就是音频视频用一个信道传输,通过RTP中的标识位来通知客户端到底是音频还是视频,但是这种方式要求你需要预先把音视频按照时间戳交织在一起……
出去,回来再继续……
cctime 2006-08-09
  • 打赏
  • 举报
回复
GraphEdit里 AVI Mux -> AVI Splitter 连不起来啊
DentistryDoctor 2006-08-09
  • 打赏
  • 举报
回复
先在GraphEdit中连通?
cctime 2006-08-08
  • 打赏
  • 举报
回复
你是指DirectShow自带的那个AVI Splitter吗?不行啊,video caputre->AVI Mux, audio capture->AVI Mux, 然后 AVI Mux --X--> AVI Splitter 连接不起来。不知道怎么回事。
其实AVI Mux也是安装预设置的一个时间间隔把音频数据视频数据混起来而已,是不是这样?

我的应用当然是先实时传输再实时播放了,如果音频视频数据里有时间戳,RTP包里又有时间戳,那是不是重复了?也就是说,如果在音频视频数据打上时间戳,那么不管如何传输,到达目的主机之后,播放器都是根据时间戳来播放?
wukuan 2006-08-08
  • 打赏
  • 举报
回复
如果要做同步,方案2不是很合适。方案一不需要非得合成avi啊,自己随便打个包就行了,非得avi的话,有avispliter可以用的。
你的应用到底是音视频的实时传输还是播放?侧重点会不一样的。rtp只是传输协议,偏重音视频实时传输的需要,如果你不想用他的时间戳那就不用就行了。

2,543

社区成员

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

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