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

Posted

技术标签:

【中文标题】使用 FFmpeg 通过 RTMP 发送 H.264 编码流【英文标题】:Send H.264 encoded stream through RTMP using FFmpeg 【发布时间】:2016-11-15 06:56:54 【问题描述】:

我关注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】:

寻找有关 libavformat 的教程(如 dranger,google it)或更简单,将您的 h.264 流写入 stdio,然后将其通过管道传输到 ffmpeg。

【讨论】:

以上是关于使用 FFmpeg 通过 RTMP 发送 H.264 编码流的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg发送流媒体的命令(UDP,RTP,RTMP)

ffmpeg,rtmpdump和nginx rtmp实现录屏,直播和录制

RK3588实战:调用npu加速,yolov5识别图像ffmpeg发送到rtmp服务器

Windows使用Nginx+ffmpeg搭建RTMP服务器

ffmpeg - 通过 RTMP 连续文件流式传输

ffmpeg+nginx 实现rtsp转rtmp并通过nginx转发