学习
实践
活动
工具
TVP
写文章

基于FFmpeg进行RTMP(二)

在前面一节基于FFmpeg进行RTMP(一)我们写了最简单的一版代码。但细心调试过的兄弟会发现当我们把文件换成mp4后,发现上面的代码在写入文件头时报错。也就是说上一版的代码是有bug的。 说明我们的速度有问题。快了或慢了都会有问题。我们大概可以定位到,我们在计算延时的时候出现了错误。 因为在这一版的FFmpeg中。out_stream->time_base的值为1/9000000。这里我们确以1/1000000计算的,这个当然就错了。 ////////////////////////////////////////////////////////////////// // 准备 << endl; //每一帧数据 //int64_t pts [ pts*(num/den) 第几秒显示] //int64_t dts 解码时间 [P帧(相对于上一帧的变化

5.9K50

C++ 调用 ffmpeg 进行 rtmp

效果 Clion 中演示的效果 终端中运行也没有问题 思路 通过 fork 一个子进程来调用 ffmpeg 进行,视频帧通过 opencv 来获取,通过管道传输到子进程,实现 代码 需要注意的是 ,机器上要先安装 ffmpeg,其次视频的帧率一定要匹配,否则会出现莫名其妙的问题 main.cc: #include <iostream> #include <csignal> #include <opencv4 = "<em>rtmp</em>://localhost:1935/live/test"; std::stringstream command; command << "ffmpeg "; // infile ; cv::Mat frame; // 在子进程中调用 ffmpeg 进行 FILE *fp = nullptr; fp = popen(command.str().c_str( else { return EXIT_FAILURE; } } CMakeLists.txt: cmake_minimum_required(VERSION 3.20) project(rtmp_test

1.2K20
  • 广告
    关闭

    【11.11特惠】直播流量包低至0.09元/GB

    11.11云上盛惠,新用户8.8元享100GB直播流量,新老同享直播流量包低至0.14元/GB,更有直播转码包/快直播特惠包等8折起

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    基于FFmpeg进行RTMP(一)简介

    如果我们使用了网络拉等等,要先初始化。 他们之间有微小的差别:使用FFMPEG类库分离出多媒体文件中的H.264码 因此在使用FFMPEG进行视音频处理的时候,常常可以将得到的AVPacket的data数据直接写成文件,从而得到视音频的码文件 ////////////////////////////////////////////////////////////////// // 准备 << endl; //每一帧数据 //int64_t pts [ pts*(num/den) 第几秒显示] //int64_t dts 解码时间 [P帧(相对于上一帧的变化 如果你是在无法解开这个问题,请看下节基于FFmpeg进行RTMP(二)

    11.5K41

    Android平台下使用FFmpeg进行RTMP(摄像头

    简介 前面讲到了在Android平台下使用FFmpeg进行RTMP(视频文件),里面主要是介绍如何解析视频文件并进行,今天要给大家介绍如何在Android平台下获取采集的图像,并进行编码 学习本章之前最好先看之前的文章,这里是一套连贯的教程 RTMP服务器搭建(crtmpserver和nginx) 音视频编码相关名词详解 基于FFmpeg进行RTMP(一) 基于FFmpeg进行RTMP (二) Linux下FFmpeg编译以及Android平台下使用 Android平台下使用FFmpeg进行RTMP(视频文件) 打开摄像头并设置参数 具体代码查看CameraActivity.java (ofmt_ctx, pCodec)这个就和之前的文件一样了。 输出视频数据 ret = av_interleaved_write_frame(ofmt_ctx, &enc_pkt); 释放资源 在结束编码后我们也需要释放相关的资源 if (video_st

    2.2K51

    FFmpeg+nginx+rtmp搭建环境实现

    4、ffmpeg -re -i 123.mp4 -vcodec libx264 -acodec aac -f flv rtmp://你的ip地址:1935/live/home 5、拉: 电脑打开 /config #编译程序 make #安装程序 make install 下载并解压nginx-rtmp-model #下载rtmp包 wget https://github.com/arut/ nginx-rtmp-module/archive/master.zip #解压下载包 unzip -o master.zip #修改文件夹名 mv master nginx-rtmp-module 安装 /configure && make && make install 开始安装ffmpeg: cd /home wget http://www.ffmpeg.org/releases/ffmpeg-3.4 .tar.gz tar -xvf ffmpeg-3.4.tar.gz cd ffmpeg-3.4/ .

    27220

    Android平台下使用FFmpeg进行RTMP(视频文件)简介

    简介 前面已经讲到如何在Linux环境下编译FFmpeg以及在Android项目中使用,这一节就开始真正的使用FFmpeg。在Android平台下用FFmepg解析视频文件并进行RTMP。 新增函数 异常处理 设置回调方法 常见问题 源码 新增函数 首先我们将所有FFmpeg的操作抽取到一个类里面,然后增加方法。 进行RTMP(二)中使用的代码一致,我们直接拷贝过来即可。 至于FFmpeg的使用,这里就不重复讲了,不懂的可以看之前的文章。源码见末尾 异常处理 在我们之前的代码中,并没有做异常处理。这样在正式的使用中肯定不太好的。所以我们加上try catch。 源码见末尾 设置回调方法 为了方便我们查看的信息,我们新增一个回调类。

    2.3K20

    视频RTMP实践

    对应RTMP,业界有很多开源方案。如使用FFMPEG,librtmp(rtmp-dump),gstream。由于ffmpeg和gstreamer比较庞大,仅仅用来,有大炮打蚊子之嫌。 接口。 \n");     return 0; } 基本思路如下: 读文件----解析NAL单元---利用 SendData发送一个完成的NAL单元完成 编译main.cpp Wrapper_RtmpLib.cpp 运行可执行程序 . 3.如果是云主机,在云主机内不能公网IP,而要内网IP 192.168.1.226,客户端访问需要外网IP。 客户端播放效果如下:。

    36730

    偶遇FFMpeg(四)-FFmpeg PC端

    开编 之前在Android集成FFmpeg。主要还是基于命令行的方式进行操作。刚刚好最近又在研究相关的东西。看了一些博文。和做了一些实践。 就希望通过本文记录袭来。 本文的大体结构如下 ? 把attribute_deprecated注释掉了 代码 大致先了解一下结构体和结构体之间的关系 结构体关系 ? 他们之间有微小的差别:使用FFMPEG类库分离出多媒体文件中的H.264码 因此在使用FFMPEG进行视音频处理的时候,常常可以将得到的AVPacket的data数据直接写成文件,从而得到视音频的码文件 FFMPEG的套路 套路图如下: ? FFMPEG的套路.png 整个方法的流向: ? copy from leixiaohua.png 首先,我们先来熟悉一下这个整体的套路。其实的过程。 ,就是通过avio_open链接网址,做好的准备 //开始使用io进行 //通过AVIO_FLAG_WRITE这个标记位,打开输出的AVFormatContext

    1.4K30

    Android RTMP之MediaCodec硬编码二(RTMPDump

    简介 在前面的两篇文章中:Android RTMP之MediaCodec硬编码一(H.264进行flv封装)介绍了如何MediaCodec进行H264硬编码,然后将编码后的数据封装到flv文件中。 Android平台下RTMPDump的使用介绍了如何将RTMPDump移植到Android平台下,并读取解析flv文件进行。 主要增加三个方法:建立连接,数据,释放连接。 我们还是使用Android RTMP之MediaCodec硬编码一(H.264进行flv封装)里的代码。 第三步 c++层方法实现 c++层逻辑的编写。我们将方法写到rtmp_handle.cpp。

    75650

    使用 ffmpeg 命令直播

    CMD使用到的命令 D: -> 表示进入D盘 cd /live -> 表示进入某个路径 执行条件 1.ffmpeg.exe 与视频放在同一目录下,纯英文目录 2.执行以上命令进入到ffmpeg.exe所在的目录 3.在当前目录执行 ffmpeg.exe 命令 查看是否执行成功 打开ffmpeg ? rtmp rtmp ffmpeg.exe -re -i "a.mp4" -acodec aac -ar 32000 -vcodec copy -f flv "rtmp://wst.zhihuishu.com k=0a259b-5f10797f" rtmp固定时间 ffmpeg.exe -ss 00:02:45 -re -i "a.mp4" -acodec aac -ar 32000 -vcodec k=b0158c-5f10797f" 成功页面 ?

    2.8K31

    如何使用OpenCV RTMP直播

    前提 安装Python环境、安装OpenCV、安装安装FFmpeg并添加到系统环境变量 代码 # 需先自行安装FFmpeg,并添加环境变量 import cv2 import subprocess # RTMP服务器地址 rtmp = r'rtmp://txy.live-send.acg.tv/live-txy/' # 读取视频并获取属性 cap = cv2.VideoCapture(0) size ), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))) sizeStr = str(size[0]) + 'x' + str(size[1]) command = ['ffmpeg RTMP是什么? ? RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。 RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。

    2.8K20

    OSSRS搭建rtmp服务器

    便捷安装 当服务器不涉及ffmpeg操作时用该方式 下面这种方式是直接安装官方编译过的,里面不包含ffmpeg库, 如果需要ffmpeg处理的话需要自行下载ffmpeg,或者用下文编译源码的方式 /objs/srs -c conf/http.hooks.callback.conf 测试 ffmpeg -re -stream_loop -1 -i /data/rtmptest.mp4 -vcodec /objs/srs -c conf/ffmpeg.transcode.conf>log.txt & ffmpeg -re -stream_loop -1 -i /usr/local/srs2/doc ffmpeg是否能处理成功 ffmpeg -f flv -i rtmp://127.0.0.1:1935/live/test -vcodec libx264 -threads 4 -profile:v /log.txt & ffmpeg -re -stream_loop -1 -i /data/rtmptest.mp4 -vcodec copy -acodec copy -f flv -y rtmp

    3.3K30

    协议转换之rtsp转rtmp

    本篇记录实现一个rtsp转rtmp直播的程序!闲言少叙,接下来置入主题。 需求 有一个摄像头,比如海康的监控摄像头,可以通过rtsp的方式访问其视频画面! 实现思路 我们的程序,称之为rtsp2rtmp,使用该程序实现拉取摄像头rtsp视频,并将rtmp视频流转换为rtmp视频,然后推送到直播服务器,直播服务器采用nginx+rtmp_module的方式实现 rtsp2rtmp,使用FFmpeg API来实现! 准备工作 visual studio(笔者使用vs2019) FFmpeg sdk: 下载下载地址: https://ffmpeg.zeranoe.com/builds/ 具体实现步骤 打开输入流上下文 << std::endl; // 2.获得信息 m_nRet = avformat_find_stream_info(m_pRtspAVFormatContext, 0); if (m_nRet

    1.7K30

    FFmpeg 流媒体处理 - 收

    rtmp 必须推送 flv 封装格式,udp 必须推送 mpegts 封装格式,其他情况就当作是输出普通文件。 具体方法参考:"FFmpeg 开发环境构建" 3.2 搭建流媒体服务器 测试收功能需要搭建流媒体服务器。我们选用 nginx-rtmp 作为流媒体服务器用于测试。 nginx-rtmp 服务器运行于虚拟机上,客户端与收客户端和 nginx-rtmp 服务器处于同一局域网即可。 测试: ffmpeg -re -i tnhaoxc.flv -c copy -f flv rtmp://192.168.0.104/live "-re":按视频帧率的速度读取输入 "-c copy 收的问题:结束后,收超时未收以数据,会打印如下信息后程序退出运行 RTMP_ReadPacket, failed to read RTMP packet header 5.

    84400

    Nginx添加rtmp模块搭建rtmp服务器

    前言 搭建基于rtmp协议的服务器。 nginx-1.12.2 nginx 3、备份文件 cp -r /etc/nginx /etc/nginx_bak mv /usr/sbin/nginx /usr/sbin/nginx_bak 下载rtmp 模块 仓库地址:nginx-rtmp-module cd /usr/lib64/nginx/modules/ git clone https://github.com/arut/nginx-rtmp-module.git NGINX_HOME=/usr/local/nginx export PATH=$PATH:$NGINX_HOME/sbin 重新编译环境变量 source /etc/profile 配置Nginx的rtmp 请求路径,文件存放路径 hls_fragment 5s; #每个TS文件包含5秒的视频内容 } } } 启动nginx cd /usr/local/nginx

    2.2K20

    FFmpeg视频播放器开发-FFmpegrtmp(七)

    在菜单栏输入rtmp地址后,关闭窗口,在closeEvent方法中发送信号,主线程接收到该信号后,调用网络流线程解码,同时视频显示窗口刷新解码后的img, 这样网络就可以播放了。 ui.lineEdit_IP->text();CommonUtils::writeIni(m_iniPath, m_iniKey, address);emit(PushStream(address));}菜单栏这是湖南卫视的rtmp rtmp://58.200.131.2:1935/livetv/hunantv主界面接收PushStream信号connect(&m_NetDlg, SIGNAL(PushStream(QString setWindowTitle(address);NetStreamThread::getInstance()->startPlay(address);}通过调用NetStreamThread线程类解码rtmp ,这和本地文件播放差不多,然后再界面控件刷新。

    13820

    FFmpeg流媒体处理-收

    rtmp必须推送flv封装格式,udp必须推送mpegts封装格式,其他情况就当作是输出普通文件。这里使用push_stream变量来标志是否使用功能,这个标志后面会用到。 具体方法参考:“FFmpeg开发环境构建” 3.2 搭建流媒体服务器 测试收功能需要搭建流媒体服务器。我们选用nginx-rtmp作为流媒体服务器用于测试。 nginx-rtmp服务器运行于虚拟机上,客户端与收客户端和nginx-rtmp服务器处于同一局域网即可。 测试: ffmpeg -re -i tnhaoxc.flv -c copy -f flv rtmp://192.168.0.104/live -re:按视频帧率的速度读取输入 -c copy:输出使用和输入流相同的编解码器 遗留问题 的问题:不管是用ffmpeg命令,还是用本测试程序,结束时会打印如下信息: [flv @ 0x22ab9c0] Timestamps are unset in a packet for

    6K31

    排查rtmp协议时握手bug

    概况 转流程序的过程:从一个观看地址拉,然后流到另一个地址。主要用于cdn之间转,目前市面上大多数cdn厂商都愿意不支持动态转,因此只能通过转流程序进行转。 中的代码是地址中没有加密串的情况下的握手过程代码,第二个链接handshake.h中的代码是地址中有加密串的情况下的握手过程代码。 抓包分析 以微赞和网宿为例 obs流网宿握手成功的包点此下载 obs微赞握手成功的包点此下载 网宿没有走加密流程,S2和C1匹配,具体数据包截图如下: ? 微赞流走加密流程,S2和C1不匹配,具体数据包截图如下: ? 到此,整个rtmp握手过程就比较清楚了。 至此,转成功,示例图如下: ? 结论 虽然Adobe公司自己出的rtmp协议不是iso标准的,但是你们这些公司好歹也尽量按照规定来啊,贼坑。

    48321

    相关产品

    • 云直播

      云直播

      云直播(CSS)为您提供极速、稳定、专业的直播云端处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、慢直播、快直播三种服务,分别针对大规模实时观看、高并发推流录制、超低延时直播场景,配合移动直播 SDK,为您提供一站式的音视频直播解决方案。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券