如果使用openssl, 需要降级 ssl 至 1.0 版本
https://blog.csdn.net/sjp1992/article/details/109161573
问题 HMAC_CTX ctx
出现上述问题的原因是openssl版本太新,和当前rtmp版本不兼容,需要降低openssl版本,我这使用的是openssl1.1.1版本,降低到了openssl1.0版本。直接执行以下语句安装即可降低openssl版本:
可能要先去除掉高版本
sudo apt remove libssl-dev
sudo apt install libssl1.0-dev
如果使用guntls, 需要修改 两个MakeFile , 改为 gnutls
sudo apt install libgnutls28-dev libgnutls30
librtmp 在网络中断时存在的崩溃 问题和阻塞问题解决
1. 崩溃问题
Linux下send()函数发送数据卡死问题_wojiaxiaohuang2014的博客-CSDN博客
int
RTMPSockBuf_Send(RTMPSockBuf *sb, const char *buf, int len)
{
int rc;
#ifdef _DEBUG
fwrite(buf, 1, len, netstackdump);
#endif
#if defined(CRYPTO) && !defined(NO_SSL)
if (sb->sb_ssl)
{
rc = TLS_write(sb->sb_ssl, buf, len);
}
else
#endif
{
rc = send(sb->sb_socket, buf, len, MSG_NOSIGNAL); // CHANGE BY wanghao , flags from 0 to MSG_NOSIGNAL
}
return rc;
}
2. 阻塞问题设置超时时间
int
RTMP_Connect0(RTMP *r, struct sockaddr * service)
{
....
struct timeval timeout={5,0};//5s // CHANGE BY WH , add send timeout
int setsocketoptret = setsockopt(r->m_sb.sb_socket, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout));
if (setsocketoptret < 0 )
{
RTMP_Log(RTMP_LOGERROR, "%s, Setting socket timeout to %d s failed!",
__FUNCTION__, 5);
}
....
}