这个系列主要是写关于用FFmpeg来拉取直播流时,会涉及到的优化项,可作为优化的实践。虽然是针对的直播,但对于点播的播放比如直接播放mp4的流,还是有一样的原理。
什么是ip拉流?
ip拉流就是指将拉流url里面的域名,比如http://flv-meipai.8686c.com/live/59c3507b20a05d24f928d6cf.flv
里面的flv-meipai.8686c.com
预先用第三方dns库解析出来,然后直接替换掉,例如http://1.1.1.1/live/59c3507b20a05d24f928d6cf.flv
这样的url,传给ffmpeg来拉流播放。
为什么要用ip拉流?
如果没有替换ip,那么在ffmpeg中的tcp.c文件中,tcp_open方法会调用getaddrinfo
方法进行dns的请求和解析。具体代码如下:
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
snprintf(portstr, sizeof(portstr), "%d", port);
if (s->listen)
hints.ai_flags |= AI_PASSIVE;
int64_t start = av_gettime();
if (!hostname[0])
ret = getaddrinfo(NULL, portstr, &hints, &ai);
else
ret = getaddrinfo(hostname, portstr, &hints, &ai);
int64_t end = av_gettime();
struct sock