Можно воспользоваться библиотекой
ffmpeg. Для этого эта библиотека должна быть собрана с поддержкой сети. Для соединений https нужно собрать с поддержкой openssl.
Вот приблизительный код, который получает длительность и размер файла:
extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
}
...
const char *url = "http://localhost/test.mp3";
AVFormatContext *pFormatCtx = NULL;
int ret = avformat_open_input(&pFormatCtx, url, NULL, NULL);
if (ret >= 0) {
avformat_find_stream_info(pFormatCtx, NULL);
int seconds = (pFormatCtx->duration / AV_TIME_BASE);
int64_t size = avio_size(pFormatCtx->pb);
avformat_close_input(&pFormatCtx);
avformat_free_context(pFormatCtx);
}
Как показала практика, этот код не скачивает файл полностью, а лишь начальный кусок.