@DanyaFantomas

[C++] Как получить размер и длительность аудиофайла по URL?

Есть ли библиотека, которая позволит независимо от протокола передачи аудиофайла (http/s, ftp) и, желательно, от его формата узнать его размер и длительность? Я использовал функцию BASS_StreamCreateURL из библиотеки BASS, но на Linux она не работает.
  • Вопрос задан
  • 253 просмотра
Пригласить эксперта
Ответы на вопрос 1
SerJook
@SerJook
кодер
Можно воспользоваться библиотекой 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);
}


Как показала практика, этот код не скачивает файл полностью, а лишь начальный кусок.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы