API 21引入了Camera2,deprecated掉了Camera,确立Image作为相机得到的原始帧数据的载体;硬件编解码的MediaCodec类加入了对Image和Image的封装ImageReader U/V的平(Planar)面和半平面(Semi-Planar) U/V的Planar存储(YUV420P) 我测试不同安卓设备,找到存储格式是Planar的设备: Log.i 是U数据,即步长为2。 每行实际的U数据只占1/2 ,buffer size / rowStride = 540 只有540行,说明纵向采样也是1/2 ,但buffer size 是 plane[0]的 1/2而不是1/4, 这就是为什么plane[1]和plane[2]的buffer size 是plane[0]的1/2而不是1/4的原因。
在移动端音视频领域,单纯的 RTMP 推流已不再是技术天花板。 ,打造一套集采集、编码、推流、服务、存储于一体的高可靠、低延迟音视频解决方案。 2. Camera2 API 的高效采集与YUV处理Camera2 API 相比旧版 Camera API 提供了更强大的控制力,但也更为复杂。 传统的推流端通常只负责推流,拉流需要依赖 Nginx 或 SRS 等服务器。但该 SDK 允许 Android 设备变身为 RTSP 服务器。 从“推流端”到“边缘计算节点”的角色蜕变 最令人印象深刻的,是 SDK 内置的 轻量级 RTSP 服务。
不过呢,音视频中,流媒体协议rtsp也占有很大份额!日常生活呢,我们也会遇到一些不同流媒体协议转换的问题!本篇记录实现一个rtsp转rtmp直播流的程序!闲言少叙,接下来置入主题。 需求 有一个摄像头,比如海康的监控摄像头,可以通过rtsp流的方式访问其视频画面!需要将其画面转换为rtmp协议,并实现直播! 实现思路 我们的程序,称之为rtsp2rtmp,使用该程序实现拉取摄像头rtsp视频流,并将rtmp视频流转换为rtmp视频流,然后推送到直播服务器,直播服务器采用nginx+rtmp_module的方式实现 rtsp2rtmp,使用FFmpeg API来实现! << std::endl; // 2.获得流信息 m_nRet = avformat_find_stream_info(m_pRtspAVFormatContext, 0); if (m_nRet
下载 npm install node-rtsp-stream(插件) 前端 下载 jsmpeg.js框架。引入对应开发页面。(详细请参考 jsmpeg.js 文档) html js 部分
标题:使用Java编写FFmpeg实现RTSP拉流推流RTMP详解 引言: RTSP(Real Time Streaming Protocol)是一种用于实时媒体传输的网络协议,而RTMP(Real Time ffmpeg多个视频流推流推向一个rtsp地址 FFmpeg可以将多个视频流推向一个RTSP地址。 下面是一个示例的FFmpeg命令,演示了如何将两个视频流推送到同一个RTSP地址: ffmpeg -re -i video1.mp4 -re -i video2.mp4 -filter_complex "[0:v]scale=640:480[v0];[1:v]scale=640:480[v1];[v0][v1]concat=n=2:v=1:a=0[outv]" -map "[outv]" -f rtsp 然后,使用-i参数指定了两个输入视频文件(video1.mp4和video2.mp4)。 接下来,使用-filter_complex参数来进行视频流的复杂过滤。
EasyScreenLive是一款简单、高效、稳定的集采集,编码,组播,推流和流媒体RTSP服务于一身的同屏功能组件,在大屏显示投屏,无纸化会议同屏演示,课堂同屏等,可以配合全屏显示,在很多项目中都能够实现项目推流的需求 上一篇文中我们讲了EasyScreenLive推RTSP流到EasyDarwin(EasyScreenLive推流组件推RTSP流到EasyDarwin),本文以EasyDSS为主,带着大家演示一遍看下推 ,Port为推流端口,在线演示的端口被定义为10035,Stream为推流标识,如上图,我们自定义推流标识为hls/Seven,填写完毕信息后,我们点击StartPushRTMP按钮,日志栏提示推流成功 ,下面我们看下EasyDSS的状态展示: 2、EasyDSS在线演示 EasyDSS的在线演示地址为:http://demo.easydss.com:10086/ 注:之前的版本是用的10080端口, 打开WEB页面,在直播管理页面->视频直播列表显示中,可以看到刚刚我们推上来的流信息,有ID、名称、推流开关、推流鉴权、推流计划、录像计划、状态、分享开关、直播状态、推送流量等信息显示,方面直观,除了页面可以直播播放以外
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页面,在推流列表中,我们可以看到刚才推送的流信息
用户反馈说华为手机(安卓)小程序推流时声音持续卡顿,始终不会恢复且稳定复现,但是 iOS 小程序推流时声音却是正常的。二、疑惑经过一系列常规处理后,问题依然存在。 疑惑点1、同样是小程序推流,为什么安卓有问题,iOS 就没有问题?疑惑点2、服务器和客户端代码都进行了回退,问题依然存在,什么情况? 后来进一步验证发现,不仅是华为手机,所有的安卓手机小程序推流声音都有问题。按照一般的思路,既然 iOS 设备的小程序没有问题,理论上安卓设备的小程序也不应该有问题,那么很可能是后续链路出现了问题。 反观安卓设备小程序推流的情况,concealedSample/s 数据始终在 2.5k/s 左右,影响了声音的正常播放。 方案1既然是安卓小程序推的音频流有问题,首先想到的就是在源头上解决问题,但是了解小程序直播业务开发的小伙伴一定都知道小程序的底层 SDK 是腾讯提供的,特别是音视频能力,很多接口都没有暴露出来。
channel=1&subtype=0 举例取1通道主码流rtsp://admin:123456@192.168.1.100:554/cam/realmonitor? 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: 中维 rtsp://ip地址:端口/live0或1.264 举例rtsp://192.168.1.100:554/1ive0.264 天地伟业 rtsp://ip地址:端口 举例rtsp://192.168.1.100
封装 Camera2 API、AudioRecord 以及 Native 推流库。 管理数据采集(YUV/PCM)到编码推流的全流程。 UI 层 (MainActivity): 纯展示与控制。 如果不启动前台服务(在通知栏显示一条常驻通知),App 切后台后几分钟内网络和 CPU 就会被限制,导致推流中断。2. 数据的产生 (Camera2 API)在 Camera2Helper.java 中,我们通过 ImageReader 获取 YUV 数据(格式通常为 YUV_420_888)。2. 五、 核心实现四:RTSP Server 与多路分发系统不仅支持 RTMP 推流,还内置了一个轻量级的 RTSP Server。这意味着手机本身变成了一个 IPC(网络摄像机)。 灵活性:Service 承载业务,Activity 仅作展示,实现了完美的解耦,支持断线重连和后台静默推流。 功能全:同时支持 RTMP 推流、RTSP 服务端、水印叠加、软硬编码自动切换。
好多开发者一直搞不清我们轻量级RTSP服务SDK和RTSP推流SDK的区别,以下是相关区别: daniulive_chart_20200130.png 1. rtsp流StartRtspStream启动rtsp流停止rtsp流StopRtspStream停止rtsp流 2. RTSP推流模块:RTSP推流模块,和RTMP推流模块类似,适用于内网或公网环境下,主要适用于第三方RTSP服务对接,如darwin stream server,或者第三方RTSP服务平台,如视频分析平台等特定场景的服务器 推流的场景,一般建议走RTMP,需要特定系统对接的,再走RTSP。 : 1表示UDP传输rtp包; 2表示TCP传输rtp包设置推送RTSP的URLSetPushRtspURL设置推送RTSP的URL开始RTSP推送StartPushRtsp启动推送RTSP流停止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,这部分比较简单,
PS:在高于安卓10的系统里,so的路径是/apex/com.android.runtime/lib64/libart.so,低于10的则在system/lib64/libart.so 函数名称 参数 pthread_create_addr,{ onEnter:function(args){ console.log(args[0], args[1], args[2] onEnter: function (args) { var str1 = args[0].readCString(); var str2 == -1 || str2.indexOf("test") ! init_array_ptr:0x0 [call_constructors] init_func:0x0 -> null [call_constructors] libutils.so count:2
技术背景我们在对接外部开发者的时候,遇到这样的技术诉求,客户用于地下管道检测场景,需要把摄像头的数据拉取过来,然后叠加上实时位置、施工单位、施工人员等信息,然后对外输出新的RTSP流,并本地录制一份带动态水印叠加后的数据 技术实现废话不多说,下图先通过Android平台拉取RTSP流,然后把解码后的yuv或rgb数据回上来,以图层的形式投递到推送端,需要加水印的话,添加文字水印或图片水印(系动态水印)图层,底层做动态叠加后二次编码打包 ,通过启动轻量级RTSP服务,发布RTSP流,生成二次处理后的RTSP新的拉流url,如果需要推送至RTMP,只要调用推送RTMP的接口即可,本地录制,可以设置录制目录等信息,保存二次编码后的MP4文件到本地 rtsp的流数据,可以先拿到分辨率,然后根据分辨率,计算编码的码率:class EventHandlePlayerV2 implements NTSmartEventCallbackV2 {@Overridepublic }发布RTSP流://发布/停止RTSP流class ButtonRtspPublisherListener implements View.OnClickListener {public void onClick
, 30 5月 2022 作者 847954981@qq.com 后端学习, 我的编程之路 Kotlin安卓开发学习(2) 和很多现代高级语言一样,Kotlin也是面向对象的。 这样,我们就拥有了三种方法来实例化类: val student1 = Student() val student2 = Student("Jack", 19) val student3 = Student
JBPM工作流框架应用 导入jar包 jbpm案例中获取配置文件,并配置本地数据库 创建流程,并进行相关修改 流程及流程内任务等的草操作 import java.io.File; ProcessEngine processEngine = conf.buildProcessEngine();//创建流程引擎对象 } /** * 创建流程引擎对象的方法 */ @Test public void test2( ();//完成部署 System.out.println(id); // 方式二----读取压缩文件流 // NewDeployment deployment = processEngine.getRepositoryService InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName); //通过输出流将文件保存到本地磁盘 out.close(); in.close(); } /** * 启动一个流程 */ @Test public void test7(){ // String processDefinitionId = "请假流程-2"
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推流链接。
纯音频推流 如果您的直播场景是纯音频直播,不需要视频画面,那么您可以不执行 第4步 中的操作,取而代之的是开启 TXLivePushConfig 中的enablePureAudioPush配置。 [](javascript: void 0;) //通过修改 enablePureAudioPush 开关,开启纯音频推流 TXLivePushConfig *_config = [[TXLivePushConfig alloc] init]; _config.enablePureAudioPush = YES; // YES 为启动纯音频推流,只有在调用 startPush 前设置才会生效。 config]; NSString* rtmpUrl = @"rtmp://test.com/live/xxxxxx"; [_pusher startPush:rtmpUrl]; 如果您启动纯音频推流 2. 设定画面清晰度 调用 TXLivePush 中的setVideoQuality接口,可以设定观众端的画面清晰度。
最近很多用户在使用我们经典流媒体EasyNVR的时候提出一个需求:是否可以精简其中的功能模块,只做一个拉转推的功能,不需要流媒体的功能,类似于做一个视频网关的软件产品。答案当然是可以的。 TSINGSEE青犀视频现有的平台中已经有两款产品支持这样的功能,一款是EasyRTSPLive,另一款是EasyRTMPLive,他们的特色功能就是拉转推视频网关的功能。 image.png 拿EasyRTSPLive来说,当前我们编译出来的DEMO,供大家测试使用的是拉一路推一路的工具版,基于这个需求,不少网友找过来问能否有一个多通道的工具版,这个也是可以的,只需要修改代码就能完成 1、从github https://github.com/tsingsee/EasyRTSPLive 上克隆代码到本地; 2、用VS2010打开工程文件,如下图: image.png 3、找到通道限定的位置代码 ,在main.cpp 定义的全局变量中,如下: //用户可自定义的RTSP转RTMP拉流转推流路数,官方工具版默认1路拉转推,用户可通过代码定制多路RTSP转RTMP #define MAX_CHANNEL_INDEX