网站做导航条可以发描文本的网站

pingmian/2026/1/20 10:47:04/文章来源:
网站做导航条,可以发描文本的网站,企业公示信息查询系统贵州,网站服务器租用协议今天某乎收到个问题推荐#xff0c;如何实现RTSP回调YUV数据#xff0c;用于二次处理#xff1f; 正好前些年我们做RTSP和RTMP直播播放的时候#xff0c;实现过相关的需求#xff0c;本文就以Android为例#xff0c;大概说说具体实现吧。 先说回调yuv或rgb这块意义吧如何实现RTSP回调YUV数据用于二次处理 正好前些年我们做RTSP和RTMP直播播放的时候实现过相关的需求本文就以Android为例大概说说具体实现吧。 先说回调yuv或rgb这块意义吧不管是RTSP还是RTMP直播播放模块解码后的yuv/rgb数据可以实现比如快照编码保存png或jpeg、回调给第三方用于比如视频分析、亦或比如回调给Unity实现Unity平台下的绘制。 为了图文并茂让大家有个基本的认识先上张图demo展示的是本地播放的同时可把yuv或rgb回上来供上层做二次处理 我们把协议栈这块处理放到JNI下播放之前设置回调 libPlayer.SmartPlayerSetExternalRender(playerHandle, new I420ExternalRender()); I420ExternalRender()具体实现 /** SmartPlayer.java* SmartPlayer* * Github: https://github.com/daniulive/SmarterStreaming* * Created by DaniuLive on 2015/09/26.*/class I420ExternalRender implements NTExternalRender {// public static final int NT_FRAME_FORMAT_RGBA 1;// public static final int NT_FRAME_FORMAT_ABGR 2;// public static final int NT_FRAME_FORMAT_I420 3;private int width_ 0;private int height_ 0;private int y_row_bytes_ 0;private int u_row_bytes_ 0;private int v_row_bytes_ 0;private ByteBuffer y_buffer_ null;private ByteBuffer u_buffer_ null;private ByteBuffer v_buffer_ null;Overridepublic int getNTFrameFormat() {Log.i(TAG, I420ExternalRender::getNTFrameFormat return NT_FRAME_FORMAT_I420);return NT_FRAME_FORMAT_I420;}Overridepublic void onNTFrameSizeChanged(int width, int height) {width_ width;height_ height;y_row_bytes_ (width_ 15) (~15);u_row_bytes_ ((width_ 1) / 2 15) (~15);v_row_bytes_ ((width_ 1) / 2 15) (~15);y_buffer_ ByteBuffer.allocateDirect(y_row_bytes_ * height_);u_buffer_ ByteBuffer.allocateDirect(u_row_bytes_* ((height_ 1) / 2));v_buffer_ ByteBuffer.allocateDirect(v_row_bytes_* ((height_ 1) / 2));Log.i(TAG, I420ExternalRender::onNTFrameSizeChanged width_ width_ height_ height_ y_row_bytes_ y_row_bytes_ u_row_bytes_ u_row_bytes_ v_row_bytes_ v_row_bytes_);}Overridepublic ByteBuffer getNTPlaneByteBuffer(int index) {if (index 0) {return y_buffer_;} else if (index 1) {return u_buffer_;} else if (index 2) {return v_buffer_;} else {Log.e(TAG, I420ExternalRender::getNTPlaneByteBuffer index error: index);return null;}}Overridepublic int getNTPlanePerRowBytes(int index) {if (index 0) {return y_row_bytes_;} else if (index 1) {return u_row_bytes_;} else if (index 2) {return v_row_bytes_;} else {Log.e(TAG, I420ExternalRender::getNTPlanePerRowBytes index error: index);return 0;}}public void onNTRenderFrame(int width, int height, long timestamp){if ( y_buffer_ null )return;if ( u_buffer_ null )return;if ( v_buffer_ null )return;y_buffer_.rewind();u_buffer_.rewind();v_buffer_.rewind();/*if ( !is_saved_image ){is_saved_image true;int y_len y_row_bytes_*height_;int u_len u_row_bytes_*((height_1)/2);int v_len v_row_bytes_*((height_1)/2);int data_len y_len (y_row_bytes_*((height_1)/2));byte[] nv21_data new byte[data_len];byte[] u_data new byte[u_len];byte[] v_data new byte[v_len];y_buffer_.get(nv21_data, 0, y_len);u_buffer_.get(u_data, 0, u_len);v_buffer_.get(v_data, 0, v_len);int[] strides new int[2];strides[0] y_row_bytes_;strides[1] y_row_bytes_;int loop_row_c ((height_1)/2);int loop_c ((width_1)/2);int dst_row y_len;int src_v_row 0;int src_u_row 0;for ( int i 0; i loop_row_c; i){int dst_pos dst_row;for ( int j 0; j loop_c; j ){nv21_data[dst_pos] v_data[src_v_row j]; nv21_data[dst_pos] u_data[src_u_row j];}dst_row y_row_bytes_;src_v_row v_row_bytes_;src_u_row u_row_bytes_;}String imagePath /sdcard / testonv21 .jpeg;Log.e(TAG, I420ExternalRender::begin test save iamge image_path: imagePath);try{File file new File(imagePath);FileOutputStream image_os new FileOutputStream(file); YuvImage image new YuvImage(nv21_data, ImageFormat.NV21, width_, height_, strides); image.compressToJpeg(new android.graphics.Rect(0, 0, width_, height_), 50, image_os); image_os.flush(); image_os.close();}catch(IOException e){e.printStackTrace();}Log.e(TAG, I420ExternalRender::begin test save iamge--);}*/Log.i(TAG, I420ExternalRender::onNTRenderFrame w width h height timestamp timestamp);// copy buffer// test// byte[] test_buffer new byte[16];// y_buffer_.get(test_buffer);// Log.i(TAG, I420ExternalRender::onNTRenderFrame y data: bytesToHexString(test_buffer));// u_buffer_.get(test_buffer);// Log.i(TAG, I420ExternalRender::onNTRenderFrame u data: bytesToHexString(test_buffer));// v_buffer_.get(test_buffer);// Log.i(TAG, I420ExternalRender::onNTRenderFrame v data: bytesToHexString(test_buffer));}} 为了验证回上来的数据是否正常我们加了保存jpeg文件的代码。 当然回调yuv或rgb可以做的更精细比如我们windows的RTMP或RTSP播放器回调数据可以指定分辨率比如缩放和frame类型 /*设置视频回调, 吐视频数据出来, 可以指定吐出来的视频宽高*handle: 播放句柄*scale_width缩放宽度必须是偶数建议是 16 的倍数)*scale_height缩放高度必须是偶数*scale_filter_mode: 缩放质量, 0 的话 SDK 将使用默认值, 目前可设置范围为[1, 3], 值越大 缩放质量越好但越耗性能*frame_format: 只能是NT_SP_E_VIDEO_FRAME_FORMAT_RGB32, NT_SP_E_VIDEO_FRAME_FROMAT_I420成功返回NT_ERC_OK*/NT_UINT32(NT_API *SetVideoFrameCallBackV2)(NT_HANDLE handle,NT_INT32 scale_width, NT_INT32 scale_height,NT_INT32 scale_filter_mode, NT_INT32 frame_format,NT_PVOID call_back_data, SP_SDKVideoFrameCallBack call_back); 相关视频帧图像格式和帧结构 //定义视频帧图像格式 typedef enum _NT_SP_E_VIDEO_FRAME_FORMAT {NT_SP_E_VIDEO_FRAME_FORMAT_RGB32 1, // 32位的rgb格式, r, g, b各占8, 另外一个字节保留, 内存字节格式为: bb gg rr xx, 主要是和windows位图匹配, 在小端模式下按DWORD类型操作最高位是xx, 依次是rr, gg, bbNT_SP_E_VIDEO_FRAME_FORMAT_ARGB 2, // 32位的argb格式内存字节格式是: bb gg rr aa 这种类型和windows位图匹配NT_SP_E_VIDEO_FRAME_FROMAT_I420 3, // YUV420格式, 三个分量保存在三个面上 } NT_SP_E_VIDEO_FRAME_FORMAT;// 定义视频帧结构. typedef struct _NT_SP_VideoFrame {NT_INT32 format_; // 图像格式, 请参考NT_SP_E_VIDEO_FRAME_FORMATNT_INT32 width_; // 图像宽NT_INT32 height_; // 图像高NT_UINT64 timestamp_; // 时间戳, 一般是0,不使用, 以ms为单位的// 具体的图像数据, argb和rgb32只用第一个, I420用前三个NT_UINT8* plane0_;NT_UINT8* plane1_;NT_UINT8* plane2_;NT_UINT8* plane3_;// 每一个平面的每一行的字节数对于argb和rgb32为了保持和windows位图兼容必须是width_*4// 对于I420, stride0_ 是y的步长, stride1_ 是u的步长, stride2_ 是v的步长,NT_INT32 stride0_;NT_INT32 stride1_;NT_INT32 stride2_;NT_INT32 stride3_;} NT_SP_VideoFrame; 感兴趣的开发者可以酌情参考实现自己的业务逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/87538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

马鞍山建设局网站涿州网站建设公司有哪些

牛客题霸 [求平方根] C题解/答案 题目描述 实现函数 int sqrt(int x). 计算并返回x的平方根 题解&#xff1a; 要求返回平方根&#xff0c;我们就找一个i&#xff0c;使得ii<x&&(i1)(i1)>x 这样的i就是我们要找的答案 注意&#xff0c;x有可能为负数&#xf…

河南郑州app建设网站西安企业名录

首先如果想直接在宿主机上进行使用gs_dump备份需要glibc的版本到2.34及以上&#xff0c;查看版本命令为 ldd --version 如图所示&#xff0c;本宿主机并不满足要求&#xff0c;所以转向在docker容器中进行备份&#xff0c; 然后进入opengauss容器中&#xff0c;命令为 docker…

网站类型定位分析网站关键词在哪里修改

前言 在上一篇文章中&#xff0c;我们学习了如何利用MetaGPT框架构建单智能体和多智能体&#xff0c;并通过一个技术文档撰写Agent和课后作业较为完整的理解一个Agent的需求分析和开发流程&#xff1b;但是技术要和应用结合才能得到更广泛的推广&#xff1b;在本文中&#xff0…

嘉兴手机模板建站wordpress博客破解主题

2023年已经接近尾声&#xff0c;不少人已经开始期待新的一年到来了。不过对于大多数职场人士来说&#xff0c;最近还有一项让人头疼的任务需要完成&#xff0c;这就是撰写2023年个人工作总结。 那么年度个人工作总结怎么写呢&#xff1f;其实很简单&#xff0c;年度工作总结一…

做网站哪个好自己做个购物网站

我的第一道treap题目&#xff0c;treap的模版题。 代码是对着hzw的敲的&#xff0c;一边敲一边理解。。。 主要是熟悉一下treap的各种基本操作&#xff0c;详细细节看代码。 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib>…

网站策划主题北京海淀区公司

为什么要在seafile搞webdavSeafile 一直是一款可靠的文件同步web应用&#xff0c;经过个人测试&#xff0c;同一台机器上&#xff0c;seafile在传输文件时的速度比nextcloud要快&#xff08;可能也与php的设置有关系&#xff09;&#xff0c;这是seafile的优势。但是&#xff0…

建设个人网站用什么软件wordpress禁用主题更新

在我们做项目的时候TP的系统函数或系统类库满足不了我们的需要 所以有些东西需要我们自己去定义&#xff0c;在TP中我们怎么使用自己的函数库和类库呢&#xff1f;在TP系统中提供了三个系统函数库 common.php是全局必须加载的基础函数库&#xff0c;在任何时候都可以直接调用&a…

html5 3d网站网站申请备案成功后怎么建设

最近一直在整理单目测距的内容&#xff0c;想着检测单目测距都写完了&#xff0c;顺手也写个检测跟踪单目测距&#xff0c;算是总结下这部分内容吧&#xff0c;如果有错误&#xff0c;还请不吝赐教&#xff01;&#xff01; 参考文献: YOLOv5DeepSort实现目标跟踪 pytorch yolo…

深圳网站建设网站设计软文推广辽宁省建设银行网站

本文主要给大家分享一个实战项目&#xff0c;通过python代码写一款我们儿时大多数人玩过的游戏---小弹球游戏。只不过当时&#xff0c;我们是在游戏机上玩&#xff0c;现在我们通过运行代码来玩&#xff0c;看看大家是否有不一样的体验&#xff0c;是否可以重温当年的乐趣呢&am…

郑州虚拟货币网站开发wordpress模板+免费下载

阿里妹导读&#xff1a;好的开始是成功的一半&#xff01;工作中&#xff0c;目标的设置是最不能马虎的事情。今天&#xff0c;我们请来孙阳&#xff08;阿里巴巴测试开发专家&#xff09;&#xff0c;他从11年入职至今已有8年。在测试技术目标的KPI设置上&#xff0c;他有一些…

如何写手机适配网站网站全屏视频怎么做

作者&#xff1a;白狼 出处&#xff1a;http://www.manks.top/document/yii2-blog-manage.html 本文版权归作者&#xff0c;欢迎转载&#xff0c;但未经作者同意必须保留此段声明&#xff0c;且在文章页面明显位置给出原文连接&#xff0c;否则保留追究法律责任的权利。相信看了…

网站建设职责要求在线推广

阿丹&#xff1a; 在业务逻辑中的数据存在一部分业务场景&#xff0c;在导出文件或者视频的时候需要将文件暂存在服务器上再上传到oss对象存储或者fastdfs中让用户来下载使用。但是出现的问题就是如果目标文件过大&#xff0c;文件的上传云端和下载本地就会时间拉长&#xff0c…

专业网站设计的网站站长工具 seo综合查询

&#x1f388; 算法并不一定都是很难的题目&#xff0c;也有很多只是一些代码技巧&#xff0c;多进行一些算法题目的练习&#xff0c;可以帮助我们开阔解题思路&#xff0c;提升我们的逻辑思维能力&#xff0c;也可以将一些算法思维结合到业务代码的编写思考中。简而言之&#…

种子搜索网站开发万维网 网站到期

简介&#xff1a; 随着互联网技术的日渐发展、数据规模的扩大与复杂的需求场景的产生&#xff0c;传统的大数据架构无法承载。 作者 | 志羽 来源 | 阿里技术公众号 一 前言 传统的大数据技术起源于 Google 三架马车 GFS、MapReduce、Bigtable&#xff0c;以及其衍生的开源分布…

网站建设模块需求苏州网站建设服务

角膜接触镜是戴在眼角膜上的特殊镜片。角膜接触镜分为硬镜和软镜&#xff0c;软镜即大众常见的“隐形眼镜”&#xff1b;硬镜材质较硬&#xff0c;舒适度略低于软镜&#xff0c;硬镜主要分为OK镜、硬性角膜接触镜和巩膜镜三类。 角膜接触镜分类 资料来源&#xff1a;共研产业咨…

邢台哪个公司做网站好上海网站seo

目录 1、简介 2、下载 2.1下载visual studio 2022 community 2.2下载下载cmake工具 2.3下载源码 2.4下载第三方插件 3、安装 3.1安装visual studio 2022 community 3.2安装cmake 4、编译源码 5、测试 1、简介 Open CASCADE&#xff08;简称…

网站页面效果图怎么做的怎么制作网页设计

从官网下载好IntelliJ IDEA 和scala IntelliJ IDEA 安装scala插件 新建scala项目 建好后&#xff0c;发现src右键--新建---没有 .scala选项 解决方法

网站改版 信科网络济南浩特元辰建设工程有限公司网站

获取指定日期的常用前后节点&#xff08;月初月末周一周末等等&#xff09; 原文:获取指定日期的常用前后节点&#xff08;月初月末周一周末等等&#xff09;注&#xff1a;周节点方面是根据中国习惯&#xff0c;视周一为起&#xff0c;周日为末。 /*-------------------------…

商城网站开发报网络广告推广好的有哪些

Type-C接口的PD充电器&#xff08;如iPhone的20W充电器&#xff09;默认是没有电压输出的&#xff0c;想要让Type-C的充电器输出5V、9V、12V、15V、20V&#xff0c;只需要在产品上使用一颗快充取电芯片XSP08即可。 工作原理&#xff1a; 各类小家电产品如平板电脑、智能穿戴产…

昆明城乡建设网站上海官方最新消息

Prim算法和Kruskal算法都是用于解决最小生成树问题的经典算法&#xff0c;它们在不同情况下有不同的适用性和特点。 Prim算法&#xff1a; Prim算法是一种贪心算法&#xff0c;用于构建一个无向图的最小生成树。算法从一个初始节点开始&#xff0c;逐步添加与当前树连接且具有…