精华内容
下载资源
问答
  • ffmpeg rtsp转 rtmp

    千次阅读 2019-04-25 20:32:19
    const char *outUrl = "rtmp://192.168.136.131/live/test"; ////////////////////////////////////////////////////////////////// // 输入流处理部分 /////////////////////////////////////////////////////...

    原文:https://www.jianshu.com/p/69eede147229

    #include <iostream>
    using namespace std;
    //引入头文件
    extern "C"
    {
    #include "libavformat/avformat.h"
        //引入时间
    #include "libavutil/time.h"
    }
    //引入库
    #pragma comment(lib,"avformat.lib")
    //工具库,包括获取错误信息等
    #pragma comment(lib,"avutil.lib")
    //编解码的库
    #pragma comment(lib,"avcodec.lib")
    
    int avError(int errNum);
    
    static double r2d(AVRational r)
    {
        return r.num == 0 || r.den == 0 ? 0. : (double)r.num / (double)r.den;
    }
    int main() {
        //所有代码执行之前要调用av_register_all和avformat_network_init
        //初始化所有的封装和解封装 flv mp4 mp3 mov。不包含编码和解码
        av_register_all();
    
        //初始化网络库
        avformat_network_init();
    
        //使用的相对路径,执行文件在bin目录下。test.mp4放到bin目录下即可
        const char *inUrl = "test.flv";
        //输出的地址
        const char *outUrl = "rtmp://192.168.136.131/live/test";
    
        //
        //                   输入流处理部分
        /
        //打开文件,解封装 avformat_open_input
        //AVFormatContext **ps  输入封装的上下文。包含所有的格式内容和所有的IO。如果是文件就是文件IO,网络就对应网络IO
        //const char *url  路径
        //AVInputFormt * fmt 封装器
        //AVDictionary ** options 参数设置
        AVFormatContext *ictx = NULL;
    
        //打开文件,解封文件头
        int ret = avformat_open_input(&ictx, inUrl, 0, NULL);
        if (ret < 0) {
            return avError(ret);
        }
        cout << "avformat_open_input success!" << endl;
        //获取音频视频的信息 .h264 flv 没有头信息
        ret = avformat_find_stream_info(ictx, 0);
        if (ret != 0) {
            return avError(ret);
        }
        //打印视频视频信息
        //0打印所有  inUrl 打印时候显示,
        av_dump_format(ictx, 0, inUrl, 0);
    
        //
        //                   输出流处理部分
        /
        AVFormatContext * octx = NULL;
        //如果是输入文件 flv可以不传,可以从文件中判断。如果是流则必须传
        //创建输出上下文
        ret = avformat_alloc_output_context2(&octx, NULL, "flv", outUrl);
        if (ret < 0) {
            return avError(ret);
        }
        cout << "avformat_alloc_output_context2 success!" << endl;
        //配置输出流
        //AVIOcontext *pb  //IO上下文
        //AVStream **streams  指针数组,存放多个输出流  视频音频字幕流
        //int nb_streams;
        //duration ,bit_rate
    
        //AVStream
        //AVRational time_base
        //AVCodecParameters *codecpar 音视频参数
        //AVCodecContext *codec
        //遍历输入的AVStream
        for (int i = 0; i < ictx->nb_streams; i++) {
            //创建一个新的流到octx中
            AVStream *out = avformat_new_stream(octx, ictx->streams[i]->codec->codec);
            if (!out) {
                return avError(0);
            }
            //复制配置信息 用于mp4 过时的方法
            //ret=avcodec_copy_context(out->codec, ictx->streams[i]->codec);
            ret = avcodec_parameters_copy(out->codecpar, ictx->streams[i]->codecpar);
            if (ret < 0) {
                return avError(ret);
            }
            out->codec->codec_tag = 0;
        }
        av_dump_format(octx, 0, outUrl, 1);
    
        //
        //                   准备推流
        /
    
        //打开IO
        ret = avio_open(&octx->pb, outUrl, AVIO_FLAG_WRITE);
        if (ret < 0) {
            avError(ret);
        }
    
        //写入头部信息
        ret = avformat_write_header(octx, 0);
        if (ret < 0) {
            avError(ret);
        }
        cout << "avformat_write_header Success!" << endl;
    
        //推流每一帧数据
        //int64_t pts  [ pts*(num/den)  第几秒显示]
        //int64_t dts  解码时间 [P帧(相对于上一帧的变化) I帧(关键帧,完整的数据) B帧(上一帧和下一帧的变化)]  有了B帧压缩率更高。
        //uint8_t *data    
        //int size
        //int stream_index
        //int flag
        AVPacket avPacket;
        //获取当前的时间戳  微妙
        long long startTime = av_gettime();
        while (true)
        {
            ret = av_read_frame(ictx, &avPacket);
            if (ret < 0) {
                break;
            }
            cout << avPacket.pts << " " << flush;
            //计算转换时间戳 pts dts
            //获取时间基数
            AVRational itime = ictx->streams[avPacket.stream_index]->time_base;
            AVRational otime = octx->streams[avPacket.stream_index]->time_base;
            avPacket.pts = av_rescale_q_rnd(avPacket.pts, itime, otime, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_NEAR_INF));
            avPacket.dts = av_rescale_q_rnd(avPacket.pts, itime, otime, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_NEAR_INF));
            //到这一帧时候经历了多长时间
            avPacket.duration = av_rescale_q_rnd(avPacket.duration, itime, otime, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_NEAR_INF));
            avPacket.pos = -1;
            //视频帧推送速度
            if (ictx->streams[avPacket.stream_index]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
                AVRational tb = ictx->streams[avPacket.stream_index]->time_base;
                //已经过去的时间
                long long now = av_gettime() - startTime;
                long long dts = 0;
                dts = avPacket.dts * (1000 * 1000 * r2d(tb));
                if (dts > now)
                    av_usleep(dts - now);
                else {
                    cout << "sss";
                }
            }
            //推送  会自动释放空间 不需要调用av_packet_unref
            ret = av_interleaved_write_frame(octx, &avPacket);
            if (ret < 0) {
                break;
            }
            //视频帧推送速度
            //if (avPacket.stream_index == 0)
            //  av_usleep(30 * 1000);
            //释放空间。内部指向的视频空间和音频空间
            //av_packet_unref(&avPacket);
        }
        return 0;
    }
    
    int avError(int errNum) {
        char buf[1024];
        //获取错误信息
        av_strerror(errNum, buf, sizeof(buf));
        cout << " failed! " << buf << endl;
        return -1;
    }

     

    展开全文
  • ffmpeg rtsp转rtmp推流命令 默认使用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/...

    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”

    展开全文
  • nginx + ffmpeg rtsp rtmp

    2020-07-07 17:43:00
    1、下载nginx https://github.com/bzy880114/nginx-rtmp-win32-master 2、下载ffmpeg ...4、调用如下命令 rtsp rtmp流 必须开启nginx后再ffmpeg-re-rtsp_transport tcp -i "rtsp...

    全部下载地址

    https://download.csdn.net/download/androidwubo/12610387


    1、下载nginx


        https://github.com/bzy880114/nginx-rtmp-win32-master

     

    2、下载ffmpeg


        http://ffmpeg.org/download.html

     

    3、开启nginx  


        cd nginx  打开终端  输入 start nginx.exe


        
    4、调用如下命令  rtsp 转  rtmp流  必须开启nginx后再转流

     

    海康摄像头rtsp地址rtsp://账号:密码@ip:port/Streaming/Channels/402?transportmode=unicast

    402:4代表通道 2代表子码流 1是主码流


        ffmpeg -re  -rtsp_transport tcp -i "rtsp://账号:密码@ip:port/Streaming/Channels/402?transportmode=unicast" -f flv -r 25 -s 1960x1280 -an rtmp://localhost:1935/live/room

     

    5、rtsp 转hls

     

    ffmpeg -rtsp_transport tcp -i "rtsp地址rtsp://账号:密码@ip:port/Streaming/Channels/402?transportmode=unicast" -fflags flush_packets -max_delay 1 -an -flags -global_header -hls_time 1 -hls_list_size 3 -hls_wrap 3 -vcodec copy -s 216x384 -b 1024k -y D:/nginx-rtmp-win32-master/html/hls/test.m3u8 
        
        
    如果需要转hls的话nginx目录下的conf 下的nginx.conf

    worker_processes  1;
    
    error_log  logs/error.log debug;
    
    events {
        worker_connections  1024;
    }
    
    rtmp {
        server {
            listen 1935;
    
            application live {
                live on;
            }
    		
            application hls {
                live on;
                hls on;  
                hls_path html/hls;  
                hls_fragment 18s;  
            }
        }
    }
    
    http {
        server {
            listen   8083;
    		
            location / {
                root html;
    			index  index.html index.htm;
            }
    		
            location /stat {
                rtmp_stat all;
                rtmp_stat_stylesheet stat.xsl;
            }
    
            location /stat.xsl {
                root html;
            }
    		
            location /hls {  
                #server hls fragments  
                types{  
                    application/vnd.apple.mpegurl m3u8;  
                    video/mp2t ts;  
                }  
               # 下面这个是表示转流后的m3u8文件没有缓存,保证加载的实时的
               add_header Cache-Control no-cache;
            }  
    
        }
    }
    

     

    展开全文
  • node写了一个接口,接收rtsp地址,然后运行ffmpeg命令将rtsp流转为rtmp流推给nginx。 然后网页就可以连接nginx的1935端口播放rtmp流。 nodejs中,我用child_process中的spawn来运行的命令,遇到的问题是刚运行命令后...

    由于需要在web中播放摄像头视频, 源流是rtsp的。没用办法只有用ffmpeg来转一下码。服务端采用node + ffmpeg + nginx + nginx-http-flv-module

    node写了一个接口,接收rtsp地址,然后运行ffmpeg命令将rtsp流转为rtmp流推给nginx。 然后网页就可以连接nginx的1935端口播放rtmp流。

    nodejs中,我用child_process中的spawn来运行的命令,遇到的问题是刚运行命令后可以正常播放。 过一段时间后(几分钟)就不能播放了。用vlc播放器直接播放rtmp也不行,播放rtsp却可以。

    我的代码是,没发现什么问题。
    ps aux | grep ffmpeg 查看,进程都在。

    var workerProcess = child_process.spawn('ffmpeg', ["你需要的参数"]);
    
    workerProcess.stdout.on('data', function (data) {
        console.log('stdout: ' + data);
    });
    
    workerProcess.on('close', function (code) {
        console.log('子进程已退出,退出码 '+code);
    });
    

    然后抱着试一试的心态,把stderr加上的日志处理加上,播放视频就不会断了

    
    workerProcess.stderr.on('data', function (data) {
         console.log('stderr: ' + data);
    });
    

    真的是无语。不知道什么原因!!!

    展开全文
  • ffmpeg实现rtsp转rtmp

    2020-08-31 16:10:44
    首先,说一下ffmpeg实现rtsp转rtmp需要的条件: (1)ffmpeg包:https://github.com/xueying123-cat/ffmpeg (2)nginx-rtmp:https://github.com/xueying123-cat/nginx-rtmp.git (3)转码服务,这是比较重要的将...
  • rtsp 简单的rtsp播放器,实现了rtp over tcp方式收流,h264、g711、aac等音视频解码,音频渲染使用xaudio,视频渲染支持d3d9、d3d11和opengl。
  • 本次流采用Centos+Nginx+FFmpeg实现,具体实现如下: 1. 安装Ngxin 安装详细略(可以选择安装阿里的Tengine,官方[下载路径 2. 安装Nginx Rtmp模块 nginx默认不支持rtmp流的转换,需要通过第三方扩展模块来...
  • JavaCV使用FFmpeg进行rtsp转rtmp直播流画面延时的优化方法由于首帧pts和dts不相等导致的画面延时问题分析解决方法FFmpegFrameGrabber调用start()方法执行时间太长导致画面延时问题分析解决方法 项目github地址:...
  • 目前web端对rtsp的播放甚是不便,所以考虑将rtsp流转码成rtmp给web端播放。 一、安装ffmpeg 安装依赖: yum install -y epel-release rpm rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 yum repolist rpm ...
  • RTSP转RTMP 本次转流采用Centos+Nginx+FFmpeg实现,具体实现如下: 安装Ngxin 安装详细略(可以选择安装阿里的Tengine,官方[下载路径](Download - The Tengine Web Server (taobao.org)) ) 安装Nginx Rtmp模块 ...
  • 关于使用ffmpeg编码丢包问题 ...ffmpeg -i rtsp://192.168.1.108:554/DN0008.sdp -vcodec copy -acodec copy -f flv -y rtmp://192.168.1.108:1935/mylive/DN0008 在ffmpeg命令行中加入-preset ultr
  • red5+java6+ffmpeg 实现rtsp转rtmp

    千次阅读 2016-08-07 00:10:18
    安装流媒体服务器red5 下载的版本为 setup-Red5-1.0.1-java6.exe 安装过程中会要求设置一些信息IP和... ...将解压后的ffmpeg的bin目录加入path 将oflaDemo 拷贝到red5目录下的webapps目录中 并将其中的index.h
  • ffmpeg转rtsprtmp失败

    2019-08-08 20:31:29
    内网ip摄像头测试没问题,一上线就遇到...ffmpeg -rtsp_transport tcp -i "rtsp://ip:port/dss/monitor/params?cameraid=123321%240&substream=1" -q 0 -f mpegts -codec:v mpeg1video -s 200x200 http://127.0...
  • ffmpeg -i "rtsp://$ipc_username:$ipc_pwd@$ipc_rtsp_url" -f mp4 -vcodec copy -r $framerate -s $framewh -b:v $bitrate -an -f flv "rtmp://localhost/live/$streamid" 以上的参数定义如下 ipc_username=...
  • Windows安装 ffmpeg ffmpeg windows版下载地址https://ffmpeg.zeranoe.com/builds/ static... Rtsp转Rtmp 并推送到Nginx命令: ffmpeg -rtsp_transport tcp -i "rtsp://root:pass@10.1.30.11/axis-medi..
  • 上一篇文章简单介绍了java如何调用ffmpeg的命令:http://blog.csdn.net/eguid_1/article/details/51777716 上上一篇介绍了nginx-rtmp服务器的搭建:http://blog.csdn.net/eguid_1/article/details/51749830 这一...
  • RTSP转rtmp

    2020-09-23 18:01:00
    RTSP转rtmp 1.安装ffmpeg yum install epel-release -y rpm --import http://li.nux.ro/down...
  • FFmpeg+nginx海康威视rtsp转rtmp

    万次阅读 2018-10-15 14:43:32
    nginx包和配置文件如下:文件解压后将nginx-rtmp-module-master和nginx-rtmp放入nginx-rtmp-win32-master文件夹下nginx包和配置文件 修改conf文件夹下nginx.conf文件,文件内容如下: #user nobody; worker_...
  • 问题来源:ffmpeg切片m3u8卡顿严重,只能另找出路
  • 以下内容主要涉及1个rtsp视频源,1至2台计算机/服务器 此处假设视频源地址为rtsp://username:password@192.168.1.3:554/h264/ch1/main/av_stream ...目标数据流地址为rtmp://192.168.1.5/live/v1 使用工具: ...
  • nginx-rtmp-ffmpeg集合 查看相关文章:http://javame.cnblogs.com 有问题加我

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 276
精华内容 110
关键字:

ffmpegrtsp转rtmp