美文网首页
iOS ijkplayer rtsp 相同ip 地址播放问题

iOS ijkplayer rtsp 相同ip 地址播放问题

作者: 不重要_879c | 来源:发表于2020-04-03 09:20 被阅读0次

最近公司需要使用到流播放就选了bibili 的ijkplayer 库,之前播放rtmp 没什么问题。后来公司需要使用rtsp协议进行播放。使用ijkplayer 库播放,相同ip下不同端口。ijk播放的都是第一次播放的地址。

为了解决这个问题,查找了一些资料。原来是ffmpeg 的tcp连接上使用了域名来做缓存,最后修改成域名加端口做缓存才解决这个问题

1.可以直接替换库

https://github.com/huangzhentong/ijkplayerDNSFramework.git

2。可以自己制作库

参照

https://www.jianshu.com/p/9743a68c2939

在编译 ffmpeg库之前先修改缓存代码

在iOS->ffmpeg-arm64 ->libavformat 文件下找到tcp.c文件夹 

找到tcp_open  及 tcp_fast_open方法 直接搜索  get_dns_cache_reference 方法  将下面代码替换

if(s->dns_cache_timeout >0) {

    memcpy(hostname_bak, hostname,1024);

    if(s->dns_cache_clear) {

        av_log(NULL, AV_LOG_INFO,"will delete cache entry, hostname = %s\n", hostname_bak);

        remove_dns_cache_entry(hostname);

    }else{

        dns_entry = get_dns_cache_reference(hostname);

    }

}

替换成

if(s->dns_cache_timeout >0) {

    memcpy(hostname_bak, hostname,1024);

    strcat(hostname_bak, portstr);

    if(s->dns_cache_clear) {

        av_log(NULL, AV_LOG_INFO,"will delete cache entry, hostname = %s\n", hostname_bak);

        remove_dns_cache_entry(hostname_bak);

    }else{

        dns_entry = get_dns_cache_reference(hostname_bak);

    }

}

其他几个ffmpeg 文件夹也要做同样的步骤 

把所有的tcp.c文件修改完再 # 编译ffmpeg

./compile-ffmpeg.sh all

编译完再打包framework

相关文章

网友评论

      本文标题:iOS ijkplayer rtsp 相同ip 地址播放问题

      本文链接:https://www.haomeiwen.com/subject/fbucphtx.html