如果我们需要用到网络功能,那么我们还是需要调用一下avformat_network_init
这个方法。
int avformat_network_init(void)
{
#if CONFIG_NETWORK
int ret;
ff_network_inited_globally = 1;
if ((ret = ff_network_init()) < 0)
return ret;
if ((ret = ff_tls_init()) < 0)
return ret;
#endif
return 0;
}
可以看到,首先是调用ff_network_init()
int ff_network_init(void)
{
#if HAVE_WINSOCK2_H
WSADATA wsaData;
#endif
if (!ff_network_inited_globally)
av_log(NULL, AV_LOG_WARNING, "Using network protocols without global "
"network initialization. Please use "
"avformat_network_init(), this will "
"become mandatory later.\n");
#if HAVE_WINSOCK2_H
if (WSAStartup(MAKEWORD(1,1), &wsaData))
return 0;
#endif
return 1;
}
可以看到,如果是非Windows 平台,其实什么实质的事情都没有做,如果是Windows 平台则需要特别的调用 WSAStartup()
函数去初始化Winsock 服务。这个是Window特有的行为。
再次调用ff_tls_init()
初始化tls库。
int ff_tls_init(void)
{
#if CONFIG_TLS_OPENSSL_PROTOCOL
int ret;
if ((ret = ff_openssl_init()) < 0)
return ret;
#endif
#if CONFIG_TLS_GNUTLS_PROTOCOL
ff_gnutls_init();
#endif
return 0;
}
如果编译选择是openssl则调用ff_openssl_init()
去完成openssl 的初始化。如果是GUN tls则调用ff_gnutls_init()
完成初始化。
到这avformat_network_init()
的使命就完成了。总结下来,如果需要用到加解密功能,的话,还是有用的。如果非windows平台又不需要用加解密功能。就其实不用管也无所谓了。