<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ffjffjffjffjffj的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ffjffjffjffjffj</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ffjffjffjffjffj]]></copyright><item><title><![CDATA[NDK开发中C与C++互相调用处理]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/103566886</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/103566886</guid><author>ffjffjffjffjffj</author><pubDate>Mon, 16 Dec 2019 17:40:05 +0800</pubDate><description><![CDATA[在NDK开发中难免会遇到C与C++混合编程，比如C调用C++写的so库或者C++调用C的函数库，如果不做特别处理，就会出现编译通过但链接时找不到函数或者压根就编译不通过的情况。

 为什么会出现这种情况？

有两个原因：

1.C++比C出现的晚，在C++里出现了很多新的特性，比如类、命名空间等，是C不支持的，因为C不能向下兼容，比如在C程序中直接使用new关键字生成一个对象是...]]></description><category></category></item><item><title><![CDATA[JNI快速学习]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/103513500</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/103513500</guid><author>ffjffjffjffjffj</author><pubDate>Thu, 12 Dec 2019 17:44:04 +0800</pubDate><description><![CDATA[JNI是JVM中的一部分，它的存在就是为了打通java和native模块的桥梁。刚接触的时候会遇到一堆陌生的api，其实这些api的命名比较规范，调用几次之后就能举一反三。关键是要弄懂JNI的一些调用顺序，以下就是我用JNI碰到的一些关键点所做的记录。

JNI_OnLoad




JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *rese...]]></description><category></category></item><item><title><![CDATA[解决FFmpeg HLS断网判断错误问题]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/103513286</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/103513286</guid><author>ffjffjffjffjffj</author><pubDate>Thu, 12 Dec 2019 17:33:18 +0800</pubDate><description><![CDATA[最近小伙伴遇到了直播hls，网络断开获取不到错误码的问题。网上也有类似问题讨论，比如：

现在播放hls，rtmp视频的时候，网络变化断开，播放器执行的不是error方法，而是complete

这可能是FFmpeg的一个bug。同事写了个临时方案：判断当前是否播放到结尾，若不在结尾则认为是网络断开。

这个方案对于点播有效，对于直播hls则无效，因为直播没有duration。这就迫使我们要寻找更...]]></description><category></category></item><item><title><![CDATA[直播优化]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/103489245</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/103489245</guid><author>ffjffjffjffjffj</author><pubDate>Wed, 11 Dec 2019 11:18:21 +0800</pubDate><description><![CDATA[越来越激烈，进过18年这波洗牌后，已经度过了蛮荒暴力期，剩下的都是在不断追求体验。通过多种方案并行，把首开降到500ms以下，希望能对大家有借鉴。

背景：基于FFmpeg的ijkplayer，最新版本0.88版本。

拉流协议基于http-flv，http-flv更稳定些，国内大部分直播公司基本都是使用http-flv了，从我们实际数据来看，http-flv确实稍微更快些。但是考虑到会有rtmp...]]></description><category></category></item><item><title><![CDATA[ffmpeg各种超时问题]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/103080455</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/103080455</guid><author>ffjffjffjffjffj</author><pubDate>Fri, 15 Nov 2019 10:25:28 +0800</pubDate><description><![CDATA[1.设置rtsp超时

AVDictionary* opts = NULL;

av_dict_set(&amp;opts, "rtsp_transport", m_bTcp ? "tcp" : "udp", 0); //设置tcp or udp，默认一般优先tcp再尝试udp
av_dict_set(&amp;opts, "stimeout", "3000000", 0);//设置超时3秒

i...]]></description><category></category></item><item><title><![CDATA[ffmpeg  http协议 设置字段含义]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/100765323</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/100765323</guid><author>ffjffjffjffjffj</author><pubDate>Thu, 12 Sep 2019 11:00:47 +0800</pubDate><description><![CDATA[16.11 http

HTTP（超文本传输​​协议）。

该协议接受以下选项：


seekable


控制连接的可寻找性。如果设置为1，则资源应该是可搜索的，如果设置为0，则认为不可搜索，如果设置为-1，如果它是可搜索的，它将尝试自动检测。默认值为-1。


chunked_post


如果设置为1，则对帖子使用chunked Transfer-Encoding，默认值为1。


cont...]]></description><category></category></item><item><title><![CDATA[FFmpeg:开流和读流超时设计]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/100689302</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/100689302</guid><author>ffjffjffjffjffj</author><pubDate>Tue, 10 Sep 2019 09:32:51 +0800</pubDate><description><![CDATA[ffmpeg的avformat_open_input（）和av_read_frame默认是阻塞的

*用户可以通过设置“ic-&gt;flags |= AVFMT_FLAG_NONBLOCK;”设置成非阻塞（通常是不推荐的）；

* 或者是设置超时时间；

* 或者是设置interrupt_callback定义返回机制。

开流超时设计

主要注意点是要注意协议

timeout:(ht...]]></description><category></category></item><item><title><![CDATA[ffplay中音视频同步]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/100592953</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/100592953</guid><author>ffjffjffjffjffj</author><pubDate>Sat, 07 Sep 2019 10:58:39 +0800</pubDate><description><![CDATA[最近在看ffmpeg相关的一些东西，以及一些播放器相关资料和代码。

然后对于ffmpeg-2.0.1版本下的ffplay进行了大概的代码阅读，其中这里把里面的音视频同步，按个人的理解，暂时在这里作个笔记。

在ffplay2.0.1版本里面，视频的刷新不再直接使用SDL里面的定时器了，而是在主的循环中event_loop中，通过调用函数refresh_loop_wait_event来等待事件，
...]]></description><category></category></item><item><title><![CDATA[FFmpeg总结]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/99720835</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/99720835</guid><author>ffjffjffjffjffj</author><pubDate>Mon, 19 Aug 2019 13:06:19 +0800</pubDate><description><![CDATA[根据雷神的博客与项目中用到的FFmpeg总结如下：

FFMPEG中结构体很多。最关键的结构体可以分成以下几类：



a)解协议（http,rtsp,rtmp,mms）



AVIOContext，URLProtocol，URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音频使用的封装格式。每种协议都对应一个URLProtocol结...]]></description><category></category></item><item><title><![CDATA[mp3文件格式详解]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/99691239</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/99691239</guid><author>ffjffjffjffjffj</author><pubDate>Sat, 17 Aug 2019 11:53:22 +0800</pubDate><description><![CDATA[Mp3文件格式：

参考：https://www.cnblogs.com/ranson7zop/p/7655474.html

https://www.cnblogs.com/ranson7zop/p/7655474.html



下面对根据一个mp3文件讲解下，如下图所示：









如下图十个字节代表ID3V2.4的标签头,;0x49 44 33 代表ID3,0x04代表I...]]></description><category></category></item><item><title><![CDATA[AVFrame 中data与extend_data的区别]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/99542552</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/99542552</guid><author>ffjffjffjffjffj</author><pubDate>Wed, 14 Aug 2019 09:42:06 +0800</pubDate><description><![CDATA[1. 什么是PCM？

PCM(Pulse Code Modulation，脉冲编码调制)音频数据是未经压缩的音频采样数据裸流，它是由模拟信号经过采样、量化、编码转换成的标准数字音频数据。

描述PCM数据的6个参数：

Sample Rate : 采样频率。8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。
	Sample Size : 量化位数。通常该值为16-bit。
	...]]></description><category></category></item><item><title><![CDATA[时间戳]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/96160999</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/96160999</guid><author>ffjffjffjffjffj</author><pubDate>Tue, 16 Jul 2019 17:56:44 +0800</pubDate><description><![CDATA[#include "ticks.h"

static char ticks[32];

char *getCurrentTimeMillis(void) {
 struct timespec ts;
 clock_gettime(CLOCK_REALTIME, &amp;ts);
 memset(ticks, 0, 32);
 sprintf(ticks, "%lu", ts.tv_sec...]]></description><category></category></item><item><title><![CDATA[c++11多线程编程（十）：packaged_task介绍与实例]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/91045789</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/91045789</guid><author>ffjffjffjffjffj</author><pubDate>Thu, 06 Jun 2019 16:16:50 +0800</pubDate><description><![CDATA[c++11多线程编程（十）：packaged_task介绍与实例

2017年12月27日 10:36:35 小麒麟666 阅读数：860更多

所属专栏： c++11多线程编程

版权声明：本文为博主原创文章，未经博主允许不得转载。 https://blog.youkuaiyun.com/lijinqi1987/article/details/78909524

本节讨论c++11中std::package...]]></description><category></category></item><item><title><![CDATA[C++11之std::future和std::promise和std::std::packaged_task]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/91040872</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/91040872</guid><author>ffjffjffjffjffj</author><pubDate>Thu, 06 Jun 2019 11:08:26 +0800</pubDate><description><![CDATA[C++11之std::future和std::promise和std::std::packaged_task

为什么C++11引入std::future和std::promise？C++11创建了线程以后，我们不能直接从thread.join()得到结果，必须定义一个变量，在线程执行时，对这个变量赋值，然后执行join()，过程相对繁琐。

　　thread库提供了future用来访问异步操作的...]]></description><category></category></item><item><title><![CDATA[[c++11]多线程编程(五)——unique_lock]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/90481299</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/90481299</guid><author>ffjffjffjffjffj</author><pubDate>Thu, 23 May 2019 15:28:28 +0800</pubDate><description><![CDATA[[c++11]多线程编程(五)——unique_lock

0.12018.09.01 01:00字数 534阅读 2797评论 0喜欢 2

互斥锁保证了线程间的同步，但是却将并行操作变成了串行操作，这对性能有很大的影响，所以我们要尽可能的减小锁定的区域，也就是使用细粒度锁。

这一点lock_guard做的不好，不够灵活，lock_guard只能保证在析构的时候执行解锁操作，lock_...]]></description><category></category></item><item><title><![CDATA[c++11多线程]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/90232686</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/90232686</guid><author>ffjffjffjffjffj</author><pubDate>Wed, 15 May 2019 11:32:05 +0800</pubDate><description><![CDATA[转载：https://www.cnblogs.com/wangguchangqing/p/6134635.html

说到多线程编程，那么就不得不提并行和并发，多线程是实现并发（并行）的一种手段。并行是指两个或多个独立的操作同时进行。注意这里是同时进行，区别于并发，在一个时间段内执行多个操作。在单核时代，多个线程是并发的，在一个时间段内轮流执行；在多核时代，多个线程可以实现真正的并行，在多核上真正...]]></description><category></category></item><item><title><![CDATA[ctags  设置]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/85994051</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/85994051</guid><author>ffjffjffjffjffj</author><pubDate>Mon, 07 Jan 2019 11:56:49 +0800</pubDate><description><![CDATA[&quot;设置行号
set number
&quot;语法高亮
syntax on
&quot;自动对其
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set cindent 
set smartindent
set showmatch
set tags=tags;      &quot;设置ctags
set nocompatible &quot; 关闭 vi ...]]></description><category></category></item><item><title><![CDATA[auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/85046144</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/85046144</guid><author>ffjffjffjffjffj</author><pubDate>Mon, 17 Dec 2018 10:55:20 +0800</pubDate><description><![CDATA[stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结

stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结

 

1. auto_ptr
auto_ptr主要是用来解决资源自动释放的问题，比如如下代码：
void Function()
{
Obj*p = new Obj(20);
......]]></description><category></category></item><item><title><![CDATA[linux sed命令就是这么简单]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/85044265</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/85044265</guid><author>ffjffjffjffjffj</author><pubDate>Mon, 17 Dec 2018 09:49:17 +0800</pubDate><description><![CDATA[linux sed命令就是这么简单



阅读目录

概述
	sed命令的选项
	删除行
	新增行
	替换行
	替换部分字符串而不是整行
	搜索并输出行内容
	将修改应用到文件中
	sed正则中的元字符
回到顶部

概述

sed命令是一个面向字符流的非交互式编辑器，也就是说sed不允许用户与它进行交互操作。sed是按行来处理文本内容的。在shell中，使用sed来批量修改文本内容是非常方便的。
...]]></description><category></category></item><item><title><![CDATA[C语言结构体初始化的四种方法]]></title><link>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/85006339</link><guid>https://blog.youkuaiyun.com/ffjffjffjffjffj/article/details/85006339</guid><author>ffjffjffjffjffj</author><pubDate>Fri, 14 Dec 2018 16:50:05 +0800</pubDate><description><![CDATA[C语言结构体初始化的四种方法

2018年03月15日 17:17:19 ericbars 阅读数：20853

版权声明：本文为博主原创文章，未经博主允许不得转载。 https://blog.youkuaiyun.com/ericbar/article/details/79567108

定义


struct InitMember
{
    int first；
    double second；
 ...]]></description><category></category></item></channel></rss>