精华内容
下载资源
问答
  • RTSP与RTMP录制小工具.zip
  • javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG) javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp...

    javacv实战专栏目录:
    JavaCV实战专栏文章目录(JavaCV速查手册)

    JavaCV实战教程系列

    前言

    javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件中我们已经实现了文件录制,但是对于hls来说比单文件录制要复杂,因为hls涉及ts/fmp4切片,所以本章就单独讲讲hls切片,废话少谈,让我们立刻开始吧。

    参考资料

    1. apple官方低延迟解决方案:https://developer.apple.com/documentation/http_live_streaming/enabling_low-latency_hls
    2. hls官方规范:
    展开全文
  • RTMP在直播领域取得了不错的应用,某项目需要针对RTMP流进行多路并发录制,在分析了多种解决方案的弊端后,我们实现了一种轻量级、低耦合、高可靠性的RTMP并发录制方案。 背景 现有录制方案包括: A、在RTMP流...

    RTMP在直播领域取得了不错的应用,某项目需要针对RTMP流进行多路并发录制,在分析了多种解决方案的弊端后,我们实现了一种轻量级、低耦合、高可靠性的RTMP并发录制方案。

    背景

    现有录制方案包括:

    A、在RTMP流媒体服务器上实现录制。比如第三方的阿里云、腾讯云等均提供录制服务。比如使用SRS\Nginx-rtmp作为媒体服务器时,在其基础上增加服务器端录制。

    B、使用ffmpeg+脚本方式搭建录制服务。

    综合权衡,方案A与媒体服务器耦合度较高,在某些场景下无法实施。方案B是一个快速实现相关功能到不错选择,但未经改造的ffmpeg在掉线自动重连等异常情况的检测恢复方面存在较多问题,对于可靠性要求较高的工程场合不太适合,且因为ffmpeg本身比较庞大,对其进行自定义改造开发工作量不小。

    最终,我们选择C方案:开发一种独立于媒体服务器的RTMP高并发收录系统,系统具备高可靠、低耦合、精简可扩展的特征。

    1、系统对外采用极少数几个WEB接口:收录任务查询接口、收录任务状态反馈接口、录制文件入库接口,耦合性低可很快集成到用户现有系统之中。

    2、支持RTMP自动重连、支持实时监控收录程序工作状态和媒体流状态,对异常情况自行恢复。

    3、采用多进程架构,不同的收录任务使用相互独立的子进程,实现高可靠性。

    4、实时录制时采用TS容器作为载体,在掉电、断网等异常情况下始终确保文件无损坏。

    5、支持将TS文件自动转换为播放器兼容性更好的MP4文件。

    6、支持按指定的时长间隔或文件大小生成录制片段。

    7、支持缩略图生成。

    8、支持主备,支持集群化部署。

    9、支持H264、AAC组合的标准RTMP流,支持H265扩展。

     

    设计

    系统架构如下图所示:

    系统由WEB服务RtmpCapServer收录服务端RtmpCapClient收录客户端、TS转MP4服务四大部分组成。

    RtmpCapServer收录服务端定时调用WEB接口获取当前时刻需要启动的收录任务,获取到任务后将在本机启动对应的RtmpCapClient收录客户端子进程,子进程启动后建立与RtmpCapServer服务端之间的TCP长连接用于双方之间的信令交互。其后子进程开始RTMP的流录制。

    RtmpCapClient收录客户端可通过TCP长连接向RtmpCapServer收录服务端上报任务状态(启动录制成功、录制失败、录制完成等)和媒体流状态(分辨率、码率等信息),后者通过WEB接口反馈上层应用。

    一个收录任务对应一个唯一的收录子进程,一个RTMP地址可以对应多个收录任务(最常见的场景,为同一路RTMP流创建两个收录任务分别用于主备)。

    RTMP流录制时按指定的时间间隔生成一个个独立的TS文件,存放于用户指定的目录之下,举例如下:./2020-02-20/10086/2020-02-20-16-30-00.ts,其中10086是对应WEB上的收录任务ID,2020-02-20-16-30-00对应该片段的起始录制时间。

    选择使用TS作为录制格式是基于TS的随时可中断特性,面对各类异常情况(收录服务进程异常退出、服务器掉电、断网等),TS文件始终能保证录制文件的可播性。相比而言,MP4文件因为需要在最终时刻生成重要的MOOV头部而容易产生文件损坏。

    TS文件有存储的优势,MP4文件则有播放器兼容性的优势,目前几乎所有WEB播放器均支持MP4容器。为此我们启动了一个单独的TS转MP4服务,该服务会查询TS路径下待转换的文件(已转换的或者正在录制中的片段不会参与转换,通过标志文件可以轻松实现这样的目标),并调用ffmpeg实现文件容器的转换、缩略图生成、文件时长的获取等。MP4的转换完成后,该服务将调用用户配置的WEB接口实现文件的上报入库。这类离线式文件处理正是ffmpeg到优势之处,避免了繁琐的二次开发。

    我们可以在多台服务器上部署多套独立的本系统(RtmpCapServer+RtmpCapClient+MP4转换服务),它们共用同一套WEB服务,从而实现集群化处理。(通过在WEB接口处附带服务器ID号来便于WEB服务区分处理,比如WEB后台可据此进行任务调度等)

     

    开发语言

    RtmpCapServer收录服务端、RtmpCapClient收录客户端使用C++(非C++11)开发,使用HTTP-JSON格式与WEB交互。其代码精简占用资源小,非常适合嵌入式平台。

    TS转MP4服务使用python开发,使用HTTP-JSON格式与WEB交互。

    WEB服务原则上不属于本系统,我们提供的演示DEMO中使用PHP+MySql实现,用户只需要按我们WEB接口要求实现相关WEB接口功能即可。

     

    支持平台

    得益于跨平台的中间件,系统同时支持Linux和Windows

     

    系统对外WEB接口

    相关演示DEMO下载地址:

    https://github.com/waterfoxfox/RtmpCaptureSer

     

    展开全文
  • rtmp发布录制视频

    2019-09-24 08:32:59
    本文描述了rtmp发布本地视频的流程 一、简要介绍 RTMP协议规定,播放一个流媒体有两个前提步骤:第一步,建立一个网络连接(NetConnection);第二步,建立一个网络流(NetStream)。其中,网络连接代表服务器端...

    本文描述了rtmp发布本地视频的流程

    一、简要介绍

    RTMP协议规定,播放一个流媒体有两个前提步骤:第一步,建立一个网络连接(NetConnection);第二步,建立一个网络流(NetStream)。其中,网络连接代表服务器端应用程序和客户端之间基础的连通关系。网络流代表了发送多媒体数据的通道。服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。

    发布一个视频的流程主要经过以下几个步骤:握手->建立网络连接->建立网络流->发布视频;

    二、握手

    一个RTMP连接以握手开始,双方分别发送大小固定的三个数据块

      1、握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。

      2、当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。

      3、当客户端和服务器分别收到S2和C2后,握手完成。

    三、建立网络连接

      1、客户端发送命令消息中的“连接”(connect)到服务器,请求与一个服务应用实例建立连接。

      2、服务器接收到连接命令消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到客户端,同时连接到连接命令中提到的应用程序。

      3、服务器发送设置带宽(Set Peer BandWidth)协议消息到客户端。

      4、客户端处理设置带宽协议消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到服务器端。

      5、服务器发送用户控制消息中的“流开始”(Stream Begin)消息到客户端。

      6、服务器发送命令消息中的“结果”(_result),通知客户端连接的状态。

    四、建立网络流

      1、客户端发送命令消息中的“创建流”(createStream)命令到服务器端。

      2、服务器端接收到“创建流”命令后,发送命令消息中的“结果”(_result),通知客户端流的状态。

    五、推送视频

      1、客户端发送发布命令(publish)到服务器

      2、服务器接受到命令后,发送用户控制命令(streamBegin)到客户端

      3、客户端发送数据消息到服务端

      4、客户端发送音频数据到服务端

      5、客户端发送chunk控制消息(setchunksize)到服务端

      6、服务端返回发布结果命令给客户端

      7、客户端发送视频数据到服务端

     

    转载于:https://www.cnblogs.com/alvin2010/p/8589586.html

    展开全文
  • nginx-rtmp hls录制改造

    千次阅读 2018-03-22 09:03:36
    2 nginx hls不会生成hls录制的m3u8文件(带有END标记的) 3 nginx hls没有按流名,时间等信息分子目录。 二 nginx hls录制要求 1 生成录制m3u8 2 按流名,时间等信息管理录制目录 3 提供http json查询接
    一 nginx hls现状
    
    1 nginx hls目前仅支持直播业务,流发布的时候创建相关的目录,流结束的时候清除相关的临时目录。
    2 nginx hls不会生成hls录制的m3u8文件(带有END标记的)
    3 nginx hls没有按流名,时间等信息分子目录。
    二 nginx hls录制要求
    1 生成录制m3u8
    2 按流名,时间等信息管理录制目录
    3 提供http json查询接口
    三 nginx hls录制实现方案
    (1)publish初始化直播和录制目录
    (2)更换新的ts切片的时候判断是否跨天,跨天则创建新的录制目录,
    ngx_rtmp_hls_open_fragment()->
    if(s->last_date != ngx_rtmp_hls_get_date())
    {
    change_record_dir();
    }
    直播目录结构为:configroot/streamid/streamid_live.m3u8
    录制目录结构为:configroot/streamid/date/time/streamid_record.m3u8
    (3) ngx_rtmp_hls_cleanup_dir() 流退出的时候,避免清除录制目录
    (4) 录制m3u8列表更新,由于nginx只保存最近的几个切片文件信息,因此录制m3u8要实现成追加的方式,
    因此每次更新的时候记录#EXT_END前的偏移位置,从此处开始追加切片信息,并统计total_duration值,更新到
    录制m3u8文件中
    示例:
    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-MEDIA-SEQUENCE:0
    #EXT-X-TARGETDURATION:00004
    #EXTINF:3.840,
    fantasy-20170805173029-0.ts
    #EXTINF:3.840,
    fantasy-20170805173033-1.ts
    #EXTINF:3.840,
    fantasy-20170805173037-2.ts
    #EXTINF:3.840,
    fantasy-20170805173041-3.ts
    #EXTINF:3.840,
    fantasy-20170805173044-4.ts
    #EXTINF:3.393,
    fantasy-20170805173048-5.ts
    #ZEN-TOTAL-DURATION:22.593
    #EXT-X-ENDLIST

    四 录制查询接口实现
    (1) http://localhost/query_video
    返回录制的流列表
    (2) http://localhost/query_video?id=xxx
    返回录制的流时间表,以天为单位
    (3) http://localhost/query_video?id=xxx&day=20170810
    返回某一天的录制时刻表
    展开全文
  • SRS支持将RTMP录制成FLV

    千次阅读 2020-07-30 11:34:18
    SRS支持将RTMP录制成FLV在使用的配置中增加以下配置可以完成视频的录制和回调保存文件信息 在使用的配置中增加以下配置可以完成视频的录制和回调保存文件信息 配置信息: vhost your_vhost { dvr { enabled on; ...
  • nginx+rtmp 推流录制

    千次阅读 2019-07-04 15:59:46
    nginx+rtmp 推流录制 1、环境搭建: https://blog.csdn.net/caowenjing123/article/details/94621301 2、修改nginx.conf 配置文件 在你对应的myapp推流APP下添加record recorder all { record all manual; rec...
  • 该代码可以实现android的屏幕录制和摄像头录制以及通过rtmp上传到服务器
  • 三:支持编码器rtmp/rtsp网络流转发到KMS/FMS/Wowza等流媒体服务器 四:支持编码器rtmp/rtsp等协议立即录像或者任务录像,录像为标准mp4格式 五:支持本地mp4文件转发成网络流,推送给KMS/FMS/Wowza等流媒体服务器...
  • 本资源实现目的是通过Android实现rtmp推流到AMS服务器,AMS服务器进行mp4视频录制。 1、rtmpdump源码编译成.so动态库 2、android客户端demo 3、修改了rtmp源文件,进行视频录制rtmpdump默认是直播方式)。
  • 公司最近在做视频直播的项目,我这里分配到对直播的视频进行录制录制的方式是通过rtmpdump对rtmp的视频流进行录制 前置的知识 ffmpeg: 用于实现把录屏工具发出的视频和音频流,转换成我们需要的格式,然后...
  • authedkey=ABC23 timeout=1 " -vf "select='eq(pict_type,PICT_TYPE_I)'" -t 00:00:10 -vcodec copy -acodec copy -f flv do.flv 录制 MP4 # 关键帧录制 ffmpeg -i "rtmp://192.168.1.115:1935/live/camera_152?...
  • EasyStream介绍 EasyStream SDK使用 EasyStream系列1之rtsp转rtmp EasyStream系列2之rtmp转rtsp ... EasyStream系列4之rtmprtmp EasyStream系列5之本地文件转rtsp EasyStream系列6之本地文件转rtmp Ea
  • 本项目适用于新手对ffmpeg框架学习的项目,此项目包括功能,屏幕录制、音频录制、摄像头采集录制、音视频通过RTMP推流。 二、开发环境 QT+vs2017+ffmpeg 三、主要代码介绍 1.使用QT获取音频输入设备代码 ...
  • rtmp发布/订阅/Flv录制

    2014-08-19 14:34:15
    2:支持将摄像头和麦克风数据录制到本地FLV文件中(h.264/aac)。 3:可自定义h.264编码质量、帧率、输出宽高等参数。 【RtmpPlayer.exe】 1:订阅制定的RTMP流,通过librtmp订阅数据包,再丢给ffmpge解码,最后将...
  • 能正常的推流,正常的播放RTMP流,能实现直播功能,但是我想把推过来的视频流保存起来,于是查了下,发现是可以实现的,需要在nginx配置文件中配置一下,我按照网上的配置了,但是死活录制不了视频,我的nginx.cnf ...
  • 主要有三个步骤:(1)NginxRTMP服务器搭建(2)视频录制推流器 (3)拉流器(播放器),有了这些就可以开始简单视频相关的直播了。对于延时什么的,还需要深入去研究 ,以及如何进行视频开发等后续再深入研究。 ...
  • 1、什么是混流? 混流就是把多路音视频流合成单流...[temp1][photo2] overlay=x=1280:y=180 :如上 - -r 帧率 - -bufsize 码率控制缓冲区大小 - -f flv 强迫采用格式flv 录制命令 ./ffmpeg -i rtmp://混流地址 test.mp4
  • 最近项目用到nginx-rtmp搭建流媒体服务器,要求能直播和录像点播。录像需要根据日期建立目录保存,同日的录像保存在一个目录下。 ------------------------------------------- --- 网上只看到这个答案接近,...
  • javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG) 本文参考地址:https://blog.csdn.net/eguid_1/article/details/52680802 目录 javaCV开发详解之3:收流器实现,...
  • 主要介绍了Ubuntu18.04下配置Nginx+RTMP+HLS+HTTPFLV服务器实现点播/直播/录制功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,611
精华内容 2,244
关键字:

rtmp录制