<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hwmstudent的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hwmstudent</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hwmstudent]]></copyright><item><title><![CDATA[UNIX高级环境编程（14）文件IO - O_DIRECT和O_SYNC详解]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/73741637</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/73741637</guid><author>hwmstudent</author><pubDate>Mon, 26 Jun 2017 16:52:37 +0800</pubDate><description><![CDATA[原文地址：http://www.cnblogs.com/suzhou/p/5381738.html

O_DIRECT和O_SYNC是系统调用open的flag参数。通过指定open的flag参数，以特定的文件描述符打开某一文件。

这两个flag会对写盘的性能有很大的影响，因此对这两个flag做一些详细的了解。

先看一个open函数的使用例子.








1]]></description><category></category></item><item><title><![CDATA[GstBuffer中data实际的存储地址]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/69946552</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/69946552</guid><author>hwmstudent</author><pubDate>Mon, 10 Apr 2017 14:39:40 +0800</pubDate><description><![CDATA[GstBuffer中data实际的存储地址
前段时间刚开始学Gstreamer，还没学多少就要干活了，最近想用gdb查看GstBuffer的data地址是总很麻烦，要先用gst_buffer_map先获得data，所以就深入的了解了一下GstBuffer中data所存放的地方。下面就和大家分享一下吧！
通常我们需要获取GstBuffer的data数据是通过接口gst_buffer_map得到的]]></description><category></category></item><item><title><![CDATA[mp4文件格式解析（一）]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/69384396</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/69384396</guid><author>hwmstudent</author><pubDate>Thu, 06 Apr 2017 11:16:07 +0800</pubDate><description><![CDATA[原文地址：http://blog.sina.com.cn/s/blog_48f93b530100jz4b.html
目前MP4的概念被炒得很火，也很乱。最开始MP4指的是音频（MP3的升级版），即MPEG-2 AAC标准。随后MP4概念被转移到视频上，对应的是MPEG-4标准。而现在我们流行的叫法，多半是指能播放MPEG-4标准编码格式视频的播放器。但是这篇文章介绍的内容跟上面这些都无关，我们要]]></description><category></category></item><item><title><![CDATA[MP4文件格式详解——元数据moov-mvhd box]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/65938250</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/65938250</guid><author>hwmstudent</author><pubDate>Sat, 25 Mar 2017 17:25:47 +0800</pubDate><description><![CDATA[原文地址：http://blog.youkuaiyun.com/PirateLeo/article/details/7590056





元数据moov（一）（ISO-14496-12）

Author:Pirate Leo

Email:codeevoship@gmail.com

ISO 14496 - 12 定义了一种封装媒体数据的基础文件格式，mp4、3gp、ismv等我们]]></description><category></category></item><item><title><![CDATA[MP4文件格式详解——文件类型ftyp]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/65938111</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/65938111</guid><author>hwmstudent</author><pubDate>Sat, 25 Mar 2017 17:15:58 +0800</pubDate><description><![CDATA[原文地址：http://blog.youkuaiyun.com/PirateLeo/article/details/7590056

元数据moov（一）（ISO-14496-12）

Author:Pirate Leo

Email:codeevoship@gmail.com

ISO 14496 - 12 定义了一种封装媒体数据的基础文件格式，mp4、3gp、ismv等我们常见媒体封装格式]]></description><category></category></item><item><title><![CDATA[MP4文件格式详解——结构概述]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/65937901</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/65937901</guid><author>hwmstudent</author><pubDate>Sat, 25 Mar 2017 16:54:57 +0800</pubDate><description><![CDATA[原文地址：http://blog.youkuaiyun.com/pirateleo/article/details/7061452


MP4文件格式详解（ISO-14496-12/14）
Author:Pirate Leo
Email:codeevoship@gmail.com
一、基本概念
1、 文件，由许多Box和FullBox组成。
2、 Box，每个Box由Header和Data组成]]></description><category></category></item><item><title><![CDATA[I,P,B帧和PTS,DTS的关系]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/65635118</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/65635118</guid><author>hwmstudent</author><pubDate>Fri, 24 Mar 2017 18:08:28 +0800</pubDate><description><![CDATA[原文：http://www.cnblogs.com/qingquan/archive/2011/07/27/2118967.html
基本概念：
I frame ：帧内编码帧 又称intra picture，I 帧通常是每个 GOP（MPEG 所使用的一种视频压缩技术）的第一个帧，经过适度地压缩，做为随机访问的参考点，可以当成图象。I帧可以看成是一个图像经过压缩后的产物。
P frame: ]]></description><category></category></item><item><title><![CDATA[glib交叉编译]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/60595436</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/60595436</guid><author>hwmstudent</author><pubDate>Mon, 06 Mar 2017 20:53:19 +0800</pubDate><description><![CDATA[glib交叉编译








        glib是一个C语言函数库，它对很多系统调用进行了封装，提供了很多实用的功能，能极大地方便编程。
        为了在产品上尝试使用glib，需要对glib进行交叉编译，使其能在ARM9上运行。
以下是版本信息：

        开发平台：Linux ubuntu 3.8.0-35-generic #52~precis]]></description><category></category></item><item><title><![CDATA[h264 NAL头解析]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/60141111</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/60141111</guid><author>hwmstudent</author><pubDate>Fri, 03 Mar 2017 15:43:49 +0800</pubDate><description><![CDATA[h264 NAL头解析





NAL全称Network Abstract Layer，即网络抽象层。在H.264/AVC视频编码标准中，整个系统框架被分为了两个层面：视频编码层面（VCL）和网络抽象层面（NAL）。其中，前者负责有效表示视频数据的内容，而后者则负责格式化数据并提供头信息，以保证数据适合各种信道和存储介质上的传输。NAL单元是NAL的基本语法结构，它包含一个字节的头信]]></description><category></category></item><item><title><![CDATA[Linux系统结构详解]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/59111713</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/59111713</guid><author>hwmstudent</author><pubDate>Wed, 01 Mar 2017 17:04:10 +0800</pubDate><description><![CDATA[Linux系统结构详解






Linux系统一般有4个主要部分：


内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构，它们使得用户可以运行程序、管理文件并使用系统。部分层次结构如图1-1所示。







 1. linux内核


        内核是操作系统的核心，具有很多最基本功能，它负责管理系]]></description><category></category></item><item><title><![CDATA[Linux的SOCKET编程详解]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/59110004</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/59110004</guid><author>hwmstudent</author><pubDate>Wed, 01 Mar 2017 16:11:26 +0800</pubDate><description><![CDATA[1. 网络中进程之间如何通信


进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行，为保证两个相互通信的进

程之间既互不干扰又协调一致工作，操作系统为进程通信提供了相应设施，如

UNIX BSD有：管道（pipe）、命名管道（named pipe）软中断信号（signal）]]></description><category></category></item><item><title><![CDATA[动态库的链接和链接选项-L，-rpath-link，-rpath]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/59057864</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/59057864</guid><author>hwmstudent</author><pubDate>Wed, 01 Mar 2017 10:55:33 +0800</pubDate><description><![CDATA[原文：https://my.oschina.net/shelllife/blog/115958
链接动态库
如何程序在连接时使用了共享库，就必须在运行的时候能够找到共享库的位置。linux的可执行程序在执行的时候默认是先搜索/lib和/usr/lib这两个目录，然后按照/etc/ld.so.conf里面的配置搜索绝对路径。同时，Linux也提供了环境变量LD_LIBRARY_PATH供用户选择]]></description><category></category></item><item><title><![CDATA[Gstreamer整体分析2——Element状态转变所做的事]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/57403369</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/57403369</guid><author>hwmstudent</author><pubDate>Mon, 27 Feb 2017 16:21:58 +0800</pubDate><description><![CDATA[在前面的内容中，我们已经分析了Gstreamer在将element添加到pipeline及连接element时所做的事，一般完成了前面的步骤后，我们会设置pipeline的状态为PLAYING，下面我们来分析一下，Gstreamer设置状态时都让element做了些什么事。
编写应用程序时，我们会调用gst_element_set_state函数用于设置状态，在源码中，我们可以看到，Gstrea]]></description><category></category></item><item><title><![CDATA[Gstreamer插件教程3.2—高级概念(Advanced Concepts)：Cap协商(Caps negotiation)]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/57416452</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/57416452</guid><author>hwmstudent</author><pubDate>Sun, 26 Feb 2017 16:03:36 +0800</pubDate><description><![CDATA[cap协商是找到一种两个element都能够处理的媒体格式（即GstCaps）的一种行为。Gstreamer中的这种处理，对于整个pipeline，大多数情况下都可以找到最优的解决方案。在这个章节，我们解释了它是怎样工作的。
Caps negotiation basics
在Gstreamer中，媒体格式的协商总是遵循如下的简单规则：


一个下游的element在它的sinkpad上建]]></description><category></category></item><item><title><![CDATA[Gstreamer整体分析2——连接Element]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/56844714</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/56844714</guid><author>hwmstudent</author><pubDate>Fri, 24 Feb 2017 18:53:07 +0800</pubDate><description><![CDATA[上一部分中，我们已经介绍了编写应用程序时，element的创建及何时加载插件动态库。在此部分中，我们将介绍Gstreamer是如何将element添加到pipeline中，并把它们连接起来的。]]></description><category></category></item><item><title><![CDATA[Gstreamer整体分析1——Element的创建及Plugin的加载]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/56835491</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/56835491</guid><author>hwmstudent</author><pubDate>Fri, 24 Feb 2017 16:13:06 +0800</pubDate><description><![CDATA[学习Gstreamer断断续续也有一小段的时间了，不仅学习了基础教程和播放教程，同时还开始了翻译Gstreamer插件，但个人觉得对Gstreamer的了解还是比较的浅，特别是在学习和翻译Gstreamer插件的时候，感觉学的东西都是偏局部的，不能很好的串起来，所以，最近开始看Gstreamer的源码，但如果不做笔记的话，又可能会渐渐忘记其内部的工作原理，所以在这里对Gstreamer做一个总体上的分析。此教程不涉及应用的开发（基础教程和播放教程中已介绍），只对Gstramer是如何完成element的创建]]></description><category></category></item><item><title><![CDATA[Gstreamer整体分析2——插件开发]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/56843469</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/56843469</guid><author>hwmstudent</author><pubDate>Fri, 24 Feb 2017 16:07:03 +0800</pubDate><description><![CDATA[根据前面已翻译的Gstramer插件教程部分，我们知道，可以通过gst-template创建一个基础的模板。在模板文件中，我们可以看到，其包含一个*_class_init()函数和一个*_init()函数。
*_class_init函数详解
element会先调用*_class_init()函数进入初始化，在此函数中，一般会为class设定设置性质的函数，如videotestsrc中的：
 ]]></description><category></category></item><item><title><![CDATA[Gstreamer插件教程3.2—高级概念(Advanced Concepts)：不同的调度模式(Different scheduling modes)]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/56673015</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/56673015</guid><author>hwmstudent</author><pubDate>Thu, 23 Feb 2017 20:39:28 +0800</pubDate><description><![CDATA[一个pad的调度模式定义了数据是如何从source pad中接收及发送至sink pad。Gstreamer能够运行两种调度模式，分别称为push和pull模式。Gstreamer支持element能够拥有可以任何方式调度的pad，一个element中的pads并不需要以相同的调度模式运行。
目前为止，我们只讨论了_chain()函数运行element，如，在sink pad上设置了chain函数的element将push数据到它的source pad中。我们称这种模式为push模式，因为一个同级的elem]]></description><category></category></item><item><title><![CDATA[Gstreamer插件教程3.1—高级概念(Advanced Concepts)：需求pads和间或pads(Request and Sometimes pads)]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/56666785</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/56666785</guid><author>hwmstudent</author><pubDate>Thu, 23 Feb 2017 14:41:06 +0800</pubDate><description><![CDATA[到目前为止，你应该能够创建可以接收和发送数据的filter element。这是Gstreamer所支持的简单模型。但Gstreamer还可以做更多的事！在这接下来的章节，我们将讨论多个高级主题，如时间安排、特殊的pad类型、时钟、事件、接口和标签等更多。这些主题使得应用中使用Gstreamer更简单。
直到目前为止，我们只处理了那些一直存在的pads，然而，还有许多pads是只有在某些时候或只有应用程序要求时才被创建的。第一个被称为sometimes pad，第二个被称为request pad。pad的可]]></description><category></category></item><item><title><![CDATA[linux IO刷新机制sync, fsync, fdatasync和fflush详解及注意事项]]></title><link>https://blog.youkuaiyun.com/hwmstudent/article/details/55517178</link><guid>https://blog.youkuaiyun.com/hwmstudent/article/details/55517178</guid><author>hwmstudent</author><pubDate>Fri, 17 Feb 2017 16:47:35 +0800</pubDate><description><![CDATA[Linux，unix在内核中设有 缓冲区高速缓冲或页面高速缓冲，大多数磁盘I/O都通过缓冲进行，采用延迟写技术。
sync:将所有修改过的快缓存区排入写队列，然后返回，并不等待实际写磁盘操作结束
fsync：只对有文件描述符制定的单一文件起作用，并且等待些磁盘操作结束，然后返回。
fdatasync：类似fsync，但它只影响文件的数据部分。fsync还会同步更新文件的属性。
fflush：标准I/O函数（如：fread，fwrite）会在内存建立缓冲，该函数刷新内存缓冲，将内容写入内核缓冲，要想将其写入磁]]></description><category></category></item></channel></rss>