使用FFmpeg通过RTMP发送H.264编码流

时间:2016-11-15 06:56:54

标签: c++ ffmpeg rtmp x264

我跟着this将序列图像编码为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

这可能是一个普遍而实用的话题。但我在这里呆了好几天,真的需要一些相关的经验。谢谢!

1 个答案:

答案 0 :(得分:0)

查找关于libavformat的教程(比如dranger,google)或更简单,将h.264流写入stdio,然后将其传递给ffmpeg。