ffserver rtp over udp问题

lemonlinger 2013-10-18 02:53:03
用ffserver搭建了rtsp服务,服务搭在了公网上,目前已经解决了因为nat转换问题,需要更新client port的问题。使用vlc或者三星的手机可以在SETUP以后收到client发过来的UDP打洞包,但是使用htc及其他的android手机却没有收到,但是在请求其他的rtsp服务的时候,同一款htc手机却收到了UDP打洞包。
我的问题是:是不是ffserver的配置或者哪个地方的代码需要修改才可以让android手机的视频播放器主动发送udp的打洞包?

如果哪位朋友也遇到过这个问题,应该能明白我的意思。
...全文
342 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lemonlinger 2013-10-18
  • 打赏
  • 举报
回复
无奈之下去看了android关于rtsp部分的源码,在这里找到了答案 https://github.com/xdtianyu/android-4.2_r1/blob/master/frameworks/av/media/libstagefright/rtsp/MyHandler.h 大家看第295行就知道了,原来android要求rtcp port = rtp port + 1,否则就不发送 nat打洞的包了,其实ffserver的代码本意也是rtcp_port = rtp_port + 1,(我是使用的ffmpeg 2.0.1)正好ffserver在rtp_open函数里面有一个bug导致没有使得rtcp_port = rtp_port + 1(见代码https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/rtpproto.c 第336行附近)所以, 作如下修改:

build_udp_url(buf, sizeof(buf),                                           
              hostname, rtp_port, local_rtp_port, ttl, max_packet_size,
              connect);
if (ffurl_open(&s->rtp_hd, buf, flags, &h->interrupt_callback, NULL) < 0) 
    goto fail;
local_rtp_port = ff_udp_get_local_port(s->rtp_hd);
if (local_rtp_port>=0 && local_rtcp_port<0) {
    local_rtcp_port = local_rtp_port + 1;         
}   

2,543

社区成员

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

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