Сегодня мы поделимся еще одним проектом с открытым исходным кодом. Этот проект кода считывает локальные файлы TS, а затем отправляет их на RTMP-сервер.
Функция этого фрагмента кода — открыть локальный файл ts.,Функция avformat_open_input — открывать локальные файлы потокового мультимедиа.,и получитьtsОсновная информация о потоковых файлах。и использоватьavformat_find_stream_infoПроверьте информацию о файле,Включает закодированную ширину и высоту.
Модуль вывода использует API avformat_alloc_output_context2 для инициализации и использует avio_open для открытия потока выходного файла ввода-вывода.
в соответствии сnb_streamsсоздатьAVStream,И используйте avcodec_parameters_copy, чтобы скопировать параметры кодирования и декодирования входного модуля в avstream вывода. В это время avstream вывода имеет параметры кодирования и декодирования входного модуля. И используйте avformat_write_header для инициализации заголовка модуля.
Этот фрагмент кода в основном использует API av_read_frame для чтения каждого кадра аудио- и видеоданных.,Затем используйте API av_packet_rescale_ts для преобразования базы времени. Это преобразование предназначено для переноса временной базы входного файла FFMPEG во временную базу выходного файла.,Временная база преобразования видео определяется частотой кадров.。Используется после завершения преобразования временной базы.av_interleaved_write_frameОтправьте преобразованные данные вRTMPсервер。
Когда нажатие завершено, ресурсы должны быть освобождены. API avformat_free_contex в основном освобождает ресурсы AVFormatContext, а avio_close в основном освобождает ресурсы AVIOContext. av_packet_free освобождает ресурсы пакета.
Давайте посмотрим на полный код: