rtsp实时流通过rtmp推送到服务端
rtsp实时流通过rtmp推送到服务端
很多朋友都会问到rtsp如何通过rtmp协议推送到服务端,正好前段时间开发了这个功能写在这里,和大家分享下。
首先我想说的是:ffmpeg可以实现这个功能。ffmpeg支持rtsp协议,也支持rtmp。在这个案例中rtsp是输入,
rtmp是输出,ffmpeg实现了转码的功能。下面可出一个整体思路流程图。
图1
如图1所示:在获取都rtsp流以后,解复用(demux)获取ES流packet,最后将ES流封装成rtmp格式并发送
到服务端。
基本思路完毕,下面上代码。
一:初始化ffmpeg库
void Init() {av_register_all();avfilter_register_all();avformat_network_init();av_log_set_level(AV_LOG_ERROR); }
二. 打开rtmp视频流
int OpenInput(char *fileName) {context = avformat_alloc_context();int ret = avformat_open_input(&context, fileName, nullptr,nullptr);if(ret < 0){return ret;}ret = avformat_find_stream_info(context,nullptr);auto codecContext = context->streams[0]->codec;ret = avcodec_open2(codecContext, avcodec_find_decoder(codecContext->codec_id), nullptr);return ret; }
返回值小于0 表示打开流失败。
三. 创建输出流
int OpenOutput(char *fileName) {int ret = 0;ret = avformat_alloc_output_context2(&outputContext, nullptr, "flv", fileName);if(ret < 0){goto Error;}ret = avio_open2(&outputContext->pb, fileName, AVIO_FLAG_READ_WRITE,nullptr, nullptr); if(ret < 0){goto Error;}for(int i = 0; i < context->nb_streams; i++){AVStream * stream = avformat_new_stream(outputContext, nullptr);ret = avcodec_copy_context(stream->codec, context->streams[i]->codec); if(ret < 0){goto Error;}}ret = avformat_write_header(outputContext, nullptr);if(ret < 0){goto Error;}return ret ; Error:if(outputContext){for(int i = 0; i < outputContext->nb_streams; i++){avcodec_close(outputContext->streams[i]->codec);}avformat_close_input(&outputContext);}return ret ; }
返回值小于0,创建输出流失败,以rtmp格式发送视频流一定要以flv格式初始化output context。
四. 读取Packet
shared_ptr<AVPacket> ReadPacketFromSource() {shared_ptr<AVPacket> packet(static_cast<AVPacket*>(av_malloc(sizeof(AVPacket))), [&](AVPacket *p) { av_free_packet(p); av_freep(&p);});av_init_packet(packet.get());int ret = av_read_frame(context, packet.get());if(ret >= 0){return packet;}else{return nullptr;} }
五. 写Packet到服务端
1 |
|
六. 简单demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
七. 小结:
经测试,内网rtmp直播延时在1秒以内,公网延时在3,4秒左右。
rtsp实时流通过rtmp推送到服务端相关推荐
- OPPO消息推送服务器,OPPO推送平台服务端API.PDF
OPPO推送平台服务端API.PDF OPPO推送平台服务端API 修订记录: 版本号 修订人 修订日期 修订描述 V0.1 宫建涛 2017-03-28 初始版本 V0.2 宫建涛 2017-07- ...
- 快应用消息推送push服务端开发
文章目录 快应用消息推送push开发 一.设备信息保存 1.设备id的生成 1-1生成规则 1-2生成弊端 1-3更为简单的方式保证唯一性 2.不合法regId的过滤 3.上报更多设备信息 4.程序实 ...
- 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)
这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送 ...
- erlang-百度云推送Android服务端功能实现-erlang
百度云推送官方地址http://developer.baidu.com/wiki/index.php?title=docs/cplat/push 简单的介绍下原理: 百度云推送支持IOS和Androi ...
- java百度云推送demo_百度云推送java服务端maven安装完整demo
/*** 推送单播通知 *@author* @Date 2017年3月2日 * @Desc*/ public classBaiduPush {publicString[] pushNotificati ...
- 小米推送之服务端简单开发
1.获取SDK,并写入常量表 2.引入MiPush_SDK_Sever.jar文件和json-simple-1.1.1.jar 3.开发服务端代码(这里是用别名进行推送) /*============ ...
- 友盟消息推送java服务端
基本概念 appkey:应用唯一标识 app_master_secret:服务器Key. device_token: 友盟后台对设备的唯一标识.注意, Android的device_token是44位 ...
- 极光推送java服务端-通知(2)
1.下载SDK REST API为极光推送开发API 2.下载好后,maven导入后可以参考示例 官方demo 4.小demo // 设置好账号的app_key和masterSecret是必须的pri ...
- 华为消息推送 有透传通道吗_华为推送之服务端简单开发
个人觉得华为推送官方文档写得太....哈哈!完全符合复制拿来用就好,今天我也去复制一番. 1.获取华为appSecretKey和appId 2.然后就是复制官网的代码(是不是纯copy),最后就最后了 ...
最新文章
- 通信系统中对眼图的理解(一)
- 关于android Activity生命周期的说明
- 安装 CORD 之前需要了解的术语
- URI和URL及URN的区别
- 微型计算机c560,2010广东省计算机等级考试试题 二级C试题最新考试试题库
- 3dsmax子菜单无法选择_3DsMax—用平面图片制作3D模型
- [js] 你是如何比较js函数的执行速度的?
- 九章算法 第七到九章 预习笔记
- 华为服务器装系统一直在读盘,系统重装一直在启动服务器
- [蓝点zigBee] CC2530 实用教程总览
- 自学移动端(APP)自动化测试
- 【可视化应用案例】使用ProPlot绘制兰伯特投影的填色图
- 八皇后算法python_八皇后问题遗传算法实现(python版)
- Photoshop 2023 支持 M1 Mac下载
- android熄屏微信收到原理,求助,如何才能在息屏状态下显示收到的微信消息内容?...
- 虚拟机的网络改为桥接网络
- Hibernate_8_Person和IdCard实例_一对一关系:基于外键
- 2021哈工大计算机考研复试名单,哈尔滨工业大学各学院2021年硕士研究生复试名单...
- 【RevitAPI】Revit产品按钮自带信息(名称+ID)
- window 下 jdk11安装与环境变量的配置(超级详细)
热门文章
- 设备上的介质簇的结构不正确_环保设备选型参考系列——生化系统之潜水搅拌机【价格】...
- STM32 I2C通信(读写eeprom)
- linux写文件操作同步,linux 可执行文件与写操作的同步问题(文件读写操作产生的锁机制)...
- 安徽省第二次计算机水平考试,2006第二次安徽省计算机水平考试试卷(ACCESS).doc...
- ML、DL、CNN学习记录7
- markdown引入代码_第 09 篇:让博客支持 Markdown 语法和代码高亮
- 《深入理解 Spring Cloud 与微服务构建》第八章 声明式调用 Feign
- 刷题总结——湫湫系列故事——设计风景线(hdu4514 并差集判环+树的直径)
- AM5728通过GPMC接口与FPGA高速数据通信实现
- 《深入分析Linux内核源代码》读书、私藏笔记大放送