Отправка закодированного потока H.264 через RTMP с использованием FFmpeg

Я последовал за этот кодировать последовательности изображений в видео h.264.

Вот вывод части моего кода:

int srcstride = outwidth*4;
sws_scale(convertCtx, src_data, &srcstride, 0, outheight, pic_in.img.plane, pic_in.img.i_stride);
x264_nal_t* nals;
int i_nals;
int frame_size = x264_encoder_encode(encoder, &nals, &i_nals, &pic_in, &pic_out);
if (frame_size) {
fwrite(nals[0].p_payload, frame_size, 1, fp);
}

Это в цикле для обработки кадров и записи их в файл.

Теперь я пытаюсь передать эти закодированные кадры через RTMP. Как я знаю, контейнером для RTMP является FLV. Поэтому я использовал командную строку в качестве пробной версии:

ffmpeg -i test.h264 -vcodec copy -f flv rtmp://localhost:1935/hls/test

Этот работает хорошо как потоковое видео в кодировке h.264.

Но как я могу реализовать его в виде кода C ++ и передавать кадры одновременно, когда они генерируются, точно так же, как я делал это для потоковой передачи своей камеры Facetime.

ffmpeg -f avfoundation -pix_fmt uyvy422  -video_size 1280x720 -framerate 30 -i "1:0" -pix_fmt yuv420p -vcodec libx264 -preset veryfast -acodec libvo_aacenc -f flv -framerate 30 rtmp://localhost:1935/hls/test

Это может быть общей и практической темой. Но я застрял здесь на несколько дней, действительно нужно немного опыта. Спасибо!

2

Решение

Ищите учебники по libavformat (например, dranger, google it) или проще, запишите свой поток h.264 в stdio, а затем направьте его в ffmpeg.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]