自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

北雨南萍

鹏徙南冥三千里,抟扶直上九重天

原创 gtest应用指南

前言 gtest是Google的开源C++单元测试框架,是遵循 New BSD License (可用作商业用途)的开源项目。 google内部的大多数C++代码都已经使用这个测试框架进行单测, 知名的使用gtest进行测试的项目有chromium , webrtc, quic等。 g...

2020-04-13 12:59:24 149 0

原创 Google protocol-buffer详解与示例应用

1. Protocol Buffer 简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准, 目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。 他们用于 RPC 系统和...

2020-03-16 10:51:19 97 0

原创 FFmpeg新旧接口对照使用一览

从FFmpeg 3.0 开始 , 使用了很多新接口, 在一些基本用法上,编译会看见很多的warning,类似 “ warning: ‘AVStream::codec’ is deprecated (declared at /usr/local/ffmpeg/include/libavforma...

2019-05-24 15:59:51 718 1

原创 如何将libavcodec也静态编译并可链接到.so中

1 问题与解决 使用ffmpeg SDK的静态库进行链接到动态库时,会出现如下的报错: /usr/bin/ld: /usr/local/lib/libavformat.a(allformats.o): relocation R_X86_64_32 against `ff_a64_muxer&#...

2019-05-21 19:35:22 679 0

原创 FFmpeg-4.0 的filter机制的架构与实现.之三 Filter实现的源码分析

五、Filter实现的源码分析 5.1 滤镜的回调函数的调用流程,以单滤镜设置(如 -vf "delogo")为例 init() query_format(); // 输入输出的格式查询: 列出滤镜支持的格式列表 config_input(); config_outp...

2018-12-28 11:18:29 720 0

原创 FFmpeg-4.0 的filter机制的架构与实现.之二 结构体关系与定义

4. Filter的结构体关系图与定义 4.1 结构体间的关系图 filter涉及的结构体,主要包括: > FilterGraph, AVFilterGraph > InputFilter, InputStream, OutputFilter, OutputSt...

2018-12-28 11:09:36 630 1

原创 FFmpeg-4.0 的filter机制的架构与实现.之一 Filter原理

一、FFmpeg filter的原理 1. 引言及示例 FFmpeg中的libavfilter提供了一整套的基于filter的机制。 filter本身是一个插件的形式,可以快速的组装需要的效果。 比如下面的filter,可以实现视频的水平镜像效果。 ffplay.exe sample.r...

2018-12-28 09:26:56 1251 0

原创 使用speex对pcm,wav进行降噪处理

1. speex的降噪模块的简介 speex的语音处理模块要使用独立于 speex codec库的libspeexdsp 库。 这个分离的库是在1.2版本后实现; 它这库包括了: 预处理,回声消除,jitter buffer 和重采样模块; 在Unix/Linux环境下,使用 -lspee...

2018-10-24 17:44:54 3492 13

原创 基于FFmpeg-4.0 SDK的PCM编码成AAC

1. 初始化 AVCodecContext *m_avctx; AVCodec *m_codec; /* Init ffmpeg log */ ffmpeg_log_callback pcb_log =...

2018-10-12 20:11:41 562 0

原创 FFmpeg的音频处理详解

一、基本概念 1. 音频简介 数码音频系统是通过将声波波形转换成一连串的二进制数据来再现原始声音的, 实现这个步骤使用的设备是模/数转换器(A/D)它以每秒上万次的速率对声波进行采样, 每一次采样都记录下了原始模拟声波在某一时刻的状态,称之为样本。 将一串的样本连接起来,就可以描述一段声...

2018-10-12 20:10:08 9618 1

原创 基于ffmpeg-4.0 SDK的音频重采样

/* * Copyright (c) 2012 Stefano Sabatini * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and...

2018-10-09 19:37:01 514 2

原创 基于ffmpeg-0.10 SDK的音频重采样

这个示例代码实现了基于FFmpeg-0.10 SDK的音频重采样,也可用于实现定点转浮点计算。   1. 声明 /* ffmpeg_sdk.h */ #include <stdio.h> #include <stdlib.h> ...

2018-10-09 19:33:48 116 0

原创 FFmpeg命令行应用备忘录

三、将PCM转格式,并编码成AAC:  ./ffmpeg  -f s16le -ar 16000 -ac 1 -i input-s16le.pcm  -f f32le -ar 16000 -ac 1  -y  input-f32le.pcm   ./ffmpeg  -f f32le -ar 1...

2018-09-18 12:15:46 323 0

原创 面向对象设计原则实践:之五.迪米特原则,接口隔离原则

六、迪米特(第三者交互)原则 1. 定义 每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。   2. 分析 1) 迪米特法则就是指一个软件实体应当尽可能少的与其他实体发生相互作用。 这样,当一个模块修改时,就会尽量少的影响其他的模块,扩展会相对容易...

2018-08-27 09:39:53 393 0

原创 面向对象设计原则实践:之四.里氏代换原则

五、里氏代换原则(LSP--Liskov Substitution Principle) 1. 定义 a). 如果对每一个类型为S的对象o1,都有类型为T的对象o2, 使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化, 那么类型S是类型T的子类型。 b). 子...

2018-08-27 09:33:40 182 0

原创 面向对象设计原则实践:之三.单一职责原则,合成复用原则

三、单一职责原则(SRP--Single-Responsibility Principle ) 1.  定义 a).  一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 b). 就一个类而言,应该仅有一个引起它变化的原因。    所谓职责,我们可以理解他为功能, 就是设...

2018-08-27 09:28:57 912 1

原创 面向对象设计原则实践.之二.依赖倒转原则

二、依赖倒转原则(DIP--Dependency Inversion Principle) 1.依赖倒转原则定义 a). 高层模块不应该依赖低层模块,它们都应该依赖抽象。 抽象不应该依赖于细节,细节应该依赖于抽象。 b). 要针对接口类/抽象类编程,不要针对实现编程。    高层模块包...

2018-08-27 09:23:40 191 0

原创 面向对象设计原则实践:之一.开放封闭原则

常用的面向对象设计原则包括7个,这些原则并不是孤立存在的,它们相互依赖,相互补充。 名称 易记符 设计原则及简介 实现关键 关系 重要性 开放封闭原则 ...

2018-08-27 09:16:47 226 0

原创 FFmpeg中的时间戳表示方法

ffmpeg中的时间单位1. AV_TIME_BASEffmpeg中的内部计时单位(时钟基),ffmepg中的所有时间表示的单位,比如AVStream中的duration, 即表示这个流的长度为duration个AV_TIME_BASE。AV_TIME_BASE定义为:#define ...

2018-06-16 11:55:35 1418 0

原创 如何开启ffmpeg库中的日志

2.  在C++类中,实现ffmpeg库日志的打开 // ffmpeg_sdk.h #pragma once #include <stdio.h> #include <stdlib.h> ...

2018-06-16 11:53:44 1853 0

原创 MP4文件格式带数据详解

一、概述MP4文件封装格式,对应的标准为ISO/IEC 14496-12,即信息技术 视听对象编码的第12部分:ISO 基本媒体文件格式(Information technology Coding of audio-visual objects Part 12: ISO base media fi...

2018-06-16 10:42:56 4517 0

原创 使用FFmpeg的SDK库实现将H.264流封装进MP4文件时全局SPS、PPS与流中SPS、PPS冲突的问题

一、问题1. 使用FFmpeg的SDK库实现将H.264流封装进MP4文件的源码大致如下:char* filename = "./test.mp4"AVOutputFormat *fmt;AVStream* video_st;AVFormatContext *av_contex...

2018-06-16 10:07:00 910 1

转载 linux C++ 类的静态成员函数与非静态成员函数的互访

前言:对象与对象之间的成员变量是相互独立的。要想共用数据,则需要使用静态成员和静态方法。只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量。(因为静态成员变量在对象创建之前就已经被分配了内存空间)静态成员变量虽然在类中,但它并不是随对象的建立而分配空...

2018-02-12 18:04:16 1204 0

原创 linux C++ 设计模式:单例、单例继承详解

一、单例 1.1. 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点。   1.2. 动机 如何保证一个类只有一个实例,并且这个实例易于被访问呢? 如希望系统中只有一个脱机打印机实例,只有一个访问配置文件的实例时。 如果使用全局变量,将使得一个对象可以被访问,但它不能防止你...

2018-02-12 17:12:32 1269 0

原创 回调函数原理及应用实例

1. 什么是回调  软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类: 同步调用、回调和异步调用。 同步调用, 是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用; 回调,     是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的...

2018-01-14 23:34:56 9789 0

原创 linux下如何定位CPU占用高的进程的问题点

一、Top+pstack+gdb的组合拳 闲言少述,先直接上操作实例,再做原理讲解。 1.1 用top命令找到最占CPU的进程 >top   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND ...

2018-01-12 09:28:34 7330 0

原创 互斥锁的应用与pthread_mutex_destory的出错

一、互斥锁的应用 互斥量从本质上说就是一把锁, 提供对共享资源的保护访问。 1. 初始化: 在Linux下, 线程的互斥量数据类型是pthread_mutex_t.  在使用前, 要对它进行初始化:   对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_INITIALIZ...

2017-12-29 23:41:47 6284 1

原创 linux C++下多实例间的线程安全锁

一、在多实例间实现全局的线程安全锁 1.1 实例场景: 1. 类的声明与定义 //channel.h class CChannel{   friend void* audio_write_process(void* params);   friend void* video_write...

2017-12-29 11:32:45 300 0

原创 ffmpeg的avcodec_open或avcodec_open2()的线程安全问题

报出错误为: [NULL @ 0x7fffe8006ce0] insufficient thread locking around avcodec_open/close() 原因: 是内部有线程检查,如果同时有多个线程调用这个函数,则会出错; 解决办法: 对于使用ffmpeg库进...

2017-12-21 21:29:53 1549 0

原创 gearman-client与gearman-worker的示例源码-C++版

官方的DEMO如下: ​http://gearman.info/libgearman/examples.html ​​ ​闲言少述,直接上源码: ​client ​ /*  * File:  *    simple-gearman-client.cpp  * Auth: ...

2017-12-05 19:45:50 509 0

原创 Gearman的源码编译与安装

1. GCC升级与安装 yum -y install gcc+ gcc-c++ ​ 2. boost安装 wget https://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_65_1.tar.gz mkdir boos...

2017-11-30 20:23:13 255 1

原创 Gearman的Worker的多进程实现

前言 因为项目原因选择了gearman作为任务委派的中间件,但原生的python拓展包只支持单进程, 期间为了将gearman改造成自适应多进程的方式在实现方式上走进了些误区, 故在此记录这些误区的坑以及目前的最优解决方案。 实现思路 实现方式 主进程接收任务,...

2017-11-27 15:06:59 1601 0

原创 在linux服务器上安装单机版redis

一、环境准备 因为redis使用c语言开发的,如果要运行在linux上,需要gcc-c++的环境。 ​那么我们就要先看一下是否安装了gcc-c++如果没有的话, ​需要安装gcc-c++环境(友情提示,除了脚本语言,linux上运行啥东西都需要装环境)。 首先需要查看linux上是...

2017-11-27 14:32:07 1153 0

原创 FFmpeg源码剖析-解码:av_read_frame()

av_read_frame()函数位于libavformat/utils.c 1. 函数概述 读取输入流的一帧数据; 2. 函数调用图 ​​ 3. 伪码分析 4. 代码分析 av_read_frame()它的声明(libavformat/a...

2017-09-18 23:49:57 2872 0

原创 FFmpeg源码剖析-通用:get_input_packet()

get_input_packet()位于ffmpeg.c 1. 函数概述 调用av_read_frame()函数从文件中读取一个packet,  对视频来说,一个packet是一帧; 对音频来说,一个packet是多帧; 2. 函数调用图 ​ 3. 代码分...

2017-09-18 10:53:48 502 0

原创 FFmpeg源码剖析-框架:process_input()

process_input()函数位于ffmpeg.c 1. 函数概述 它的作用的从文件中读取一个packet,并解码; 2. 函数调用结构图 ​ 3. 代码分析 /*   * 它是在open_input_file()->add_input_stream...

2017-09-17 00:32:03 1304 0

原创 FFmpeg源码剖析-框架:transcode()

transcode()函数位于ffmpeg.c 1. 函数概述 它是ffmpeg的转码的主函数。 工作模式是每次读取一个packet,并处理。 可见《 FFmpeg情景分析 1. FFmpeg转码框架解析》 2. 函数框架图 ​ 3. 函数伪码解析 static int transc...

2017-09-14 15:54:08 592 0

原创 FFmpeg源码剖析-通用:ffmpeg_parse_options()

ffmpeg_parse_options()函数位于ffmpeg_opt.c 1. 函数概述 它的功能主要有三个, 解析命令行参数; 打开输入文件,并解析数据,找到匹配每一个视频,音频,数据流的解码器; 打开输出文件,并设置好输出的视频,音频,数据流的编码器; 2. 函...

2017-09-14 14:09:55 3116 0

原创 我理解的互联网革命(2013)

这个题目是我在地铁上思考要如何在互联网方向上创业时想到的。 因为要在某个行业创业,首先需要解决的是创业者如何理解这个行业。 这个理解可以说,最终决定了创业者,以创业者所带领的团队总的行动纲领,指导思想,和目标; 如比尔.盖茨就说过,他的目标:"让每个人桌面上都有一台...

2017-09-13 16:01:48 296 0

转载 程序人生的四个象限和两条主线

零 为什么我们要自己做职业生涯规划? ​记得电影《社交网络》里边,CFO同学在知道自己股权被稀释时说了一句话,“我以为那些律师是我的律师。” 其实我们大多数人对HR几乎都存在类似的误解—— 你以为她是你的HR,其实她只是公司的HR。 ​她们care的是如何编个理由用老板给的那点小钱...

2017-09-13 14:56:42 550 0

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