自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (7)
  • 收藏
  • 关注

原创 NDK开发中C与C++互相调用处理

在NDK开发中难免会遇到C与C++混合编程,比如C调用C++写的so库或者C++调用C的函数库,如果不做特别处理,就会出现编译通过但链接时找不到函数或者压根就编译不通过的情况。 为什么会出现这种情况?有两个原因:1.C++比C出现的晚,在C++里出现了很多新的特性,比如类、命名空间等,是C不支持的,因为C不能向下兼容,比如在C程序中直接使用new关键字生成一个对象是...

2019-12-16 17:40:05 407

原创 JNI快速学习

JNI是JVM中的一部分,它的存在就是为了打通java和native模块的桥梁。刚接触的时候会遇到一堆陌生的api,其实这些api的命名比较规范,调用几次之后就能举一反三。关键是要弄懂JNI的一些调用顺序,以下就是我用JNI碰到的一些关键点所做的记录。JNI_OnLoadJNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *rese...

2019-12-12 17:44:04 207

转载 解决FFmpeg HLS断网判断错误问题

最近小伙伴遇到了直播hls,网络断开获取不到错误码的问题。网上也有类似问题讨论,比如:现在播放hls,rtmp视频的时候,网络变化断开,播放器执行的不是error方法,而是complete这可能是FFmpeg的一个bug。同事写了个临时方案:判断当前是否播放到结尾,若不在结尾则认为是网络断开。这个方案对于点播有效,对于直播hls则无效,因为直播没有duration。这就迫使我们要寻找更...

2019-12-12 17:33:18 1960

转载 直播优化

越来越激烈,进过18年这波洗牌后,已经度过了蛮荒暴力期,剩下的都是在不断追求体验。通过多种方案并行,把首开降到500ms以下,希望能对大家有借鉴。背景:基于FFmpeg的ijkplayer,最新版本0.88版本。拉流协议基于http-flv,http-flv更稳定些,国内大部分直播公司基本都是使用http-flv了,从我们实际数据来看,http-flv确实稍微更快些。但是考虑到会有rtmp...

2019-12-11 11:18:21 360

原创 ffmpeg各种超时问题

1.设置rtsp超时AVDictionary* opts = NULL;av_dict_set(&opts, "rtsp_transport", m_bTcp ? "tcp" : "udp", 0); //设置tcp or udp,默认一般优先tcp再尝试udpav_dict_set(&opts, "stimeout", "3000000", 0);//设置超时3秒i...

2019-11-15 10:25:28 571

原创 ffmpeg http协议 设置字段含义

16.11 httpHTTP(超文本传输​​协议)。该协议接受以下选项:seekable控制连接的可寻找性。如果设置为1,则资源应该是可搜索的,如果设置为0,则认为不可搜索,如果设置为-1,如果它是可搜索的,它将尝试自动检测。默认值为-1。chunked_post如果设置为1,则对帖子使用chunked Transfer-Encoding,默认值为1。cont...

2019-09-12 11:00:47 1832

转载 FFmpeg:开流和读流超时设计

ffmpeg的avformat_open_input()和av_read_frame默认是阻塞的*用户可以通过设置“ic->flags |= AVFMT_FLAG_NONBLOCK;”设置成非阻塞(通常是不推荐的);* 或者是设置超时时间;* 或者是设置interrupt_callback定义返回机制。开流超时设计主要注意点是要注意协议timeout:(ht...

2019-09-10 09:32:51 1975

转载 ffplay中音视频同步

最近在看ffmpeg相关的一些东西,以及一些播放器相关资料和代码。然后对于ffmpeg-2.0.1版本下的ffplay进行了大概的代码阅读,其中这里把里面的音视频同步,按个人的理解,暂时在这里作个笔记。在ffplay2.0.1版本里面,视频的刷新不再直接使用SDL里面的定时器了,而是在主的循环中event_loop中,通过调用函数refresh_loop_wait_event来等待事件,...

2019-09-07 10:58:39 123

原创 FFmpeg总结

根据雷神的博客与项目中用到的FFmpeg总结如下:FFMPEG中结构体很多。最关键的结构体可以分成以下几类:a)解协议(http,rtsp,rtmp,mms)AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音频使用的封装格式。每种协议都对应一个URLProtocol结...

2019-08-19 13:06:19 446

原创 mp3文件格式详解

Mp3文件格式:参考:https://www.cnblogs.com/ranson7zop/p/7655474.htmlhttps://www.cnblogs.com/ranson7zop/p/7655474.html下面对根据一个mp3文件讲解下,如下图所示:如下图十个字节代表ID3V2.4的标签头,;0x49 44 33 代表ID3,0x04代表I...

2019-08-17 11:53:22 16124 2

原创 AVFrame 中data与extend_data的区别

1. 什么是PCM?PCM(Pulse Code Modulation,脉冲编码调制)音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准数字音频数据。描述PCM数据的6个参数:Sample Rate : 采样频率。8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。 Sample Size : 量化位数。通常该值为16-bit。 ...

2019-08-14 09:42:06 1987

原创 时间戳

#include "ticks.h"static char ticks[32];char *getCurrentTimeMillis(void) { struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); memset(ticks, 0, 32); sprintf(ticks, "%lu", ts.tv_sec...

2019-07-16 17:56:44 227

转载 c++11多线程编程(十):packaged_task介绍与实例

c++11多线程编程(十):packaged_task介绍与实例2017年12月27日 10:36:35 小麒麟666 阅读数:860更多所属专栏: c++11多线程编程版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lijinqi1987/article/details/78909524本节讨论c++11中std::package...

2019-06-06 16:16:50 177

转载 C++11之std::future和std::promise和std::std::packaged_task

C++11之std::future和std::promise和std::std::packaged_task为什么C++11引入std::future和std::promise?C++11创建了线程以后,我们不能直接从thread.join()得到结果,必须定义一个变量,在线程执行时,对这个变量赋值,然后执行join(),过程相对繁琐。  thread库提供了future用来访问异步操作的...

2019-06-06 11:08:26 219

转载 [c++11]多线程编程(五)——unique_lock

[c++11]多线程编程(五)——unique_lock0.12018.09.01 01:00字数 534阅读 2797评论 0喜欢 2互斥锁保证了线程间的同步,但是却将并行操作变成了串行操作,这对性能有很大的影响,所以我们要尽可能的减小锁定的区域,也就是使用细粒度锁。这一点lock_guard做的不好,不够灵活,lock_guard只能保证在析构的时候执行解锁操作,lock_...

2019-05-23 15:28:28 103

转载 c++11多线程

转载:https://www.cnblogs.com/wangguchangqing/p/6134635.html说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段。并行是指两个或多个独立的操作同时进行。注意这里是同时进行,区别于并发,在一个时间段内执行多个操作。在单核时代,多个线程是并发的,在一个时间段内轮流执行;在多核时代,多个线程可以实现真正的并行,在多核上真正...

2019-05-15 11:32:05 147

原创 ctags 设置

"设置行号set number"语法高亮syntax on"自动对其set tabstop=4set softtabstop=4set shiftwidth=4set autoindentset cindent set smartindentset showmatchset tags=tags;      "设置ctagsset nocompatible " 关闭 vi ...

2019-01-07 11:56:49 345

转载 auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结

stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结 1. auto_ptrauto_ptr主要是用来解决资源自动释放的问题,比如如下代码:void Function(){Obj*p = new Obj(20);......

2018-12-17 10:55:20 164

转载 linux sed命令就是这么简单

linux sed命令就是这么简单阅读目录概述 sed命令的选项 删除行 新增行 替换行 替换部分字符串而不是整行 搜索并输出行内容 将修改应用到文件中 sed正则中的元字符回到顶部概述sed命令是一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作。sed是按行来处理文本内容的。在shell中,使用sed来批量修改文本内容是非常方便的。...

2018-12-17 09:49:17 133

转载 C语言结构体初始化的四种方法

C语言结构体初始化的四种方法2018年03月15日 17:17:19 ericbars 阅读数:20853版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ericbar/article/details/79567108定义struct InitMember{ int first; double second; ...

2018-12-14 16:50:05 395

转载 tzset 作用

tzset 的作用2010年12月27日 01:42:00 hengcn 阅读数:1467 标签: linuxredhatunixdos服务器生活 更多个人分类: C-永恒的经典函数名称: tzset 函数原型: void tzset(void) 函数功能: UNIX兼容函数,用于得到时区,在DOS环境下无用途 函数返回: 参数说明: 所属文件: <time.h>...

2018-12-14 14:53:27 922

转载 so库显式调用与隐式调用区别(包含示例)

一、显式调用和隐式调用的区别         我们知道,动态库相比静态库的区别是:静态库是编译时就加载到可执行文件中的,而动态库是在程序运行时完成加载的,所以使用动态库的程序的体积要比使用静态库程序的体积小,并且使用动态库的程序在运行时必须依赖所使用的动态库文件(.so文件),而使用静态库的程序一旦编译好,就不再需要依赖的静态库文件了(.a文件)。         动态库的调用又分...

2018-12-13 14:52:14 2261

转载 wireshark抓包常见提示含义解析

原文转自:http://blog.sina.com.cn/s/blog_987e00020102wq60.html             http://www.cnblogs.com/redsmith/p/5462547.html原文链接:http://blog.csdn.net/u012398362/article/details/52276067=================...

2018-11-02 16:00:14 449

转载 linux线程池

include include include include include include include include include “threadpool.h”define DEFAULT_TIME 10 // 领导定时检查队列、线程状态的时间间隔define MIN_WAIT_TASK_NUM 10 // 队列中等待的任务数>这个值,便会增加线程define DEFAULT_THREA

2017-12-12 09:12:23 356

原创 linux创建多级目录

/*============================================================================= 函 数 名: PuOsMulMkDir 功 能: 算法实现: 全局变量: 输入参数: LPCSTR path 返 回 值: TRUE 成功 FALSE失败 =================

2017-12-11 11:15:21 398

原创 linux dirfd 把目录转成文件描述符,把目录信息刷进磁盘

linux dirfd 把目录转成文件描述符/*author:方福建1、android 移植exfat 后 mount 显示 dirsync,但是创建目录后立刻掉电目录可能丢失。2、dirsync 所有对文件系统内目录的更新应当是同步完成的,影响下列系统调用:creat,link, unlink, symlink, mkdir, rmdir, mknod 以及 rename3、调用ope

2017-09-21 20:01:11 1442

原创 linux move 实现

/**author : 方福建**/BOOL PuOsSafeMoveFile(LPCSTR pchSrcFileName, LPCSTR pchDstFileName){ if(0==strcmp(pchSrcFileName,pchDstFileName)) return TRUE; int fin,fout; fin=open(pchSrcFile

2017-08-21 09:14:17 1222

原创 glog 日志函数

/*============================================================================= 函 数 名: PuOsTruncateLogFile 功 能: 隔一段时间缩短日志,使日志一直维持在最新的打印里 算法实现: 全局变量: 输入参数: LPCSTR path keep 返 回 值: =

2017-08-18 13:48:36 557

原创 看门狗程序检测每个线程是否存活

看门狗程序检测每个线程是否存活int ThreadTaskDeal(){ ThreadTaskNode **ptNode = NULL; ptNode = &g_ptThreadTaskHead; if(NULL == (*ptNode)) { printf("ThreadTaskDeal g_ptThreadTaskHead is null \n

2017-08-18 10:28:21 830

原创 static成员函数不能被声明为const virtual volatile 原因

1.virtual与静态函数C++中,静态成员函数不能被声明为virtual函数。例如,下面的程序会编译失败。#include<iostream>class Test{ public: // 编译错误:static成员函数不能声明为virtual virtual static void fun() { }};同样地,静态成员函数也不能被声明为cons

2017-08-16 21:11:58 1233

转载 C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法

C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:a.引用b.常量c.静态d.静态常量(整型)e.静态常量(非整型) 常量和引用,必须通过参数列表进行初始化。 静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末。参考下面的

2017-08-15 21:51:19 359

原创 pthread_kill 与pthread_cancel使用方法

pthread_kill 与pthread_cancel使用方法#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;pthread_cond_t cond = PTHREAD_COND_INIT

2017-08-11 09:05:43 960

转载 linux phread_detach 用法

创建一个线程默认的状态是joinable, 如果一个线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收(退出状态码),所以创建线程者应该pthread_join来等待线程运行结束,并可得到线程的退出代码,回收其资源(类似于wait,waitpid)但是调用pthread_join(pthread_id)后,如果该线程没有运行结束,调用者会

2017-08-04 14:13:17 358

原创 linux内核队列实现

linux内核队列实现/*****author:方福建date:2017/07/24*****/#ifndef _SIMPLEQUEUE_#define _SIMPLEQUEUE_#ifdef __cplusplusextern "C" {#endif#include "kdvtype.h"const u32 m_gMaxSize=100;class SimpleQueue{pub

2017-07-24 17:09:50 217

原创 linux opendir计算目录大小

#define unsigned long longu64 PuOsGetDirSize(const char *pchDir){ u64 qwTotalSize=0; struct stat statbuf; struct dirent *dirp; DIR *dp; if(NULL==(dp=opendir(pchDir))) {

2017-07-19 18:11:35 314

原创 算法导论哈夫曼编码

算法导论哈夫曼编码#include <stdio.h>#include <stdlib.h>int m_length=0;typedef struct Huff{ char word; int weight; struct Huff *left; struct Huff *right;}HuffNode;typedef struct minHeap{

2017-07-13 18:18:09 356

原创 算法导论动态规划实现

算法导论动态规划实现//自底向上#include <stdio.h>#include <stdlib.h>#include <string.h>int max(int a,int b){ return a>b?a:b;}int bottomup(int p[],int n){ int *r=(int *)malloc((n+1)*sizeof(int));

2017-07-06 16:16:58 219

原创 算法导论红黑树实现

算法导论红黑树实现#include <stdio.h>#include <stdlib.h>#include <string.h>#define RED 1#define BLACK 0#define BOOL int#define TRUE 1#define FALSE 0typedef struct rbtree{ struct rbtree *p; struct

2017-07-04 19:10:53 232

原创 算法导论求第i小的元素

算法导论求第i小的元素#include <stdio.h>#include <stdlib.h>int partion(int a[],int p,int r){ int x=a[r-1]; int i=p-1; int j=0,temp=0; for(j=p;j<r-1;++j) { if(a[j]<=x) {

2017-06-30 13:14:10 248

原创 算法导论桶排序

算法导论桶排序#include <stdio.h>#include <stdlib.h>#include <math.h>typedef struct stbucket{ int a; struct stbucket *next;}stBucket;stBucket* insertsort(stBucket *head){ if(NULL == head || NU

2017-06-29 19:25:55 261

C++Reference.chm

C++指导书

2016-07-15

C++编程剖析问题、方案和设计准则.pdf

里面有好多要注意的地方。C++开发者必读

2016-07-06

Google的C++编码规范 中文.PDF

google的C++编码规范。里面有好多要注意的地方。C++开发者必读

2016-07-06

工资管理系统

工资管理系统

2014-07-04

O+DAY安全:软件漏洞分析技术.pdf )

O+DAY安全:软件漏洞分析技术.pdf )

2014-06-24

空空如也

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

TA关注的人

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