自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TS流详解

TS流(Transport Stream)基于MPEG2标准开发的,是一种将视频、音频和其他数据打包成固定长度包(一般为188或204字节)的实时传输流(PS节目流用于存储)。这些包通过PID(Packet ID)进行标识,每个包包含一个包头和负载数据。传送流由一道或多道节目组成,每道节目由一个或多个原始流和一些其他流复合在一起,包括视频流,音频流,节目特殊信息流PSI和其他数据包。其中PSI表有4种类型:节目关联表(PAT)、节目映射表(PMT)、网络信息表和条件访问表。

2024-11-19 16:26:30 986

原创 软件接口设计

接口就是互相联系的双方共同遵守的一种协议规范。在我们软件系统内部,一般的接口是指通过定义一组API函数来约定软件模块之间的沟通方式。换句话说,接口具体定义软件模块对系统的其他部分提供怎样的服务,以及系统的其他部分如何访问所提供的服务。

2024-08-27 09:00:00 2541

原创 技术规划怎么做

比如:是否引入敏捷开发,是否微服务,是否容器化,是否devops等等,规划和完善研发的技术基础设施,形成自己公司的一套行业。技术规划类似技术远景。当前问题包括:代码质量,code review,编写速度,编译速度,快速上线,并行开发,第三方库,自动化测试平台,线上bug率,架构演进,开发技术水平及培训,新技术引入,开发人员熟悉业务等。通俗来说:技术规划,就是技术团队集体梳理接下来一段时间,围绕行业和公司业务需求,有哪些工作可以做,哪些方面可以优化,哪些先进理念、技术,平台,框架可以引进,可以落地实施。

2024-08-23 08:45:00 832

原创 安全架构设计

系统安全架构设计,主要包含:物理安全,网络安全,系统安全,数据安全,应用安全。完整性(Integrity)是指要防止系统的数据和资源在未经授权情况下被修改;机密性 (Confidentiality)是指要防止系统的数据和资源在未授权的情况下被披露。安全架构需求分析主要包括以下几个方面:明确系统安全的最终目标,例如保护用户隐私、防止未授权访问等。根据系统的功能和业务特点,划分出不同层次的安全需求,并给予相应的优先级。对系统可能面临的安全威胁进行详细的分析和识别,包括外部攻击、内部员工策反等。

2024-08-22 08:30:00 1322

原创 可扩展架构设计

可扩展架构是指系统设计和构建时考虑到未来需求增长和变化的能力,能够方便地扩展和适应新的业务要求而不影响系统的整体性能和稳定性。这种架构允许系统在需要时通过增加资源或组件而无需进行大规模的重构或升级。面向对象开闭原则可扩展架构的重要性适应业务增长随着业务规模的不断扩大,系统需求也会随之增加。可扩展架构能够支持系统的水平和垂直扩展,确保系统能够容纳更多的用户、数据和业务流程,适应业务的增长。降低维护成本可扩展架构使得系统的不同组件相互独立,降低了模块之间的耦合度。

2024-08-20 19:20:12 990

原创 流媒体协议详解

流媒体协议相关的有tcp,udp,http1.0/1.1/2.0/3.0,rtp/rtcp,rtmp,rtsp,hls,dash,webrtc,以及广电行业广泛使用的ndi协议。

2023-05-20 14:46:50 721

原创 rtmp协议

包头可以是4种长度的任意一种:12, 8, 4, 1 byte(s).完整的RTMP包头应该是12bytes,包含了时间戳,AMFSize,AMFType,StreamID信息, 8字节的包头只纪录了时间戳,AMFSize,AMFType,其他字节的包头纪录信息依次类推。包体最大长度默认为128字节,通过chunkSize可改变包体最大长度,通常当一段AFM数据超过128字节后,超过128的部分就放到了其他的RTMP封包中。(后六个bits==1):基本头长度为3字节,第二三个字节表示快流ID。

2023-05-19 20:24:32 1222

原创 http协议

http0.91991年发布, 没有header,功能非常简单,只支持GEThttp1.01996年发布,明文传输安全性差,header特别大。增加了header(使用元数据与数据解耦)增加了status code,用于声明请求的结果。content-type可以传输其它文件。请求头增加了http/1.0版本号。支持GET, POST 和 HEAD方法缺点:短连接,每请求一次资源就新建一次tcp连接http1.11997发布,是现在使用最广泛的版本。

2023-05-17 14:47:15 624 1

原创 mxf文件格式详解

MXF文件的逻辑模型是一种基于对象的数据结构,主要由头部元数据中的结构元数据定义。MXF文件也可包含一个可选的索引表(Index Table),该索引表可用于将基于采样的索引(如时码)快速换算到对应的要素容器在MXF文件中的偏移地址,以实现视音频的快速预览和定位。它使用可变长的字节来表示非常宽的长度范围,该域总是按MSB(高字节优先)编码,如果第一个字节的bit7为0,那么低7位代表了0~127范围的长度,如果bit7为1,那么低7位代表长度域的字节个数。

2023-05-04 19:47:45 6447

原创 TCP流量和拥塞控制

使用范围TCP为用户提供了高可靠性的网络传输服务,但可靠性保障措施也影响了传输效率。因此,在实际工程应用中,只有关键数据的传输才采用TCP,而普通数据的传输一般采用高效率的UDP。FEC前向纠错技术(Forward Error Correction)在确保信号的长距可靠传输方面也起着非常重要的作用,借用网友一张图来说明FEC。FEC在光通信中的位置码字经过信道到达接收端之后,如果错误在可纠范围之内,通过译码即可检查并纠正错误bit,从而抵抗信道带来的干扰,提高通信系统的可靠性。

2023-03-16 16:41:23 1934

原创 qnx进程通信

qnx进程通信

2022-10-31 16:02:43 1722

原创 ijkplayer播放器

ijkplayer播放器

2022-09-23 13:56:29 2410

原创 架构图颜色搭配

架构图的画法

2022-06-21 20:31:49 7025

原创 android播放器:MediaPlayer ExoPlayer ijkplayer

android播放器:MediaPlayer ExoPlayer ijkplayer比较

2022-06-16 15:03:03 5277

原创 qnx系统学习

qnx操作系统

2022-06-09 09:43:02 6864 1

原创 编解码版税royalty和授权费license fee

h264授权费

2022-06-08 11:49:42 4432 1

原创 android硬编解码MediaCodec

一 mediacodec简介 MediaCodec 类可以用来访问底层媒体编解码器,即编码器/解码器的组件。 它是 Android 底层多媒体支持架构的一部分(通常与 MediaExtractor,MediaSync,MediaMuxer,MediaCrypto,MediaDrm,Image,Surface 和 AudioTrack 一起使用)。 编解码器可以处理三类数据:压缩数据、原始音频数据、原始视频数据。a Compressed Buffers 压缩缓冲区输...

2022-05-26 21:00:08 5391 1

原创 SurfaceFlinger详解

Surface进行merge可以采用两种方式,一种就是采用软件的形式来merge,还一种就是采用硬件的方式,软件的方式就是我们的SurfaceFlinger,而硬件的方式就是Overlay。 SurfaceFlinger 是一个独立的Service, 它接收所有Window的Surface作为输入,根据ZOrder, 透明度,大小,位置等参数,计算出每个Surface在最终合成图像中的位置,然后交由HWComposer或Ope...

2022-05-24 14:12:02 2817

原创 Binder详解

本文简要介绍binder,AIDL,HIDL进程通信原理,并提供了了一个binder通信例子

2022-05-22 12:27:26 4324

原创 车载总线简介

CAN:Controller Area Network,控制器局域网络总线。控制单元通过CAN网络交换数据。它是由德国博世公司于上世纪80年代初,为了解决众多传感器与执行器之间的数据交换而开发的一种串行通讯协议。绝大多数汽车制造厂商采用CAN总线来实现汽车内部控制系统之间的数据通信。 can是一种总线,也是一种协议。CAN协议和CANOpen协议是两套不同的协议。从软硬件层次来划分,CAN协议属于硬件协议,而CANOpen属于软件协议。CAN网络可以理解为多台CAN设备连接在同...

2022-05-21 16:00:43 7154

原创 openmax用法

OpenMax是一个多媒体应用程序的框架标准。它自上而下分为三层,Application Layer, Integration Layer和Development Layer。应用层规定了应用程序和多媒体中间层的标准接口,使应用程序的移植性更好。集成层定义了多媒体组件的接口,使得多媒体框架能以一种统一的方式访问多媒体Codec和组件,以便在嵌入式流媒体框架中快速集成加速编解码器。开发层为Codec厂商和硬件厂商提供了一套API,使开发更加便捷。 ...

2022-05-17 22:29:27 3466

原创 android log

一 架构1 应用层api:  在应用层,安卓系统封装了日志系统的Java接口,Log.java, Rlog.java, Slog.java EventLog.java。应用开发者比较熟悉Log.java,系统开发者对 Rlog,Slog,EventLog, 接口会比较熟悉。这几个接口作用类似,都是写入日志,差别是写入logd的日志节点不同。  Java 接口封装在android.jar 中,作为SDK提供给开发者使用,在运行时通过libandroid_runtime.so 中的JNI..

2022-05-16 18:19:13 360

原创 ubuntu安装androidstudio

Download Android Studio and SDK tools | Android Developers下载地址Android Studio 3.2.0:android-studio-ide-181.5014246-linux.zipJava SE Development Kit:jdk-8u221-linux-x64.tar.gz提取码:17xx一 安装jdksudo tar -zxvf jdk-8u221-linux-x64.tar.gz -C /opt...

2022-05-16 16:19:18 1089

原创 android进程和线程

android进程按优先级从低到高分为五类:1 空进程:没有持有任何活动应用组件的进程,最低优先级,保留空进程的唯一理由是为了提供一种缓存机制,缩短应用下次运行时的启动时间。空进程在系统资源紧张时会被首先清除,但为了提高Android系统应用程序的启动速度,Android系统将会将空进程保存在系统内存中,在用户重新启动该程序时,空进程会被重新使用。2 后台进程:不包含任何已经启动的服务,没有用户可见的Activity的进程。系统资源紧张时,系统将优先清除用户长时间没有看到的后台进程。3 服务..

2022-05-13 17:37:00 1794

原创 qnx 8155学习

Qualcomm CreatePoint高通官网,注册后,可查看document。概念:BAM:Bus Access Module,总线访问模块BLSP:BAM Low-Speed Peripheral,低速接口的总线访问模块QUP:Qualcomm Universal Peripheral,高通统一的外设pvm:物理虚拟机,qnx侧gvm:客户虚拟机,linux侧fe:front end前端be:back end后端hypervisor:虚拟机监控程序AM.

2022-05-10 16:14:46 7604 5

原创 android源码结构分析

Android系统架构分为四层,从上到下依次是应用层、应用框架层、系统运行库层和Linux内核层。1 应用层位于整个Android系统的最上层,开发者开发的应用程序以及系统内置的应用程序都是在应用层。其中目录结构如下:apps:核心应用程序inputmethods:输入法目录providers:内容提供者目录screensavers:屏幕保护services:通信服务wallpapers:墙纸2 应用框架层是系统的核心部分,一方面向上提供接口给应用层调用,另一方面向下与C/C++程

2022-05-09 15:32:49 904

原创 多媒体框架

Multimedia框架,包含MediaPlayer, Camera, Surface, MediaRecord。MediaPlayer类是用于控制playback的视频/音频文件 及 流。camera2框架CmaeraManager: 摄像头管理者,这是一个全新的系统管理者,专门用户检测系统摄像头,打开系统摄像头,除此之外,调用CameraManager的getCameraCharacteristics(String)方法即可获取指定摄像头的相关特性。CameraCharacterist

2022-05-05 21:30:22 2814

原创 ffmpeg时间戳和时间基

时间戳定义:当前时刻,单位是时间基。PTS(Presentation TimeStamp)是渲染用的时间戳,播放器会根据这个时间戳进行渲染播放DTS(Decoding TimeStamp)解码时间戳,在视频packet进行解码成frame的时候会使用到编码时一个GOP示例: I P P B P P B P P..由于有B帧双向参考,在编码之后的帧的时间顺序就会发生变化,导致PTS和DTS不一致。没有B帧时,两者相同。时间基时间基的表示:用秒来表示,比如(1/25)秒,(1..

2022-04-28 15:33:55 1599

原创 ffmpeg硬件加速

一 ffmpeg硬件加速原理就是采用硬件GPU对编解码进行处理需依赖以下环境:1 安装nvidia驱动:NVIDIA-Linux-x86_64-470.57.02.run2 安装cuda:cuda_10.2.89_440.33.01_linux.run安装完成后修改profile,将cuda中的bin目录写到path中sudo vi /etc/profileexport PATH=/usr/local/cuda/bin:$PATHnvcc -V 验证是否安装成功3 编

2022-04-18 15:47:54 4577

原创 obs-ndi-output.cpp

ndi推流,音视频延迟大,不同步,卡顿。参考obs-ndi推流代码。/*obs-ndiCopyright (C) 2016-2018 Stéphane Lepin <steph name of authorThis program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseas published by the .

2022-04-07 18:18:40 751

原创 cout/printf效率问题

cout或printf是调试的常用手段,客户端对性能要求通常不及服务器端,服务器生产环境,尽量避免频繁打印。否则影响性能。举例:#include <iostream>#include <time.h>using namespace std;int main(){ long sTime, eTime, timeForCout, timeForPrintf; int a[30000]; int i; for (i ...

2022-03-31 17:59:49 1132

原创 c++ signal中断

信号是由操作系统传给进程的中断,会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上,可以通过按 Ctrl+C 产生中断。有些信号不能被程序捕获,但是下表所列信号可以在程序中捕获,并可以基于信号采取适当的动作。这些信号是定义在 C++ 头文件 <csignal> 中。常用信号 描述 SIGABRT 程序的异常终止,如调用abort。 SIGFPE 错误的算术运算,比如除以零或导致溢出的操作。 SIGILL 检测非.

2022-03-31 09:54:32 1156

原创 shared_ptr的引用计数原理

指向相同资源的所有 shared_ptr 共享“引用计数管理区域”,并采用原子操作保证该区域中的引用计数值被互斥地访问。“引用计数管理区域”是指通过 new 创建的 sp_counted_impl_p<D> 或 sp_counted_impl_pd<D> 对象,在创建成功后立即由其基类指针指向它,而该基类指针被 shared_ptr 间接持有。类之间的关系为:class A{};int main(){shared_ptr<A> sp1(new A()); .

2022-03-24 10:47:43 1012

原创 线程安全阻塞队列实现

#pragma once#include <queue>#include <mutex>#include <condition_variable>#include <atomic>template <typename T>class ThreadSafeBlockQueue{public: ThreadSafeBlockQueue(){} ~ThreadSafeBlockQueue(){}pu...

2022-03-21 09:32:15 224

原创 线程池设计要点

应用场景:1. 高并发、任务执行时间短的业务怎样使用线程池?2. 并发不高、任务执行时间长的业务怎样使用线程池?3. 并发高、业务执行时间长的业务怎样使用线程池?线程池本质上是生产者和消费者模型,包括三要素: 往线程池队列中投递任务的生产者; 任务池队列; 从任务池队列取出任务执行的 worker 线程(消费者)。 线程池任务特性:1 根据任务的性质来分: CPU 密集型任务; IO 密集型任务; 混合型任务。 2 根据任务

2022-03-17 10:59:31 630

原创 pcm音频音量调节

PCM16le双声道数据中左声道和右声道的采样值是间隔存储的。samples=44100Hz,采样位数是16bit,每个声道的一个采样值占用2Byte。“LE”代表Little Endian,代表2 Byte采样值的存储方式为高位存在高地址中。int CTransPic::simplest_pcm16le_halfvalueleft(char* url){ ifstream infptr; infptr.open(url, ios::in | ios::binary); of...

2022-03-14 18:48:52 1008

原创 shared_ptr智能指针

没有引入shared_ptr概念之前,实例化对象new class,调用c语言malloc函数分配内存,并返回指向该内存区的指针。而引入shared_ptr模板类,多个shared_ptr对象可以指向同一片内存区,每个对象中有引用计数,当前有多少个对象共享该内存。引用计数原理:1当新的 shared_ptr 对象与指针关联时,则在其构造函数中,将与此指针关联的引用计数增加1。2当任何 shared_ptr 对象超出作用域时,则在其析构函数中,它将关联指针的引用计数减1。如果引用计数变为0...

2022-03-12 13:18:40 370

原创 生产者消费者之无锁队列

生产者消费者模型包含4种模式,本文主要讨论1:1,以linux内核2.6.24.4版本kfifo为例。1:1,1:n,n:n,n:1kfifo的定义文件:kernel/kfifo.ckfifo的头文件: include/linux/kfifo.h1. kfifo概述kfifo是内核里面的一个First In First Out数据结构,它采用环形循环队列的数据结构来实现;它提供一个无边界的字节流服务,最重要的一点是,它使用并行无锁编程技术,即当它用于只有一个入队线程和一.

2022-03-10 21:22:07 1149

原创 c++内存池

内存池出现原因:内存碎片  首先我们需要明确, 内存池的目的到底是什么? 首先你要知道的是, 我们每次使用new T来初始化类型T的时候, 其实发生了两步操作,一个叫内存分配, 这一步使用的其实不是new而是operator new(也可以认为就是C语言中的malloc), 这一步是直接和操作系统打交道的, 操作系统可能需要经过相对繁琐的过程才能将一块指向空闲内存的指针返回给用户, 所以这也是new比较耗时的一部分, 而第二步就是使用构造函数初始化该内存, 这是我们比较熟悉的.   既然内存分.

2022-03-10 10:56:33 2686 3

原创 std::function

std::function是函数模板类(是一个类);std::bind是函数模板(是一个函数);std::function,std::bind在是C++11中的新特性。包含在#include <functional> 中。实例举例:上面用std::functon定义了3个对象,每一个对象,它代表的是一种类型的函数对象。...

2022-03-09 09:52:10 679

常见15种设计模式(附源码)

创建型:工厂,单例模式,原型,建造者模式 结构型:桥接,适配器,装饰,外观模式, 行为型:模板,策略,命令,责任链,状态,观察者模式,中介模式 vs2013,有注释部分自行放开,直接运行调试即可

2021-07-22

空空如也

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

TA关注的人

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