自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(547)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 Linux系统软件工程师/嵌入式Linux应用开发工程师 知识体系构建 500篇(持续更新)

今年受疫情影响,企业经营必不可免地受到冲击,企业在选人用人方面比以往都更加谨慎,招聘也更加苛刻。hr都试图用最低的成本去招最优秀的人才。本人从事嵌入式软件开发多年,结合自己的经验,推出了《嵌入式软件工程师技术面专题》,预计会有40篇,分成硬件协议、多进程多线程编程、网络编程、linux基础、C/C++等几大模块,每一篇在末尾都总结了相关提问,其中有些知识,即使是工作了两三年的同学也未必都懂,所以社招的同学也可以看,对于找工作绝对有帮助。**不打无准备之战,提前做好准备,方可立于不败之地**。欢迎大家订阅,只

2020-09-13 11:12:01 38275 61

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(3) 守护进程

守护进程(daemon),是一种运行在后台 的特殊进程,它独立于控制终端 ,并周期性地执行某项任务或等待处理某些发生的事件。守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。由于在 Linux 中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。但是守护进程却能突破这种限制

2020-08-17 09:21:18 2625 4

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(4) 进程同步和通信的方式有哪些?

占个坑

2020-08-16 16:27:48 8813 3

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(15) 内核空间、用户空间、内核态、用户态

占个坑

2020-08-16 16:18:39 8920 2

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(13) 请你描述下进程虚拟内存空间布局

对于这个问题,面试官可能拿出一张白纸,让你尝试画出linux下进程的虚拟内存空间布局,然后=再让你简述下每个分区的作用,可能会挑几个重点分区,例如堆区、栈区来进行深入展开,考察你对堆栈的理解等等。文章目录1 内核空间2 栈(stack)3 内存映射段(mmap)4 堆(heap)5 BSS段6 数据段(Data)7 代码段(text)8 保留区问题提问在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中。这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4

2020-08-16 16:00:34 1084 2

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(1) 进程和线程的基本概念与区别

占个坑

2020-08-15 12:59:17 2229 2

原创 Linux C/C++ or 嵌入式面试之《网络编程系列》(4) tcp四次断开若干问题

占个坑

2020-08-15 12:52:33 8581 2

原创 流媒体专家(11)AAC格式介绍

待写

2021-06-14 21:32:04 17

原创 流媒体专家(10)rtp传输H264

1、H.264的RTP打包方式H.264可以由三种RTP打包方式单NALU打包一个RTP包包含一个完整的NALU聚合打包对于较小的NALU,一个RTP包可包含多个完整的NALU分片打包对于较大的NALU,一个NALU可以分为多个RTP包发送注意:这里要区分好概念,每一个RTP包都包含一个RTP头部和RTP荷载,这是固定的。而H.264发送数据可支持三种RTP打包方式。比较常用的是单NALU打包和分片打包,本文也只介绍这两种。单NALU打包即一个RTP包仅由一个完整的NALU

2021-06-14 15:11:19 10

原创 音视频数据处理(5)--- H264编码

1.编码原理----------------------前言----------------------- H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,我理解的他的理论依据是:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1

2021-06-14 14:19:58 5

原创 流媒体专家(9)H264协议详解IV H264协议疑惑概念阐述

待写

2021-06-14 14:08:16 4

原创 流媒体专家(8)h264测试文件百度网盘分享

链接:https://pan.baidu.com/s/1nqYDKe1KiVUCyGYpPb76Iw提取码:1234分辨率比较低,需要高清的可以联系我。

2021-06-14 10:28:48 27

原创 流媒体专家(7)H264协议详解III H264文件解析C实现

待写

2021-06-14 01:06:22 47

原创 流媒体专家(6)H264协议详解II H264的分层结构与NALU介绍

前面一节介绍了H264协议,主要是让大家有个基本概念,了解其基本工作原理,和一些基本术语。对于我们做应用开发而言,我们并不需要知道其压缩算法的实现细节,我们关心的是它是如何在网络上传输的。...

2021-06-14 00:32:04 38

原创 流媒体专家(5)H264协议详解I

文章目录1.概述2.基本概念**三种帧的说明****序列的说明****压缩算法的说明**3.H.264标准的关键技术1.概述H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式,以高压缩、高质量和支持多种网络的流媒体传输著称。留意这里的支持网络流媒体,这是我们重点关注的东西。在编码方面,我理解的他的理论依据是:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有

2021-06-14 00:26:23 19

原创 流媒体专家(4)rtp和rtcp协议详解I

文章目录第1章. RTP概述1.1. RTP是什么1.2. RTP的应用环境1.3. 相关概念1.3.1. 流媒体第2章. RTP详解2.1. RTP的协议层次2.1.1. 传输层的子层2.1.2. 应用层的一部分2.2. RTP报文2.3. RTCP的封装2.4. RTP的会话过程第3章. 相关的协议3.1. 实时流协议RTSP3.2. 资源预定协议RSVP第4章. 常见的疑问4.1. 怎样重组乱序的数据包4.2. 怎样获得数据包的时序4.3. 声音和图像怎么同步4.4. 接收缓冲和播放缓

2021-06-13 20:46:34 23

原创 流媒体专家(3)rtsp内嵌的会话描述协议sdp

文章目录一 概述二 sdp规格:三 各个字段的描述:1.Version(必选)2.origion(必选)3.Session Name(必选)4.Connection Data(可选)5.Bandwidth(可选)6.Times(必选), RepeatTimesand Time Zones7.Media Announcements (必选)8.rtpmap(可选)9.SuggestedAttributes(可选)四 举例1.媒体级会话VLC播放264视频的sdp文件2.媒体级会话VLC播放g711音频的sdp

2021-06-13 17:51:34 11

原创 流媒体专家(2)RTSP协议详解II

rtsp的方法有点类似于http的方法,如post,get等,大家在学习时可以做对比学习,加强理解。本节主要介绍rtsp常用的方法,并串讲rtsp流媒体建立、控制、终止的整个过程。文章目录1、RTSP 重要方法2、RTSP重要头字段参数3、简单的RTSP消息交互过程1、RTSP 重要方法RTSP请求报文的常用方法与作用:OPTIONS:用于得到服务器提供的可用方法;如:OPTIONS rtsp://192.168.20.136:5000/xxx666 RTSP/1.0CSeq:

2021-06-13 15:48:32 14 1

原创 公网rtsp流媒体测试地址

关于rtmp的非常多,rtsp找了很久才找到了一个。RTSP流地址大熊兔(VOD):rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov (分辨率240*160)

2021-06-13 15:15:18 13

原创 流媒体专家(1)RTSP协议详解I

文章目录1.概述2.RTSP的特性3.RTSP流媒体控制过程4.RTSP 协议格式5.RTSP的主要方法6.RTSP命令的状态转换表7.RTSP状态码1.概述RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的IETF RFC标准。该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。类似HTTP协议的流控制协议,它们都使用纯文本来发送信息,而且rtsp协议的语法

2021-06-13 13:23:08 18

原创 C++封装互斥锁和基于RAII机制能自动解锁的互斥锁

#include "base/mutex.h"Mutex::Mutex() { pthread_mutex_init(&mutex_, NULL); }Mutex::~Mutex() { pthread_mutex_destroy(&mutex_); }void Mutex::Lock() { pthread_mutex_lock(&mutex_); }void Mutex::Unlock() { pthread_mutex_unlock(&mutex_);

2021-06-13 11:53:56 11 1

原创 线程池C++封装

待写

2021-06-13 01:06:49 9

原创 线程操作C++封装

C++11标准已经引入了线程操作,这里为了练习,我们尝试自行封装基于phread库的线程操作。这里的写法有点类似与Java的线程。创建线程需要继承与我们写的Thread类。#include "base/thread.h"Thread::Thread() : arg_(NULL), start_(false), detach_(false) {}Thread::~Thread() { if (start_ == true && detach_ == false) Detach(

2021-06-13 01:04:59 14

原创 sockaddr操作C++封装

net/InetAddress.h#ifndef _INET_ADDRESS_H_#define _INET_ADDRESS_H_#include <arpa/inet.h>#include <netinet/in.h>#include <sys/socket.h>#include <string>class Ipv4Address { public: Ipv4Address(); Ipv4Address(std::string

2021-06-12 23:55:25 24 1

原创 cmake基础教程(11)add_subdirectory如何添加非子目录的CMakeLists.txt

发现问题有这样一种情况。自己写了一个库,需要写测试程序。类似如下结构:hello-world/├── CMakeLists.txt├── main.c├── test│ ├── CMakeLists.txt│ └── main.c├── hello│ ├── CMakeLists.txt│ ├── hello.c│ └── hello.h└── world ├── CMakeLists.txt ├── world.c └── world.h

2021-06-12 15:42:19 19 1

原创 sockaddr和sockaddr_in详解

struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址。网络中的地址包含3个方面的属性:1 地址类型: ipv4还是ipv62 ip地址3 端口一、sockaddrsockaddr在头文件#include <sys/socket.h>中定义,sockaddr的缺陷是:sa_data把目标地址和端口信息混在一起了,如下:struct sockaddr { sa_family_t sin_family;//地址族  

2021-06-12 15:00:43 11

原创 gcc常见编译选项解析(草稿)

-Wno-deprecated-declarations -Wno-unused-variable -Wno-attributes

2021-06-11 10:06:41 9 1

原创 草稿外观模式

前言在实际开发时,面对一个大的系统,总是会将一个大的系统分成若干个子系统,等子系统完成之后,再分别调用对应的子系统来完成对应的整体功能,这样有利于降低系统的复杂性;最终进行实现某个具体的功能时,我们将对应的子系统进行组合就好了;但是,子系统那么多,关系那么复杂,组合形成一个完整的系统,是存在难度的。我们在使用visual studio进行编译C++代码时,你只是在菜单中选择了Build,然后visual studio就开始了一堆的编译工作;你应该知道,因为你的一个简单的Build动作,编译器在后台会进行

2021-06-10 09:13:43 228

原创 草稿

适配器模式是软件开发中常用的模式之一,比如我们之前写的类提供的接口(老的接口)在新的环境下已经不合适了,那么我们怎么改变才能使老的接口适配现在新的接口呢?之前说过设计模式中常用的手法就是组合和继承,这在适配器模式中得到了很好的体现。首先,我们要从新的接口继承一个类,这个类就是适配器类(为什么要从新接口继承?那是为了遵循新接口提供的接口规范),那这个适配器类要怎么去适配老的接口呢?很显然的办法是用组合,包含一个指向被适配类的引用,适配器模式的定义:将一个类的接口转换成客户希望的另外一个接口,从而使原本由于接

2021-06-08 09:20:04 1751

原创 设计模式C++实现40讲(11)终生受益的观察者模式

在GOF的《设计模式:可复用面向对象软件的基础》一书中对观察者模式是这样说的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当一个对象发生了变化,关注它的对象就会得到通知;这种交互也称为发布-订阅(publish-subscribe)。目标是通知的发布者,它发出通知时并不需要知道谁是它的观察者。观察者模式以消息发布-订阅来代入会更加容易理解。最常见的一个例子就是: 对同一组数据进行统计分析时候, 我们希望能够提供多种形式的表示 (例如以表格进

2021-06-07 00:08:15 1728

原创 设计模式C++实现40讲(10)命令模式

什么是命令模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对命令模式是这样说的:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。在OOP中,一切都是对象,将请求封装成对象,符合OOP的设计思想,当将客户的单个请求封装成对象以后,我们就可以对这个请求存储更多的信息,使请求拥有更多的能力;命令模式同样能够把请求发送者和接收者解耦,使得命令发送者不用去关心请求将以何种方式被处理。UML类图Command:声明执行操作的接口;C

2021-06-06 12:25:56 1507 1

原创 设计模式C++实现40讲(9)策略模式和桥接模式的区别

先贴出它们各自的UML图。桥接模式如下:策略如下:在桥接中,Abstraction通过聚合方式引用Implementor.在策略中,Context也通过聚合引用Strategy.桥接(Bridge)模式是结构型模式的一种,而策略(strategy)模式则属于行为模式。从他们的结构图可知,在这两种模式中,都存在一个对象使用聚合的方式引用另一个对象的抽象接口的情况,而且该抽象接口的实现可以有多种并且可以替换。可以说两者在表象上都是调用者与被调用者之间的解耦,以及抽象接口与实现的分离。那么两者的

2021-06-06 10:34:58 14

原创 设计模式C++实现40讲(8)桥接模式--实际使用最多的模式之一

**作用:**将抽象部份与它的实现部份分离,使它们都可以独立地变化。将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化。桥接模式号称设计模式中最难理解的模式之一,关键就是这个抽象和实现的分离非常让人奇怪,大部分人刚看到这个定义的时候都会认为实现就是继承自抽象,那怎么可能将他们分离呢。《大话设计模式》中就Bridge模式的解释:手机品牌和软件是两个概念,不同的软件可以在不同的手机上,不同的手机可以有相同的软件,两者都具有很大的变动性。如果我们单独以手机品

2021-06-06 10:31:03 40

原创 typora常见用法小记

文章目录一级标题二级标题三级标题一级标题二级标题三级标题ctrl + 数字执行两次相当于还原。代码块int main() { }有序列表方法测试计划无序列表123emoj表情????????????????表格 ctrl + t引用 > 空格fafafafafafafa加粗 ctrl + b斜体 ctrl + i添加下划线 ctrl + u超

2021-06-06 10:19:40 11

原创 C++11 IO操作流继承体系

xxx

2021-06-04 00:32:39 1731

原创 C++11 字符串流操作sstream

xxx

2021-06-04 00:30:08 1725

原创 unzip解压到指定目录

unzip xxx.zip -d /tmp/xxx

2021-06-03 14:56:26 20 1

原创 python包管理工具pip

查看版本pip -V查看已经安装的包 pip listC:\Users\hongjh>pip listPackage Version-------------- ---------beautifulsoup4 4.9.3certifi 2020.12.5cffi 1.14.3chardet 4.0.0cryptography 3.2.1idna 2.10lxml 4.6.3

2021-05-29 11:57:11 2756

原创 repo代码管理之manifest配置文件介绍

xxx

2021-05-28 14:05:31 2745

原创 C++11 std::move将左值强制转换为右值

通过学习 《C++11 移动语义与移动构造》一节我们知道,C++11 标准中借助右值引用可以为指定类添加移动构造函数,这样当使用该类的右值对象(可以理解为临时对象)初始化同类对象时,编译器会优先选择移动构造函数。注意,移动构造函数的调用时机是:用同类的右值对象初始化新对象。那么,用当前类的左值对象(有名称,能获取其存储地址的实例对象)初始化同类对象时,是否就无法调用移动构造函数了呢?当然不是,C++11 标准中已经给出了解决方案,即调用 move() 函数。move 本意为 “移动”,但该函数并不能移动

2021-05-23 20:38:42 4345

HI3519AV100最新SDK smaple

海思最新SDK 程序 版本V2.0.1.0 最新

2019-03-29

v4l2读取摄像头

v4l2读取摄像头,能在linux下编译,生成yuv文件,可以指定文件帧数

2018-01-30

RTP协议在嵌入式网络摄像机中的设计及实现.pdf

rtp,网络摄像头开发,描述了rtp推流,h264编码,v4l2视频流获取

2018-04-27

空空如也

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

TA关注的人 TA的粉丝

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