首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏写个呆萌

    Camera2 YUV_420_888

    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的原因。

    3.8K50发布于 2020-11-13
  • 来自专栏C/C++与音视频

    视频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。 客户端播放效果如下:。

    9.7K30编辑于 2022-06-14
  • 来自专栏流媒体

    Android RTMP之MediaCodec硬编码二(RTMPDump

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

    5.7K50发布于 2018-08-23
  • 来自专栏RTSP/RTMP直播相关

    如何实现RTMP推送Android Camera2数据

    Camera2简介 在Google 推出Android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camera2), 之前使用的API1 在API架构方面, Camera2和之前的Camera有很大区别, APP和底层Camera之前可以想象成用管道方式连接, 如下图: ​ 这里引用了管道的概念将设备和摄像头之间联通起来,系统向摄像头发送 下面是 camera2包中的主要类: ​其中 CameraManager 是那个站在高处统管所有摄像投设备(CameraDevice)的管理者,而每个 CameraDevice 自己会负责建立 CameraCaptureSession Camera2 API调用基础流程: 通过context.getSystemService(Context.CAMERA_SERVICE) 获取CameraManager; 调用CameraManager 介绍,和RTMP调用流程,感兴趣的可以自行学习。

    2K00发布于 2020-04-05
  • 来自专栏小锋学长生活大爆炸

    如何使用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_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))) sizeStr = str(size RTMP是什么? RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。 RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。

    12.7K20发布于 2020-08-13
  • 来自专栏流媒体

    基于FFmpeg进行RTMP(二)

    在前面一节基于FFmpeg进行RTMP(一)我们写了最简单的一版代码。但细心调试过的兄弟会发现当我们把文件换成mp4后,发现上面的代码在写入文件头时报错。也就是说上一版的代码是有bug的。 说明我们的速度有问题。快了或慢了都会有问题。我们大概可以定位到,我们在计算延时的时候出现了错误。 如果是则必须传 //创建输出上下文 ret = avformat_alloc_output_context2(&octx, NULL, "flv", outUrl); if ( ////////////////////////////////////////////////////////////////// // 准备 << endl; //每一帧数据 //int64_t pts [ pts*(num/den) 第几秒显示] //int64_t dts 解码时间 [P帧(相对于上一帧的变化

    9.5K50发布于 2018-08-23
  • 来自专栏LiteMedia

    LiteCVR防监控平台RTMP平台级联到上级的方法

    有用户反馈,现场的设备是运动相机,不支持国标和其他协议接入LiteCVR平台,只能通过rtmp_push推送到LiteCVR平台。 LiteCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发 RTSP、RTMP、FLV、HLS、WebRTC等格式的视频。 LiteCVR平台机制上并不支持rtmp_push协议的级联,但是依然有办法可以实现用户的需求。 因为现场只有这种协议,所以,我们将rtmp_push协议分发出来的RTSP再接入到LiteCVR平台,转换了一道变成了RTSP接入,再次级联就能成功获取到视频通道了。

    49260编辑于 2023-11-10
  • 来自专栏码客

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

    前言 搭建基于rtmp协议的服务器。 协议上传输http),如果使用了https,需要安装OpenSSL库 yum install -y openssl openssl-devel #安装Nginx yum install -y nginx 2、 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 请求路径,文件存放路径 hls_fragment 5s; #每个TS文件包含5秒的视频内容 } } } 启动nginx cd /usr/local/nginx

    9.1K20发布于 2019-10-22
  • 来自专栏韩曙亮的移动开发专栏

    【Android RTMP】RTMPDump 流过程 ( 独立线程 | 创建器 | 初始化操作 | 设置地址 | 启用写出 | 连接 RTMP 服务器 | 发送 RTMP 数据包 )

    文章目录 一、 Java 层传入的 RTMP 地址处理 二、 RTMPDump 流线程 三、 创建 RTMP 对象 四、 初始化 RTMP 对象 五、 设置 RTMP 地址 六、 启用 RTMP Java 传递字符串数据到 JNI : 启动时 , Java 层会将 RTMP 地址传递给 JNI ; 2 . jstring 类型转为 char* 类型 : 将 Java 字符串转为 C 字符串 独立线程 : RTMP 操作需要在一个独立的线程中完成 , 涉及到网络的操作都是耗时操作 , 在 Android 中都要在线程中执行 ; 2 . ---- 初始化 RTMP 对象 , 并设置超时时间 ; // 2. } // 2.

    4K20编辑于 2023-03-27
  • 来自专栏码客

    OSSRS搭建rtmp服务器

    srs/wiki/v2_CN_SampleFFMPEG https://github.com/ossrs/srs/wiki/v2_CN_FFMPEG 用于处理或处理并转发RTMP服务器。 /objs/srs -c conf/ffmpeg.transcode.conf>log.txt & ffmpeg -re -stream_loop -1 -i /usr/local/srs2/doc main -preset medium -acodec copy -f flv -y rtmp://127.0.0.1:1935/live/test2 涉及的包括: 编码器推送rtmp://rtmp.psvmc.cn :1935/live/test 观看原始rtmp://rtmp.psvmc.cn:1935/live/test 命令转码rtmp://rtmp.psvmc.cn:1935/live/test2 /log.txt & ffmpeg -re -stream_loop -1 -i /data/rtmptest.mp4 -vcodec copy -acodec copy -f flv -y rtmp

    8.9K30发布于 2019-10-22
  • 来自专栏用户1692782的专栏

    协议转换之rtsp转rtmp

    本篇记录实现一个rtsp转rtmp直播的程序!闲言少叙,接下来置入主题。 需求 有一个摄像头,比如海康的监控摄像头,可以通过rtsp的方式访问其视频画面! 实现思路 我们的程序,称之为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 m_nRet < 0) { break; } av_packet_unref(&pkt); github传送门 https://github.com/mlfcjob/Rtsp2Rtmp.git

    5K30发布于 2020-07-14
  • 来自专栏RTMP推送

    Android音视频开发:基于 Camera2 API 实现RTMP、RTSP服务与录像一体化方案

    ​在移动端音视频领域,单纯的 RTMP 已不再是技术天花板。 ,打造一套集采集、编码、、服务、存储于一体的高可靠、低延迟音视频解决方案。 2. Camera2 API 的高效采集与YUV处理Camera2 API 相比旧版 Camera API 提供了更强大的控制力,但也更为复杂。 传统的端通常只负责,拉需要依赖 Nginx 或 SRS 等服务器。但该 SDK 允许 Android 设备变身为 RTSP 服务器。 本方案通过 Camera2Helper 实现了一次 YUV 数据采集,却能同时支撑 RTMP 远端直播、RTSP 局域网分发 以及 MP4 本地存证 三大业务

    74700编辑于 2025-12-07
  • 来自专栏视频云直播

    rtmp异常快速恢复方案

    2RTMP 302重定向具体方案 为了解决流过程中,网络异常问题,采用了RTMP 302 重定向的方案,具体实现逻辑如下图所示: 步骤一,流过程中,rtmp server端支持持续弱网检测,支持域名 详情请查看具体的RFC文档: 1.https://tools.ietf.org/html/rfc7016#section-3.5.1.6 2、http://www.adobe.com/cn/products 上述解决方案,在流过程中,通过RTMP 302的方式获取到服务器慢速信息,根据客户端以及服务器端慢速信息,来进行断流重,快速恢复直播,提高成功率。 对上述方案进行扩展,在开始时,利用302进行服务端的负载均衡。服务器端在刚收到客户端数据时,给客户端发送RTMP 302信息,来进行高负载302调度,提高的成功率。 3、结论 综上所述: 1、在流过程中,给客户端发送RTMP 302控制消息,客户端使用服务器提供的重定向地址,进行断流重,可以快速恢复异常,提升上行流质量; 2、在开始时,服务器端可以综合后台机器负载以及带宽资源情况

    3.3K10编辑于 2022-01-12
  • 来自专栏流媒体

    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)这个就和之前的文件一样了。 buffers, pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height, 1); //摄像头数据为

    7.9K51发布于 2018-08-23
  • 来自专栏叹世界

    C++ 调用 ffmpeg 进行 rtmp

    效果 Clion 中演示的效果 终端中运行也没有问题 思路 通过 fork 一个子进程来调用 ffmpeg 进行,视频帧通过 opencv 来获取,通过管道传输到子进程,实现 代码 需要注意的是 ffmpeg,其次视频的帧率一定要匹配,否则会出现莫名其妙的问题 main.cc: #include <iostream> #include <csignal> #include <opencv4/opencv2/ = "rtmp://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

    6.3K20编辑于 2022-01-12
  • 来自专栏职场亮哥

    排查rtmp协议时握手bug

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

    2.4K21发布于 2020-10-10
  • 来自专栏ECS服务器

    OSSRS搭建rtmp服务器

    /ossrs/srs/wiki/v2_CN_SampleFFMPEG https://github.com/ossrs/srs/wiki/v2_CN_FFMPEG 用于处理或处理并转发RTMP服务器 /objs/srs -c conf/ffmpeg.transcode.conf>log.txt & 复制 ffmpeg -re -stream_loop -1 -i /usr/local/srs2 profile:v main -preset medium -acodec copy -f flv -y rtmp://127.0.0.1:1935/live/test2 复制 涉及的包括: 编码器推送rtmp://rtmp.psvmc.cn:1935/live/test 观看原始rtmp://rtmp.psvmc.cn:1935/live/test 命令转码rtmp://rtmp.psvmc.cn :1935/live/test2 观看转码rtmp://rtmp.psvmc.cn:1935/live/test_ff 示例配置 配置路径:/usr/local/srs/conf/z.conf listen

    5.9K42编辑于 2023-04-18
  • 来自专栏流媒体

    基于FFmpeg进行RTMP(一)简介

    如果我们使用了网络拉等等,要先初始化。 如果是则必须传 //创建输出上下文 ret = avformat_alloc_output_context2(&octx, NULL, "flv", outUrl); if ( ////////////////////////////////////////////////////////////////// // 准备 << endl; //每一帧数据 //int64_t pts [ pts*(num/den) 第几秒显示] //int64_t dts 解码时间 [P帧(相对于上一帧的变化 如果你是在无法解开这个问题,请看下节基于FFmpeg进行RTMP(二)

    14.8K41发布于 2018-08-23
  • 来自专栏LiteMedia

    LiteCVR防监控平台使用RTMP,静音帧导致无法播放FLV

    众所周知,在防监控领域中,远程视频监控技术的应用非常广泛。在工地监控中,它可以帮助监管部门和工程项目管理者及时掌握现场施工情况,发现是否存在违规、危险行为,保障工人安全和现场施工质量。 有用户反馈,现场设备使用RTMP协议接入到视频监控汇聚LiteCVR平台,HLS和webrtc格式的视频都能正常播放,FLV视频却播放不了,请求我们协助排查和解决。 技术人员立即对现场情况进行排查,通过使用OBS工具流进行播放,发现OBS所有协议都能正常播放。使用海康设备进行测试,FLV视频无法加载。经过分析得知,原来是静音帧导致设备断流所致。 解决上述问题,可在配置文件中修改相关参数,具体配置如下:配置完成后保存并重启,此时设备使用RTMP协议进行,LiteCVR视频汇聚平台上的FLV视频已经能正常播放了。

    44420编辑于 2023-11-07
  • 来自专栏流媒体

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

    在Android平台下用FFmepg解析视频文件并进行RTMP。如果对FFmpeg基础不熟或者不知道如何在Android项目中使用,请先阅读流媒体专栏里之前的文章。 新增函数 异常处理 设置回调方法 常见问题 源码 新增函数 首先我们将所有FFmpeg的操作抽取到一个类里面,然后增加方法。 (二)中使用的代码一致,我们直接拷贝过来即可。 源码见末尾 异常处理 在我们之前的代码中,并没有做异常处理。这样在正式的使用中肯定不太好的。所以我们加上try catch。统一进行资源释放。 源码见末尾 设置回调方法 为了方便我们查看的信息,我们新增一个回调类。

    8.5K20发布于 2018-08-23
领券