ffmpeg rtsp转rtmp推流命令

ffmpeg rtsp转rtmp推流命令

ffmpeg -i rtsp://admin:sun12345@127.0.0.1:554/h264/ch1/sub/av_stream -vcodec copy -acodec copy -f flv rtmp://127.0.0.1:1935/live/123

默认使用udp推流:

ffmpeg -i “rtsp://admin:cmable8888@192.168.70.6:554/cam/realmonitor?channel=1&subtype=0” -f flv -r 25 -s 1920*1080 -an “rtmp://192.168.91.107/oflaDemo/cm192_168_70_6”

使用tcp推流:

ffmpeg -rtsp_transport tcp -i “rtsp://admin:cmable8888@192.168.70.6:554/cam/realmonitor?channel=1&subtype=0” -f flv -r 25 -s 1920*1080 -an “rtmp://192.168.91.107/oflaDemo/cm192_168_70_6”

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!以下是一个简单的示例代码,用于将RTSP发到RTMP服务器: ```cpp #include <iostream> #include <cstdlib> #include <cstring> #include <unistd.h> #include <libavformat/avformat.h> #include <libavutil/opt.h> int main(int argc, char* argv[]) { // 注册所有的FFmpeg组件 av_register_all(); // 创建输入上下文 AVFormatContext* inputContext = avformat_alloc_context(); // 打开RTSP if (avformat_open_input(&inputContext, "rtsp://your_rtsp_url", nullptr, nullptr) != 0) { std::cerr << "无法打开RTSP" << std::endl; return -1; } // 查找信息 if (avformat_find_stream_info(inputContext, nullptr) < 0) { std::cerr << "无法获取信息" << std::endl; return -1; } // 创建输出上下文 AVFormatContext* outputContext = avformat_alloc_context(); // 设置输出格式为RTMP AVOutputFormat* outputFormat = av_guess_format("flv", nullptr, nullptr); outputContext->oformat = outputFormat; // 打开输出URL if (avio_open(&outputContext->pb, "rtmp://your_rtmp_url", AVIO_FLAG_WRITE) < 0) { std::cerr << "无法打开RTMP URL" << std::endl; return -1; } // 遍历输入 for (unsigned int i = 0; i < inputContext->nb_streams; i++) { AVStream* inputStream = inputContext->streams[i]; AVStream* outputStream = avformat_new_stream(outputContext, inputStream->codec->codec); // 复制参数 if (avcodec_copy_context(outputStream->codec, inputStream->codec) < 0) { std::cerr << "无法复制参数" << std::endl; return -1; } outputStream->codec->codec_tag = 0; if (outputContext->oformat->flags & AVFMT_GLOBALHEADER) { outputStream->codec->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; } } // 写入输出头部 if (avformat_write_header(outputContext, nullptr) < 0) { std::cerr << "无法写入输出头部" << std::endl; return -1; } // 数据 AVPacket packet; while (av_read_frame(inputContext, &packet) >= 0) { AVStream* inputStream = inputContext->streams[packet.stream_index]; AVStream* outputStream = outputContext->streams[packet.stream_index]; // 设置时间基 av_packet_rescale_ts(&packet, inputStream->time_base, outputStream->time_base); packet.pos = -1; // 写入输出 if (av_interleaved_write_frame(outputContext, &packet) < 0) { std::cerr << "无法写入输出" << std::endl; break; } av_packet_unref(&packet); } // 写入输出尾部 av_write_trailer(outputContext); // 清理资源 avformat_close_input(&inputContext); avio_close(outputContext->pb); avformat_free_context(outputContext); return 0; } ``` 请注意,这只是一个简单的示例代码,用于演示如何使用FFmpegRTSP发到RTMP服务器。你需要根据自己的需求进行适当的修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值