自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

心之所向,身之所往

专注于多媒体技术(H264、HEVC、流媒体、ffmpeg、DirectShow、DXVA、MediaFundation)

  • 博客(312)
  • 资源 (4)
  • 收藏
  • 关注

原创 Hook参考源码

HOOK可以参考以下三个源码:mHook, minHook, Detours

2015-05-03 07:54:39 1145

转载 x264_scan8 的理解

原文:http://blog.csdn.net/hevc_cjl/article/details/8273533先上代码及注释[cpp] view plaincopy#define X264_SCAN8_SIZE (6*8) //!  #define X264_SCAN8_0 (4+1*8) //!    static const i

2015-04-06 08:51:45 1173

原创 I 帧和 IDR 帧的区别

I 帧和 IDR 帧的区别:    IDR 帧属于 I 帧。解码器收到 IDR frame  时,将所有的参考帧队列丢弃 (用x264_reference_reset 函数实现——在 encoder.c 文件中) 。这点是所有 I 帧共有的特性,但是收到 IDR 帧时,解码器另外需要做的工作就是:把所有的 PPS 和 SPS 参数进行更新。由此可见,在编码器端,每发一个 IDR ,就相

2015-04-04 09:21:05 16514 3

转载 X264如何阅读数

最近我也开始看 X264 的代码了,于是想到把我读代码的过程记录下来,因为总有很多新手问如何读代码,我这个帖子就是专为这些人写的。至于会读代码的人就完全没有必要看了。下面当然是以 X264 为例了。JM 以及其他代码的学习方法和技巧都是完全一样的。我所用的版本是在帖子 在VS2008下编译最新版的x264连接错误 里上传的版本。最新版本的代码基本结构应该变化不大。首先肯定是要把 X264

2015-04-03 21:05:17 1594

转载 Windows下编译x264

早期的版本有vc可以直接编译的, 现在的没有vc版本了;如果希望在windows上学习x264,可以直接找到vc版本;这里例举一下,网上的两个版本方法:一:《VS2010编译x264(20091006)》如果你仅仅需要使用x264的话你可以到这下载:http://x264.nl/x264的源码下载地址:http://www.vid

2015-04-01 23:14:13 1954

转载 Win8+VS2012(32位)下编译x265

相信很多朋友都尝试过编译x265,本人之前总是一头雾水,根据其x265官网的介绍尝试了好几种办法,一直没有搞定,还装了很多东西,什么yasm、Intel编译器和Cmake之类的,后来发现我把问题想得太复杂了,现介绍我在VS2012平台下编译x265的方法。前期准备工作:1、x265开源代码。2、系统预安装Cmake软件。3、安装yasm和vld。具体步骤如下

2015-03-31 07:58:13 1434

转载 SSE指令集入门

Intel公司的单指令多数据流式扩展(SSE,Streaming SIMD Extensions)技术能够有效增强CPU浮点运算的能力。Visual Studio .NET 2003提供了对SSE指令集的编程支持,从而允许用户在C++代码中不用编写汇编代码就可直接使用SSE指令的功能。MSDN中有关SSE技术的主题[1]有可能会使不熟悉使用SSE汇编指令编程的初学者感到困惑,但是在阅读MSDN有关

2015-03-27 21:46:33 27311

转载 编写高效代码(8) 程序、数据访问符合Cache的时间、空间局部性

Cache正是利用了程序、数据访问时的时间局部性和空间局部性,为了使Cache的访问效率最高,程序和数据的组织,也应该要符合这两个特性。最典型的例子就是二维数组的访问,下面就是一个二维数组:二维数组        如果a[i][j]在Cache中,那么a[i][j+1]就很可能也在Cache中,但是a[i+1][j]则不一定。于是代码这样写就不太好: for

2015-03-27 21:11:50 1883

转载 编写高效代码(7) 优化内存访问——别让包袱拖垮了你

从理论上看,每条运算指令的执行时间都很短,大多数指令一个Cycle就能完成,很多时候还能一个Cycle执行多条指令,可是实际上,执行指令只是处理器要做的很少一部分工作,处理器还要从存储器中取指令,从存储器中将数据导入到寄存器中,等算完后,再将结果存入到存储器中。        处理器运算的速度像兔子赛跑一样快,但是存储器的访问速度像乌龟走路一样慢,而且越是远离内核的存储器,访问速度越慢。

2015-03-27 21:11:27 1339

转载 编写高效代码(6) 数据对齐访问

在32位处理器中,一个int型变量占4个byte,假设这个变量i在内存中占据2、3、4、5这4个byte的位置,如下图所示。 数据非对齐存储        内核在访问这个数据时,会先将从0开始的4个byte读入到寄存器A中,再将从4开始的4个byte读入到寄存器B中,再将有效的数据拼成一个int数据,放在寄存器C中,可见,这种访问效率是多么的低下啊,如果变量i存储在从0开始

2015-03-27 21:11:19 815

转载 编写高效代码(5) 尽量减少分支

我们在介绍处理器时,已经知道了,现在的处理器都是流水线结构,if和switch等语句会带来跳转,而跳转会打乱流水线的正常执行,影响程序的执行效率。         下面这段代码,把奇数赋一个值,把偶数赋一个值,可以用这种方式实现: [cpp] view plaincopyprint?for(i=0; i  {       if

2015-03-27 21:10:22 885

转载 编写高效代码(4) 在精度允许的条件下,将浮点数定点化

浮点指令要比定点指令慢很多,功耗也大很多,在精度要求不那么高的情况下,就可以将浮点数定点化,用定点指令来代替浮点指令,一个典型的例子就是alpha混合。        《反恐精英》是很多人非常喜欢的游戏,在下面的游戏截图中,一个人扔了个烟雾弹,画面呈现出半透明的烟雾效果,随着时间的推移,烟雾逐渐散去,画面恢复到原来的状态。        这种效果如果让美工来实现,那会把人累死,其实

2015-03-27 21:10:02 1936 3

转载 编写高效代码(3) 减少处理器不擅长的操作——不要逼我做我不喜欢的事情

尺有所短,寸有所长,每种处理器都有自己擅长与不擅长的操作。        在与处理器配套发布的指令集手册中,都会描述每个指令的执行周期,单周期指令是处理器最喜欢的,不仅执行时间短,而且利于流水线执行。加、减、逻辑运算等,常常是单周期指令,乘、除、分支指令、浮点指令、内存存取操作等,常常需要较多的时钟周期。我们在编程时,就应该少使用执行时间长的指令。        Q:这些复杂指令都

2015-03-27 21:09:33 811

转载 编写高效代码(2) 空间换时间——我们总是在走,却忘了停留

时间和空间的关系,是霍金这种智商的人要研究的东西,我们只需要知道,在编程时,空间是可以换时间的,时间也是可以换空间的。         李开复在他的自传《世界因你不同》中描述了他小时候在美国学校里的一个故事,老师出了道题:“谁知道1/7等于多少?”小开复马上大声回答:“0.142857”,老师和同学们都惊呼开复是个天才,其实事实情况是,开复以前在台湾时就记下了这个答案。这就是一个典型的以空

2015-03-27 21:08:28 852

转载 编写高效代码(1) 减少函数调用——不要老打断我

函数是结构化程序设计的产物,它使代码更加模块化,耦合性更低,重用性更高。不过,函数调用会带来额外的开销,除了引起跳转外,还会产生额外的指令。        人都有这样的经验,做一件事情时,如果被人打断,重新再回来做这件事情,就需要一段恢复时间,如果老是被打断,那事情就没法做了。函数调用也是这样,要进行参数压栈出栈、寄存器保存、指令跳转等。多个步骤如果程序的性能要求较高,就可以将一些小的函数

2015-03-27 21:07:48 933

转载 H.264中的P-Skip宏块和BSkip宏块简介

先说PSkip宏块,再说BSkip宏块.       P-Skip宏块是一种特殊的P宏块,在H.264中非常常见,那么P-Skip宏块特殊在什么地方呢?下面会慢慢道来.        对于一般的P宏块而言,像素残差和运动矢量残差都会写入码流,从编码端传到解码端,但是P-Skip宏块的特殊之处就在于,既不传送像素残差,也不传送运动矢量残差(在这种情况下,像素残差和运动矢量残差

2015-03-22 21:46:24 1340

转载 结合avi视频文件头十六进制码分析AVI格式

这段时间要搞视频合成方面的东西,因此打算先弄明白avi视频的格式,介绍这方面内容的东西google一下一大堆,可是很悲剧,现在的人基本上都喜欢copy,内容基本来源于同一篇,对我没什么实质性的帮助。本来是希望通过看看一些avi合成的源码来分析avi的结构的,可是windows下的程序基本是调用directshow完成的,格式方法都封装好了。  百思不得其解之余,还只自己分析吧。  开始之前

2015-03-14 22:24:41 2855

转载 MP4文件格式解析

目前MP4的概念被炒得很火,也很乱。最开始MP4指的是音频(MP3的升级版),即MPEG-2 AAC标准。随后MP4概念被转移到视频上,对应的是MPEG-4标准。而现在我们流行的叫法,多半是指能播放MPEG-4标准编码格式视频的播放器。但是这篇文章介绍的内容跟上面这些都无关,我们要讨论的是MP4文件封装格式,对应的标准为ISO/IEC 14496-12,即信息技术 视听对象编码的第12部分:ISO

2015-03-14 21:36:04 30874 1

转载 MP4文件格式的解析,以及MP4文件的分割算法

mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime。以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心思,主要问题是处理mp4文件庞大的“媒体头”。当然,流媒体点播也可以采用flv格式来做,flv也可以封装H.264视频数据的,不过Adobe却不推荐这么做,人家说毕竟mp4才是H.264最佳的存储格式嘛。  这几天整理并重构了一下mp4文件

2015-03-14 21:28:10 1606

转载 FLV封装格式分析器

=====================================================视音频编解码学习工程系列文章列表:视音频编解码学习工程:H.264分析器视音频编解码学习工程:AAC格式分析器视音频编解码学习工程:FLV封装格式分析器视音频编解码学习工程:TS封装格式分析器视音频编解码学习工程:JPEG分析器=====

2015-03-14 20:47:38 1857

转载 Media Foundation学习笔记(七)Media Foundation的架构 Source Reader

Source Reader提供了除了使用Media Session和Pipeline处理媒体数据之外的一种可选的方法。Source Reader的典型应用就是从文件、网络流和视音频抓取设备等获取Media Sample。Source Reader内部使用一个Media Source对象,Source Reader管理所有的对Media Source对象的方法调用。如果Media Sourc

2015-03-14 20:26:35 6114 1

转载 Media Foundation学习笔记(八)编程练习:一个通用视频文件播放器

我将有关Media Foundation的函数调用封装到一个类CSpsPlayer中了,CSpsPlayer类的使用方法如下:1)CSpsPlayer* pPlayer = new CSpsPlayer(hWndPlay);2)pPlayer->OpenFile("c:\\ttt.asf");3)获取视频时长pPlayer->GetTimeLen();单位是

2015-03-14 20:26:15 4999

转载 Media Foundation学习笔记(六)Media Foundation的架构 Media Session

Media Session是管理数据流的对象。 接口:IMFMediaSession。 创建对象:MFCreateMediaSession、MFCreatePMPMediaSession(创建支持受保护内容的MedisSession,PMP全称是Protected Media Path)。 一般一个应用使用MediaSession是以下流程:

2015-03-14 20:22:27 2154

转载 Media Foundation学习笔记(五)Media Foundation的架构 Pipeline

Pipeline层是直接产生和处理媒体数据的层,它由“Media Sources”、“MFTs”和“Media Sinks”组成。大多数应用程序不需要直接调用Pipeline层对象的方法,而只需要使用如“Media Session”、“Source Reader”和“SinkWriter”这些上层的对象。Media SourcesMedia Sources产生媒体数据,典型的如:读文件、捕获设备或

2015-03-14 20:21:14 5454 1

转载 Media Foundation学习笔记(四)Media Foundation的架构 Platform API

Media Foundation Platform API 初始化HRESULT hr = MFStartup(MF_VERSION);注意:如果应用程序编译时使用的和系统上Media Foundation的dll不匹配的头文件,MFStartup会返回MF_E_BAD_STARTUP_VERSION错误! MFShutdown(); 

2015-03-14 20:20:43 3581

转载 Media Foundation学习笔记(三)Media Foundation的架构 基本对象类型

基本对象类型  Attributes 一个Attribute就是一个“键”-“值”对,其中“键”是一个GUID,“值”是一个PROPVARIANT。在Media Foundation中,Attributes被广泛地用于配置对象、描述媒体格式、查询对象属性和其他目的。“值”只能是这7种类型:UINT32、UINT64、64-bits浮点数、GUID、n

2015-03-14 20:19:23 5078

转载 Media Foundation学习笔记(一)重要概念

学习Media Foundation之前需要理解以下几个重要概念。(一)流定义:一个使用一致类型的媒体数据序列。例如:视频、音频、文本、脚本命令、静止图片等。通常一个媒体文件包含一个或者多个流。 (二)压缩 目的:通过移除冗余数据来减小数据流的大小。分为有损和无损压缩2种压缩方式。 (三)媒体容器 一个

2015-03-14 20:19:00 3118

转载 Media Foundation学习笔记(二)Media Foundation的架构 概览

概览下面的图表展示了Media Foundation架构的一个上层视图:  如上所示,Media Foundation提供了2种编程模型: 第一种,Media Pipeline模式。如图表左边部分所示,使用一个端到端Pipeline,类似DShow中使用GraphBuilder、Filter的模式。 第二种:Souce Reader 

2015-03-14 20:18:09 6344 1

转载 简单实例 - 使用Media Session来播放文件

/** blackboy   [email protected]* QQ群: 135202158* 转载请注明作者及出处*/参考MSDN官方的页面:http://msdn.microsoft.com/en-us/library/ms703190(v=vs.85)本文详细演示了如何使用Media Foundation中的Media Sessio

2015-03-14 20:17:29 5270

转载 DirectShow 的重要接口

DirectShow 的重要接口  DirectShow采用了COM标准,所以很多重要的功能都是通过COM接口来完成。下面就列举一些重要的DirectShow的接口。  (1) IGraphBuilder接口  用于构造Filter Graph的接口,建立和管理一系列的Filter,过滤和处理源媒体流。  (2) IMediaControl接口  用于控制多

2015-03-08 22:16:49 1718 1

转载 x264阅读记录-3

14. x264_macroblock_encode函数-1这个函数主要根据已经选定的模式来对宏块残差进行编码。(1)如果是P_SKIP模式,那么调用x264_macroblock_encode_pskip函数在x264_macroblock_encode_pskip中先对亮度和色度进行运动补偿,调用的函数函数h->mc.mc_luma和 h->mc.mc_chroma。这

2015-03-01 16:58:38 766

转载 x264阅读记录-2

x264阅读记录-27. x264_encoder_encode函数-1查看该函数代码(Encoder.c文件)可以发现,该函数中注释很详细,对编码的整个步骤展示的也相对比较清晰。在查看具体的代码之前,我们需要了解牵扯到x264帧管理过程中的三个数组:x264_frame_t *current[X264_BFRAME_MAX*4+3];/*已确定帧类型,待编码帧,每

2015-03-01 16:58:01 885

转载 x264阅读记录-1

x264阅读记录-1x264阅读记录-1 采用x264版本是x264-snapshot-20060316-2245。1. main函数x264的main函数位于x264.c中,下面是main函数调用情况:(1)_setmode函数和_fileno函数这两个函数是微软提供的两个库函数。_setmode函数位于io.h文件中,主要作用是设置特定模式匹配的文件

2015-03-01 16:56:54 1035

转载 x264源代码分析-转

相关说明:1.     使用版本:  x264-cvs-2004-05-112.     这次的分析基本上已经将代码中最难理解的部分做了阐释,对代码的主线也做了剖析,如果这个主线理解了,就容易设置几个区间,进行分工阅读,将各个区间击破了.3.     需要学习的知识:a)       编码器的工作流程.b)      H.264的码流结构,像x264_sps

2015-02-27 21:24:28 869

转载 自己动手写RTP服务器——用RTP协议传输TS流

上一篇文章我们介绍了关于RTP协议的知识,那么我们现在就自己写一个简单的传输TS流媒体的RTP服务器吧。预备知识关于TS流的格式:TS流封装的具体格式请参考文档ISO/IEC 13818-1。这里我们只需要了解一些简单的信息就好。首先TS流是有许多的TS Packet组成的,每个TS Packet的长度固定为188 bytes,每个packet都是以sync_byte:0x47开头

2015-02-27 21:22:11 1857

转载 自己动手写RTP服务器——关于RTP协议

2014-02-24 14:11 270人阅读 评论(0) 收藏 举报目录(?)[+]本文会带领着你一步步动手实现一个简单的RTP传输服务器,旨在了解RTP流媒体传输协议以及一些关于多媒体编解码的知识。关于RTP协议的必备知识要动手实现一个协议,当然首先需要阅读该协议的文档。RTP协议的文档,有rfc1889、rfc1890、rfc3550,其中rf

2015-02-27 21:21:08 1776

转载 x264码率控制总结3——码率控制参数详解

x264码率控制参数详解  -q, --qp           Force constant QP (0-51, 0=lossless)默认:无说明:三种可选的码率控制方法(bitrate, CQP,CRF)之一。设置x264使用固定QP模式。设定的QP将被作为P帧的量化参数,I帧和B帧的量化参数由–ipratio and –pbratio参数进一步算出。CQP模式使用固定的QP

2015-02-25 23:07:11 21148

转载 X264码率控制总结2——x264码率控制方法概述

X264码率控制方法概述x264/doc/ratecontrol.txtA qualitative overview of x264's ratecontrol methodsBy Loren Merritt历史笔记:本文件是过时的,但相当一部分叙述仍然是准确的,以下是一些重要的码率控制算法更新:1. 默认情况下,MB-tree代替了qcomp用以计算各帧的复杂度,MB

2015-02-25 23:05:09 4520

转载 X264码率控制总结1——ABR,CQP,CRF

1.  X264显式支持的一趟码率控制方法有:ABR, CQP, CRF. 缺省方法是CRF。这三种方式的优先级是ABR > CQP > CRF.[cpp] view plaincopyif ( bitrate )                rc_method = ABR;  else if ( qp || qp_constant ) rc_method = CQP;  else      

2015-02-25 23:04:33 40122

转载 x264参数介绍(一、帧类型和码率控制)

【 翻译 】x264参数介绍(一、帧类型和码率控制)2010年10月2日评论 发表评论翻译自:http://mewiki.project357.com/wiki/X264_Settings,水平有限,勿吝指教。第二部分:http://blog.yikuyiku.com/?p=2206输入用1个绝对路径定义输入文件(或者2个,rawYUV文件)。如

2015-02-25 23:04:15 7737

H264码流NALU分析

H264码流,NALU结构分析,可以进行二进制分析

2014-07-20

计算机专业各大公司面试题

计算机专业各大公司笔试、面试题,包括百度、腾讯、华为、中心、微软、迅雷、搜狐、网易、盛大等。

2011-04-19

腾讯面试算法,体验设计高效算法重要性

腾讯面试算法,体验设计高效算法重要性,当数据量很大时,效果更为明显,有图!

2011-04-19

纯正美语发音100个秘籍

纯正美语发音100个秘籍,介绍美语发音特点,如何发说纯正口语。呵呵!

2010-06-22

空空如也

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

TA关注的人

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