自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 资源 (1)
  • 收藏
  • 关注

原创 android11 input 事件 1 初始化

evenhub 通过epool_create 、epoll_add、 epoll_wait 监测/dev/input/eventX ,是否有事件。listener 实际上就是InputDispatcher,调用InputDispatcher::notifyKey 传递事件。com_android_server_input_InputManagerService.cpp 是jni 实现。将event组合成了一个notifykeyArgs数据结构,同时调用了listener的notifykey方法。

2023-07-15 14:01:46 420

转载 Android Input子系统:Input进程的创建,监听线程的启动

从我个人的理解来看,Android的Input系统其实就是系统级的事件处理、分发框架,它需要的功能模块大致有:事件读取、事件分类、事件分发。那么我们就从整个Input系统的输入源入手,了解事件是如何被输入到Input系统中的。在看代码前我们先想一想,如果要我们设计一个事件分发框架的输入读取模块,要考虑到哪些子模块:事件生成模块(当用户对设备进行操作产生InputEvent,硬件产生中断将事件交给驱动,驱动交给内核,内核交给framework)

2023-07-13 10:32:37 293

原创 QT 之wayland 事件处理分析基于qt5wayland5.14.2

hand_enter 处理调用虚函数pointer_enter:pointer_enter函数在:QWaylandInputDevice::Pointe实现。QWaylandInputDevice::Pointe 主要实现 QtWayland::wl_pointer 类函数。weston 服务接收鼠标事件就调用m_wl_pointer_listener 函数集。1. Qt wayland 初始化 接收鼠标/案件,触摸屏等事件事件。2. wl_pointer 类鼠标事件向weston 注册监听鼠标事件。

2023-03-03 00:08:07 1492

转载 QT 之事件循环简介

代码里会调用给app安装的所有事件过滤器(从代码中的注释看到,app的事件过滤器只能在主线程中被调用),我们给app安装的事件过滤器就是在这个阶段被执行的。可以看到,流程中涉及两个事件过滤器的调用:sendThroughApplicationEventFilters和sendThroughObjectEventFilters,事件过滤器调用完后,才是调用接收者的event函数。可以这么说,每一个事件执行前,都要经过QApplication::notify,所以,我们可以重写notify来对事件做特殊处理。

2023-02-28 18:59:08 1170 1

原创 QT 学习之QPA

【代码】QT 学习之QPA。

2023-02-27 19:51:01 510

原创 ffmpeg 修改libdevices 支持rk3399 摄像头

由于rk3399 isp 驱动差异,ffmpeg 的v4l2 取码流适合rk3399 平台。

2023-02-10 13:50:18 602

原创 流媒体协议分析之webrtc之rtcp

TCP作为RTP控制协议,对于弱网下音视频质量和会话控制具有重要的作用。1.V:RTCP的版本号,一定等于2;P:如果设置,填充位表示数据包包含末尾的附加填充八位字节,不属于控制信息,但包含在长度字段中;FMT:反馈消息类型,并根据PT类型的不同而含义不同。比如当PT=200时,表示ReportBlock的个数;当PT=205时,表示反馈包的类型,1:NACK丢包重传,15:TWCC拥塞控制PT:负载类型,详细请看下表。

2022-12-12 15:06:16 786 1

原创 rk3399 注册drm 驱动

rk3399 基于component 框架,在probe阶段解析dts中各个设备的信息,加到componet match 列表中,等所有的设备加载完毕后,就会引发master设备的bind。3. 解析display_subsystem dts。

2022-11-16 18:01:12 837

原创 流媒体协议分析之webrtc 协议 srs 服务器实现

SrsGoApiRtcPlay和SrsGoApiRtcPublish类处理,new SrsRtcConnection 对象。2. webrtc 通信,通过SDP,知道了udp 通信端口。1.信令交互 ,sdp信令交互。

2022-10-18 15:35:01 1385 4

原创 流媒体分析之srt 协议srs 服务器数据收发

on_srt_packet 创建SrsSrtPacket 函数.执行 srt_source_->on_packet。on_packet : srt 推流 给每个消费者 consumer->enqueue 推数据;do_publishing 函数,调用srt_conn_->read 函数接收推流数据。bridge_->on_packet :srt 转换其他协议的流数据。srt_conn_->write 发送数据。on_srt_packet 函数处理数据。2. srs服务器处理srt拉流处理。

2022-09-20 18:45:23 873

原创 流媒体分析之rtmp协议srs服务器数据收发

conn->handle_publish_message 指向SrsRtmpConn::handle_publish_message。process_publish_message ,处理source->on_audio 及source->on_video 函数。执行_conn->handle_publish_message 函数。rtmp->send_and_free_messages 发送数据。handle_publish_message 处理。do_cycle 执行。

2022-09-19 23:17:07 509

原创 流媒体协议分析之webrtc之rtp

序列号 Sequence number(SN): 16bits,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1,序列号的初始值是随机产生的。如不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。NALU 单元的开始, 必须是 "00 00 00 01" 或 "00 00 01", NALU 头仅一个字节, 其后都是 NALU 单元内容.P: 填充标志,占1bit,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。

2022-09-13 15:35:07 3399

原创 流媒体分析之webrtc之metartc 实现。

1. 连接srs 服务器yang_srs_connectRtcServer,调用yang_srs_getSignal 发送信令及sdp 信息交换。yang_sdp_querySrs 函数:yang_http_post 通过发送本段sdp及接收srs服务器的sdp 信息。yang_http_post 通过http 协议post 接口,发送sdp,并接收对端的sdp。调用yang_rtcconn_getRemoteSdp,解析sdp 信息,函数 yang_srs_getSignal,封装sdp 信息。

2022-09-13 11:20:15 5718

原创 流媒体分析之webrtc协议之ffmpeg 实现

音视频数据接收:libmetartc 库收到数据,通过g_ff_rtc_receiveAudio 及g_ff_rtc_receiveVideo 接口返回音视频数据。webrtc_open 函数调用yang_create_metaConnection 函数创建webrtc 服务操作接口。webrtc_read_header 调用webrtc_open 连接srs服务器。webrtc_init 函数调用webrtc_open 函数。connectSfuServer 连接srs 服务器。

2022-09-13 10:36:35 4185

原创 流媒体分析之webrtc协议测试环境搭建

1. ffmpeg 支持webrtc 协议,使用杨大神MetaRTC 库实现。ffmpeg 实现webrtc 推拉流到srs 服务上。这个章节我们搭建webrtc 测试环境。MetaRTC是一个为嵌入式/物联网打造的webRTC库,为第三代互联网 元宇宙提供webRTC能力。MetaRTC实现了webrtc协议,提供纯C和C++两种版本接口。1. 编译metartc 库函数。编译 mbedtls3 库。

2022-09-13 10:06:14 5745

原创 流媒体分析之rtmp 协议srs 服务器实现

执行 handler->on_tcp_client, handler->on_tcp_client 指向SrsBufferListener::on_tcp_client。SrsTcpListener::listen : 执行srs_tcp_listen 进行tcp 监听。SrsBufferListener::on_tcp_client 函数执行server->accept_client ,server->accept_client 指向SrsServer::accept_client。

2022-09-12 23:52:28 532

原创 流媒体分析之srt 协议srs 服务器实现

SrsFastCoroutine 类构造函数:hander 指向SrsSrtListener,handler->cycle 实际上调用SrsSrtListener::cycle. SrsSrtListener::cycle 函数调用handler_->on_srt_client。SrsSrtServer::accept_srt_client 函数主要主要作用:为每个srt 推拉流创建SrsMpegtsSrtConn,并执行SrsMpegtsSrtConn::start. 至此,srt 监听服务功能完成。

2022-09-11 23:20:07 806

原创 流媒体分析之srt 之libsrt 分析:

1.在上一个章节我们分析ffmpeg 调用libsrt 库实现对srt 协议实现。

2022-09-09 15:56:55 1209

原创 流媒体分析之srt 协议libsrt 实现

对于常规的单向传输,假设A向B发送数据,该方向的延时量Latency应该是A的发送方向延时(PeerLatency)和B的接收方向延时(RecLatency)的最大值,该延时量在握手阶段就已由双方协商确定。众所周知,SRT的传统优势领域是点对点的实时音视频传输,而近两年,SRT协议在上行推流方面有了迅速的发展,很多主流平台和公司都支持使用SRT协议来代替RTMP协议进行上行推流,其中的关键点就是SRT的StreamID功能,而StreamID功能就包含在SRT握手数据包的配置扩展模块中。

2022-09-09 14:56:43 2162 1

原创 流媒体分析之srt 协议mpegts 封装

MPEG2-PS主要应用于存储的具有固定时长的节目,如DVD电影,而MPEG-TS则主要应用于实时传送的节目,比如实时广播的电视节目。‘11’ 调整字段后为有效载荷,调整字段中的前一个字节表示调整字段的长度length,有效载荷开始的位置应再偏移[length]个字节。PES包非定长,音频的PES包小于等于64K,视频的一般为一帧一个PES包。PMT在传送流中用于指示组成某一套节目的视频、音频和数据在传送流中的位置,即对应的TS包的PID值,以及每路节目的节目时钟参考(PCR)字段的位置。

2022-09-09 14:20:03 1631

原创 流媒体分析之srt协议ffmpeg 实现

1. mpegts 封装格式会后面系列文章中讲叙,在ffmpeg 中的封装实现接口如下:mpegtsenc.c。解封封装:FFmpeg-n4.3.3/libavformat/mpegts.c。srt 音视频数据是基于mpegts 封装的,ffmpeg 数据流程。

2022-09-09 11:02:35 1580

原创 流媒体分析之srt 测试环境搭建

SRS/5.0(Bee)是一款简单、高效、实时的视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT。SRS是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181。Note: 这是典型的源站和边缘集群的架构,适用于需要高并发的场景,高清大图请参考。Note: 简单的单节点架构,适用于大多数场景,大图请看。ffmpeg 支持srt 协议,我们采用libsrt。

2022-09-09 10:36:51 1701

原创 流媒体分析之rtmp 协议封装

Msg Header占用11个字节,这种结构最浪费,一般用于流开始发送的第一个chunk报文,且只有这种情况下,报文中的timestamp才是一个绝对时间, 后续chunk报文的Msg Header中要么是没有timestamp,有timestamp也只是相对前一个chunk报文的时间增量。实际上为了处理方便,RTMP协议软件在具体实现时总是先读取一个字节的Basic Header,并根据前面2bit的format信息和后面6bit的CSID信息,判断报文的实际结构。

2022-09-08 15:36:19 619

原创 流媒体分析之rtmp 协议flv 封装

flv 是 flash video 的缩写,是 Adobe Flash payler 支持的一种流媒体播放格式。flv 是一种层级格式,除了一个 flv header 外,剩下全是由 一个个 tag 组成。tag 是由 tag 头和 tag 数据组成。tag 类型分为音频、视频、脚本,一共三种类型。每一种数据类型又有自己的 tag 头。引用网络图片:2. AMF该类型Tag又被称为MetaData Tag,存放一些关于FLV视频和音频的元信息,比如:duration、width、height等。

2022-09-07 23:51:21 1273

原创 ffmpeg 之ffmpeg 整理流程分析

2.1 transcode_step // 转换流程。1. 分析命令行函数,解析出输入文件及输出文件。2. transcode 转码处理。

2022-09-07 16:53:01 1046

原创 流媒体分析之rtmp之ffmpeg 实现整体流程

1. flv 格式封装:libavformat/flvenc.c。2. rtmp 下面处理rtmp 消息封装。

2022-09-06 16:38:05 426

原创 流媒体分析之rtmp ffmpeg 实现-两种技术实现

rtmp 分析

2022-09-06 16:05:15 603

原创 wayland 之opengl es

wayland openegl

2022-08-30 10:45:11 1592

原创 ffmpeg-rk3399 ffplay 学习分析

dwff

2022-07-18 15:23:47 790

转载 gstreamer之plugin_init

plugin_init

2022-07-12 15:12:38 287

转载 gstreamer 之object

gstreamer

2022-07-12 12:25:25 256

转载 Weston中shm window渲染显示过程分析

让我们来回顾一下panel surface的创建过程,panel本身是一个支持widget的window窗口类型。在使用window_create_custom创建窗口的时候,由于目前大部分设备上的cairo都是支持EGL的,因此panel surface 的buffer类型是WINDOW_BUFFER_TYPE_EGL_WINDOW,如果cairo不支持EGL绘制,那么panel surface的buffer类型就是WINDOW_BUFFER_TYPE_SHM。EGL surface创建逻辑:

2022-07-04 11:19:39 1450

转载 关于YUV格式的一些总结

一、YUV和YCbCr 1、定义 2、区别和联系 二、不同的采样格式 1、YUV444 2、YUV440 3、YUV422 4、YUV420 5、YUV411 6、YUV410 三、YUV数据排列格式 1、四种数据排列方式 ①Planar Format ②Semi-Planar Format ③Tiled Semi-Planar Format ④Interleaved Format 2、常用YUV格式介绍 ..

2022-05-23 18:47:02 1347

原创 wayland 显示bmp 图片优化

上一个案例我显示bmp图片。是强制1080P 分辨率,优化程序根据当前mode 创建window。并显示对应的分辨率图片。获取当前mode:static voidoutput_handle_geometry(void *data, struct wl_output *wl_output, int32_t x, int32_t y, int32_t physical_width, int32_t physical_height, int32_t

2022-05-20 12:50:17 376 2

原创 wayland 之显示bmp 图片

下面基于simple_shm.c 强制显示1080P bmp 显示1.demo 修改点paint_pixels 替换img_conv_argb8888 函数/* * Copyright © 2011 Benjamin Franzke * Copyright © 2010 Intel Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this..

2022-05-20 11:23:04 291

原创 drm 之modes

#define _GNU_SOURCE#include <errno.h>#include <fcntl.h>#include <stdbool.h>#include <stdint.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/mman.h>#include <time.h&...

2022-05-19 17:48:11 2069 3

原创 wayland 之输入事件处理-pointer/keyboard/touch

在registry_handle_global 函数中bind wl_seat else if (strcmp(interface, "wl_seat") == 0) { d->seat = wl_registry_bind(registry, id, &wl_seat_interface, 1); wl_seat_add_listener(d->seat, &seat_listener, d); }注册鼠标poiner event 接口

2022-05-19 16:40:23 1036

原创 Wayland 协议定义及分发

1. 协议定义:Wayland核心协议是通过protocol/wayland.xml这个文件定义的。它通过wayland_scanner这个程序扫描后会生成wayland-protocol.c, wayland-client-protocol.h和wayland-server-protocol.h三个文件。wayland-client-protocol.h是给Client用的;wayland-server-protocol.h是给Server用的; wayland-protocol.c描述了接口,Cli

2022-05-19 15:31:30 1120

转载 Wayland与Weston简介

简单地说,Wayland是一套display server(Wayland compositor)与client间的通信协议,而Weston是Wayland compositor的参考实现。其官网为Wayland。它们定位于在Linux上替换X图形系统。X图形系统经历了30年左右的发展,其设计在今天看来已略显陈旧。在X系统中,X Server作为中心服务,连接clien和硬件以及compositor。但时至今日,原本在X Server中做的事很多已被移到kernel或者单独的库中,因此X Server就显得

2022-05-19 14:57:32 820

原创 wayland之窗口显示

我们westonsimple_shm案例为例连接server:wl_display_connect 接口通过socket建立与Server端的连接返回wl_display,display->registry = wl_display_get_registry(display->display) // 申请创建registry,得到代理对象wl_registry。这个个对象相当于Client在Server端放的一个用于嗅探资源的Observer。Client通过它得到Server端有哪些Gl

2022-05-19 14:44:56 2571 2

jsoncpp-src-0.5.0.tar

json 源代码

2014-06-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除