API 21引入了Camera2,deprecated掉了Camera,确立Image作为相机得到的原始帧数据的载体;硬件编解码的MediaCodec类加入了对Image和Image的封装ImageReader 举例来说,对于4x4的图片,在YUV420下,有16个Y值,4个U值和4个V值。 举例来说,对于4x4的图片,在YUV420下,任何格式都有16个Y值,4个U值和4个V值,不同格式只是Y、U和V的排列顺序变化。 U/V的平(Planar)面和半平面(Semi-Planar) U/V的Planar存储(YUV420P) 我测试不同安卓设备,找到存储格式是Planar的设备: Log.i 这就是为什么plane[1]和plane[2]的buffer size 是plane[0]的1/2而不是1/4的原因。
不过呢,音视频中,流媒体协议rtsp也占有很大份额!日常生活呢,我们也会遇到一些不同流媒体协议转换的问题!本篇记录实现一个rtsp转rtmp直播流的程序!闲言少叙,接下来置入主题。 需求 有一个摄像头,比如海康的监控摄像头,可以通过rtsp流的方式访问其视频画面!需要将其画面转换为rtmp协议,并实现直播! 实现思路 我们的程序,称之为rtsp2rtmp,使用该程序实现拉取摄像头rtsp视频流,并将rtmp视频流转换为rtmp视频流,然后推送到直播服务器,直播服务器采用nginx+rtmp_module的方式实现 rtsp2rtmp,使用FFmpeg API来实现! << std::endl; //4. stream信息复制 AVCodecContext* rtmpOutCodec = avcodec_alloc_context3(outCodec);
下载 npm install node-rtsp-stream(插件) 前端 下载 jsmpeg.js框架。引入对应开发页面。(详细请参考 jsmpeg.js 文档) html js 部分
标题:使用Java编写FFmpeg实现RTSP拉流推流RTMP详解 引言: RTSP(Real Time Streaming Protocol)是一种用于实时媒体传输的网络协议,而RTMP(Real Time 步骤4:运行程序 编译并运行Java程序,你将会看到FFmpeg开始拉取RTSP流并推送到RTMP流。 ffmpeg多个视频流推流推向一个rtsp地址 FFmpeg可以将多个视频流推向一个RTSP地址。 下面是一个示例的FFmpeg命令,演示了如何将两个视频流推送到同一个RTSP地址: ffmpeg -re -i video1.mp4 -re -i video2.mp4 -filter_complex 然后,使用-i参数指定了两个输入视频文件(video1.mp4和video2.mp4)。 接下来,使用-filter_complex参数来进行视频流的复杂过滤。
EasyScreenLive是一款简单、高效、稳定的集采集,编码,组播,推流和流媒体RTSP服务于一身的同屏功能组件,在大屏显示投屏,无纸化会议同屏演示,课堂同屏等,可以配合全屏显示,在很多项目中都能够实现项目推流的需求 上一篇文中我们讲了EasyScreenLive推RTSP流到EasyDarwin(EasyScreenLive推流组件推RTSP流到EasyDarwin),本文以EasyDSS为主,带着大家演示一遍看下推 ,Port为推流端口,在线演示的端口被定义为10035,Stream为推流标识,如上图,我们自定义推流标识为hls/Seven,填写完毕信息后,我们点击StartPushRTMP按钮,日志栏提示推流成功 打开WEB页面,在直播管理页面->视频直播列表显示中,可以看到刚刚我们推上来的流信息,有ID、名称、推流开关、推流鉴权、推流计划、录像计划、状态、分享开关、直播状态、推送流量等信息显示,方面直观,除了页面可以直播播放以外 ,EasyDSS还支持分发其它协议流供不同终端来做播放使用,选择编辑按钮,可以看到完整的推流地址和不同协议的播放地址,如下图:
1、需求背景目前不是所有的直播推流设备都支持GB28181的国标注册,有的只能输出直播流,有的只能支持RTSP的推流。 那么,项目中如何把 rtsp推流或直播流转成GB/T281812、开启RTSP2.1、基础配置配置RTSP端口3、获取RTSP推流地址3.1、RTSP推流地址格式示例:rtsp://192.168.2.135 :1554/stream_1192.168.2.135 是部署LiveNVR服务器的IP,您自己用的时候换成自己服务器的IP1554 是基础配置配置的RTSP服务端口stream_1 固定格式的推流ID (stream_通道号),比如通道 6 的推流ID就是 stream_63.3、RTSP推流地址示例通道1:rtsp://192.168.2.135:1554/stream_1通道3:rtsp://192.168.2.135 :1554/stream_3通道6:rtsp://192.168.2.135:1554/stream_64、配置设备推流将上面生成的rtsp推流地址,配置到无人机 或是 推流的设备上面5、配置拉转RTSPLiveNVR
EasyScreenLive可以说是TSINGSEE青犀视频的SDK中功能较为集中且全面的一个SDK了,它可以支持推RTSP流到EasyDarwin、推RTMP流到EasyDSS等视频平台,下面我们带着大家演示一遍看下推 1、推RTSP流至EasyDarwin DEMO示例中选择屏幕采集,然后Capture,接着添加EasyDarwin的信息,RTSPush IP为部署EasyDarwin服务的IP地址,本案例中,直接用的本机 127.0.0.1的地址,Port为推流端口,安防领域关于RTSP的端口大家一般都用554端口,EasyDarwin也延续这个默认的规则,Stream为推流标识,如上图,我们自定义推流标识为Seven, 填写完毕信息后,我们点击StartPushRTSP按钮,日志栏提示推流成功,下面我们看下EasyDarwin的状态展示。 2、EasyDarwin的状态展示 EasyDarwin默认的WEB端口为10008端口,我们打开http://127.0.0.1:10008/ 可以直接进入WEB页面,在推流列表中,我们可以看到刚才推送的流信息
在移动端音视频领域,单纯的 RTMP 推流已不再是技术天花板。 RTSP Server:内置轻量级RTSP服务,供局域网内拉流。 Recorder:写入MP4文件进行本地存储。 这种架构的优势在于一次采集、一次编码、多路复用,极大地降低了CPU和内存的开销。 传统的推流端通常只负责推流,拉流需要依赖 Nginx 或 SRS 等服务器。但该 SDK 允许 Android 设备变身为 RTSP 服务器。 本方案通过 Camera2Helper 实现了一次 YUV 数据采集,却能同时支撑 RTMP 远端直播、RTSP 局域网分发 以及 MP4 本地存证 三大业务流。 从“推流端”到“边缘计算节点”的角色蜕变 最令人印象深刻的,是 SDK 内置的 轻量级 RTSP 服务。
用户反馈说华为手机(安卓)小程序推流时声音持续卡顿,始终不会恢复且稳定复现,但是 iOS 小程序推流时声音却是正常的。二、疑惑经过一系列常规处理后,问题依然存在。 后来进一步验证发现,不仅是华为手机,所有的安卓手机小程序推流声音都有问题。按照一般的思路,既然 iOS 设备的小程序没有问题,理论上安卓设备的小程序也不应该有问题,那么很可能是后续链路出现了问题。 反观安卓设备小程序推流的情况,concealedSample/s 数据始终在 2.5k/s 左右,影响了声音的正常播放。 解惑3针对疑惑3,综合研发同学和 QA 同学的反馈,去年年底的时候,安卓小程序推流音频还是正常的,而且之后流媒体服务器和客户端都没有进行过相关功能的升级。 方案1既然是安卓小程序推的音频流有问题,首先想到的就是在源头上解决问题,但是了解小程序直播业务开发的小伙伴一定都知道小程序的底层 SDK 是腾讯提供的,特别是音视频能力,很多接口都没有暴露出来。
channel=1&subtype=0 海康威视 rtsp://用户名:密码@IP地址:端口/Streaming/Channels/id 101:1通道主码流 102:1通道子码流 201:2通道主码流 举例取1通道主码流rtsp://admin:123456@192.168.1.100:554/Streaming/Channels/101 宇视 rtsp://用户名:密码@ip地址:端口/video1 /2/3 举例取主码流rtsp://admin:123456@192.168.1.100:554/video1 TP-LINK rtsp://用户名:密码@ip地址:端口/stream1 举例rtsp: //admin:123456@192.168.1.100:554/stream1 天视通 rtsp://用户名:密码@IP地址:端口/mpeg4 举例rtsp://admin:123456@192.168.1.100 :554/mpeg4 雄迈 rtsp://IP地址/user=用户名&密码=&channel=1&stream=0.sdp?
, 29 8月 2022 作者 847954981@qq.com 后端学习, 我的编程之路 Kotlin安卓开发学习(4) 前面我们学习了Kotlin 的基本语法,但我们最终的目的是作为安卓开发。 因此,我们需要学习安卓的页面开发知识。 Activity Activity是安卓开发的最重要组成之一,它是一种可以包含用户界面的组件,主要用于和用户进行交互。
封装 Camera2 API、AudioRecord 以及 Native 推流库。 管理数据采集(YUV/PCM)到编码推流的全流程。 UI 层 (MainActivity): 纯展示与控制。 这是性能最敏感的部分,直接决定了推流的延迟和流畅度。 五、 核心实现四:RTSP Server 与多路分发系统不仅支持 RTMP 推流,还内置了一个轻量级的 RTSP Server。这意味着手机本身变成了一个 IPC(网络摄像机)。 // 4. 灵活性:Service 承载业务,Activity 仅作展示,实现了完美的解耦,支持断线重连和后台静默推流。 功能全:同时支持 RTMP 推流、RTSP 服务端、水印叠加、软硬编码自动切换。
好多开发者一直搞不清我们轻量级RTSP服务SDK和RTSP推流SDK的区别,以下是相关区别: daniulive_chart_20200130.png 1. 设置rtsp的流名称给要发布的rtsp流设置rtsp serverAddRtspStreamServer给要发布的rtsp流设置rtsp server, 一个流可以发布到多个rtsp server上,rtsp rtsp流StartRtspStream启动rtsp流停止rtsp流StopRtspStream停止rtsp流 2. RTSP推流模块:RTSP推流模块,和RTMP推流模块类似,适用于内网或公网环境下,主要适用于第三方RTSP服务对接,如darwin stream server,或者第三方RTSP服务平台,如视频分析平台等特定场景的服务器 推流的场景,一般建议走RTMP,需要特定系统对接的,再走RTSP。
基于live555的视频直播 DM368IPNC RTSP分析 本文是 我对TI DM368IPNC RTSP直播部分的代码分析。 appro IPNC视频流直播部分用的RTSP,基于live555,通过改写wis-streamer实现的,在live555官网上有wis-streamer的代码下载,appro将其修改,在framedsource 感慨:C++ 真的太好用了 现在懒了,文字部分就直接复制出来,源文档使用的是excel, 基于live555的视频直播 DM368IPNC RTSP分析 一、描述 appro利用live555实现了三种视频流以及一种音频流的直播 1、MJPEG Video 2、H264 Video 3、MPEG4 Video 4、PCM Audio live555是一个开源的RTSP C++类库,默认实现音视频文件的点播,但是可以通过继承相关类 部分可不做任何改动 四、RTSP直播 main主程序 这与普通的live555 rtsp service结构并无太多区别,只是由于要传输的视频类型较多,所以多了很多if else,这部分比较简单,
技术背景我们在对接外部开发者的时候,遇到这样的技术诉求,客户用于地下管道检测场景,需要把摄像头的数据拉取过来,然后叠加上实时位置、施工单位、施工人员等信息,然后对外输出新的RTSP流,并本地录制一份带动态水印叠加后的数据 技术实现废话不多说,下图先通过Android平台拉取RTSP流,然后把解码后的yuv或rgb数据回上来,以图层的形式投递到推送端,需要加水印的话,添加文字水印或图片水印(系动态水印)图层,底层做动态叠加后二次编码打包 ,通过启动轻量级RTSP服务,发布RTSP流,生成二次处理后的RTSP新的拉流url,如果需要推送至RTMP,只要调用推送RTMP的接口即可,本地录制,可以设置录制目录等信息,保存二次编码后的MP4文件到本地 }发布RTSP流://发布/停止RTSP流class ButtonRtspPublisherListener implements View.OnClickListener {public void onClick stream_publisher_.StartRtspStream()) {stream_publisher_.try_release();Log.e(TAG, "调用发布rtsp流接口失败!")
EasyPusher是一款国产的RTSP直播录制推流客户端工具,它支持Windows、Linux、Android、iOS等操作系统。 EasyPusher采用RTSP推流协议,其中安卓版EasyPusher的Github托管地址为https://github.com/EasyDarwin/EasyPusher-Android。 不过EasyPusher有好几年没更新了,尤其安卓版的EasyPusher仍在调用过时的support支持库,而非推出多年的AndroidX库。 点击App界面右下角的设置按钮,打开设置页面如下图所示,注意修改上方编辑框中的服务端推流地址,比如rtsp://124.70.***.***/live/test。 注意,由于EasyPusher仅支持RTSP推流,不支持RTMP等其他推流协议,因此上面只能填写RTSP推流链接。
区别于传统“播放器或推流器”的单点工具,SmartMediaKit 更像是一套“积木式音视频内核”,用户可按需加载所需模块,构建灵活可控的视频通信链路,广泛应用于安防监控、工业采集、远程协作、智能终端等多种高实时性场景 录像模块(Record Stack) 推送端录像 SDK 推流过程中同步本地录像,支持 MP4 封装格式,适配证据存储、合规留档等场景。 播放端录像 SDK 支持实时录像、支持封装音视频混流。 下列为基于实际项目场景整理的典型链路组合,便于开发者按需参考部署: 场景一:RTSP 监控画面低延迟播放(安卓 / Windows)适用场景:工业视频监控、智能机器人远程操控、安防可视化管理等 链路组合 :RTSP 视频源 → [RTSP 播放器 SDK] → 安卓 / Windows 播放界面推荐模块配置: 播放端使用 RTSP Player SDK(开启低延迟模式 + 硬解支持) 开启 YUV/RGB 推荐组合: RTSP 播放模块(解码 RTSP 视频流) RTSP → RTMP 转发模块(编码并转推) 本地录像模块(边转边录) 部署环境:Linux/Android 边缘设备,arm64 架构
JBPM工作流框架应用 导入jar包 jbpm案例中获取配置文件,并配置本地数据库 创建流程,并进行相关修改 流程及流程内任务等的草操作 import java.io.File; helloworld2.png");//读取图片文件 String id = deployment.deploy();//完成部署 System.out.println(id); // 方式二----读取压缩文件流 name + " key = " + key + " deploymentId = " + deploymentId); } } /** * 删除流程定义 */ @Test public void test4( InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName); //通过输出流将文件保存到本地磁盘
写这篇博客主要是为了给新入门的流媒体开发者解惑,现在看到各种开发者的需求:网页播放RTSP摄像机、微信播放RTSP摄像机、网页播放摄像机SDK输出的视频流、网页播放第三方流媒体平台输出的视频流、包括Github /visual-opening/skeyewebplayer将整个过程进行拆分为二:一、通过RTSP或者SDK获取H.264视频流和AAC音频流,获取RTSP流我们可以用ffmpeg、SkeyeRTSPClient 、librtmp、SkeyeRTMPPusher等多种方案推流,如果采用ffmpeg为工具进行RTSP拉流的话,我们建议推流也用ffmpeg,这样直接将音频数据在ffmpeg内部进行一次filter转码 ):SkeyeRTMP_File:读取MP4文件推RTMP直播流,实现虚拟直播;SkeyeRTMP_RTSP:读取RTSP流并进行转换成RTMP推流到RTMP服务器;SkeyeRTMP_SDK:调用SDK 获取音视频流,再推流RTMP;SkeyeRTMP Android:安卓推送摄像头/屏幕进行RTMP直播;SkeyeRTMP iOS:iOS苹果推送摄像头进行RTMP直播;完备的调用示例,加上全平台的支持
最近很多用户在使用我们经典流媒体EasyNVR的时候提出一个需求:是否可以精简其中的功能模块,只做一个拉转推的功能,不需要流媒体的功能,类似于做一个视频网关的软件产品。答案当然是可以的。 TSINGSEE青犀视频现有的平台中已经有两款产品支持这样的功能,一款是EasyRTSPLive,另一款是EasyRTMPLive,他们的特色功能就是拉转推视频网关的功能。 image.png 拿EasyRTSPLive来说,当前我们编译出来的DEMO,供大家测试使用的是拉一路推一路的工具版,基于这个需求,不少网友找过来问能否有一个多通道的工具版,这个也是可以的,只需要修改代码就能完成 EasyRTSPLive 上克隆代码到本地; 2、用VS2010打开工程文件,如下图: image.png 3、找到通道限定的位置代码,在main.cpp 定义的全局变量中,如下: //用户可自定义的RTSP 转RTMP拉流转推流路数,官方工具版默认1路拉转推,用户可通过代码定制多路RTSP转RTMP #define MAX_CHANNEL_INDEX 1 4、修改为自己所需要的通道数量,如#define