当前位置:  编程技术>移动开发
本页文章导读:
    ▪谷歌中国的身故螺旋        谷歌中国的死亡螺旋 谷歌在中国市场遭到了多方面的打击:1,谷歌的服务全线被墙;2,谷歌搜索日益边缘化;3,移动地图被百度赶上;4,谷歌与北京的糟糕关系。 谷歌的服务全线被墙 就在.........
    ▪ 反向投影backproject的直观懂得        反向投影backproject的直观理解1. 什么是backproject? 2. backproject 有什么用? 3. 例证 1. 什么是backproject? 反向投影:opencv docs给出的概念是“一种记录给定图像中的像素点如何适应直方图模型像.........
    ▪ 【多媒体打包格式详解】-MKV【3】       【多媒体封装格式详解】---MKV【3】有了上文我们经知道了MKV文件时长、音视频的类型、分辨率、采样率等基本信息,接下来就是音视频的数据了。 4.Clusters 所有的音视频帧数据都在这部分内.........

[1]谷歌中国的身故螺旋
    来源: 互联网  发布时间: 2014-02-18
谷歌中国的死亡螺旋

谷歌在中国市场遭到了多方面的打击:1,谷歌的服务全线被墙;2,谷歌搜索日益边缘化;3,移动地图被百度赶上;4,谷歌与北京的糟糕关系。

谷歌的服务全线被墙

就在近期, Google的IP地址最近两天遭到了防火墙的严重干扰,用户无法访问谷歌的所有服务,功能受限。

GFW采用连接重置的办法对Google进行服务拒绝工具,虽然偶尔能让你用是那个几次,但是长期以往,会使人产生Google服务可用性差的印象。

谷歌搜索日益边缘化

搜索市场份额从7月的5.77%降至10月的 4.12%,从第三落到第四(次于百度奇虎搜狗,三者分别为73.48%,9.79%,7.81%),日益边缘化。

谷歌一年的股价表现(深蓝色)

据CNZZ数据显示,谷歌在中国的7月份的市场份额为5.77%,排在第三位,低于百度的81.54%和搜狗的7.49%。

然而,在10月19日,谷歌的排名已经下降到第四(4.12%),奇虎推出的搜索引擎在8月份表现抢眼,尽管已经证明360搜索是一种急功近利的表现。

移动地图被百度赶上

谷歌的搜索业务下降最明显的标志是移动地图份额从第一季度的23.2%降至第二季度的17.5%,即将被百度地图赶上(17.3%),落后于高德地图的25.7%。

谷歌的市场份额急剧下降是由于许可证的问题,使用目前的版本无法更新,服务不稳定。

谷歌与北京的糟糕关系

谷歌与北京之间的糟糕关系让它的中国业务面临难以预测的障碍。

最明显的例子是收购摩托罗拉移动,虽然谷歌和摩托罗拉是美国公司,但它们在中国的市场都需要得到北京的批准。其结果是谷歌花了半年多时间,得到了北 京的同意,但它有一个条件,至少在未来5年内为中国的手机制造商提供新版本的android,它的竞争对手。如百度、阿里巴巴都有足够的时间来开发自己的 手机操作系统。

随着中国成为世界上最大的市场,越来越多的企业将参与其中,谷歌几乎所有的业务将面临更多的阻碍。

到目前为止,谷歌与北京的糟糕关系并没有影响其收入,因为中国市场对谷歌是微不足道的。然而,谷歌在中国的潜在收入将会损失巨大。

因为,根据eMarketer的预测,到2017年,中国的搜索广告市场将到达2012年美国的水平,也就是¥17.58亿美元。

1楼gaoyp昨天 07:43google用对金钱的态度实际证明了自己的气节!国内的那些批着民族外衣的企业呢?

    
[2] 反向投影backproject的直观懂得
    来源: 互联网  发布时间: 2014-02-18
反向投影backproject的直观理解

1. 什么是backproject?

2. backproject 有什么用?

3. 例证


1. 什么是backproject?

反向投影:opencv docs给出的概念是“一种记录给定图像中的像素点如何适应直方图模型像素分布的方式。简单的讲, 所谓反向投影就是首先计算某一特征的直方图模型,然后使用模型去寻找图像中存在的该特征。”


第一句讲的是backproject的算法实质,但是不好理解,第二句好理解,但是只是重点讲了backproject的应用。 两句都提到了直方图的概念。

从图像到直方图,这个过程比较好理解。

而backproject正是反过来,由直方图到形成图像,算法步骤有点类似于直方图均衡化,只不过,直方图均衡化是将图像结果中的每个像素的值由一个地方搬到一个新地方(我对直方图均衡化的直观理解),而backproject是直接取直方图中的值,即以灰度为例,某种灰度值在整幅图像中所占面积越大,其在直方图中的值越大,backproject时,其对应的像素的新值越大(越亮),反过来,某灰度值所占面积越小,其新值就越小。


上面的backproject过程是:由源图像 ——> 直方图 ——> backproject图像


而backproject更常用的用途是:查找指定特征,正是第二句话的描述。 此时,backproject的基本过程是:

1. 拿到 特征图像 (或模板图像)

2. 得到 特征图像的直方图

3. 拿到源图像,依据源图像的每个像素的值,在特征图像的直方图中找到对应的值,然后将直方图的值赋给新的图像,backproject算法就完成了。


对于calcBackProjectPatch,整个是基于块的形式,利用直方图做匹配,类似于模板匹配,只不过这些模板转换为直方图,而原图中以某点为基准,抠出来作对比的部分也转换为直方图,两个直方图作匹配,匹配的结果作为此点的值。 结果会是一张灰度图。


借用下别人的一张图:


source: http://www.cnblogs.com/zsb517/archive/2012/06/20/2556508.html


2. backproject有什么用?

正如上面第二幅图图示,可以由模板特征(那个小黑窗口,是在hue窗口中心选取了一小块),在另外一幅图像中寻找对应的目标。


另外,meanshift中也有应用到backproject,这部分后续分析。


3. 例证

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/back_projection/back_projection.html#back-projection

拿到源图像,由原图转为HSV空间,取Hue色彩通道,如hue窗口显示,本应该是彩色的,不过灰度显示出来不太像那么回事。统计直方图,上面图示中,直方图的等级为9. 再backproject到新的图像中。

相对于原来的例子, 增加了显示hue图像。
    Mat handhue = hue; // hue(Rect(hue.rows/2-10, hue.cols/2-10, 20, 20)).clone();
    imshow("handhue", handhue);

    /// Get the Histogram and normalize it
    calcHist( &handhue, 1, 0, Mat(), hist, 1, &histSize, &ranges, true, false );


第二幅图

将handhue取值替换为hue图像的中心部分,作为特征图像

Mat handhue = hue(Rect(hue.rows/2-10, hue.cols/2-10, 20, 20)).clone(); //  hue; 


    
[3] 【多媒体打包格式详解】-MKV【3】
    来源: 互联网  发布时间: 2014-02-18
【多媒体封装格式详解】---MKV【3】

有了上文我们经知道了MKV文件时长、音视频的类型、分辨率、采样率等基本信息,接下来就是音视频的数据了。

4.Clusters
所有的音视频帧数据都在这部分内装着。
1个Cluster内可能有很多个BlockGroup组成,BlockGroup内又由若干个Block组成。这些Block内就是音视频的帧数据。
1个Cluster并不一定只是音频或者视频。它是由不同的音视频BlockGroup交叉组成。因为多媒体文件中的音视频数据本来就是交叉出现的。
Clusters Cluster Timecode   BlockGroup Block BlockGroup Block ReferenceBlock BlockGroup Block Cluster Timecode   BlockGroup Block BlockGroup Block BlockGroup Block BlockGroup Block BlockDuration Element Name L EBML ID Ma Mu Rng Default T 1 2 3 W Description     Cluster Cluster 1 [1F][43][B6][75] - * - - m * * * * The lower level element containing the (monolithic) Block structure. Timecode 2 [E7] * - - - u * * * * Absolute timecode of the cluster (based on TimecodeScale). SilentTracks 2 [58][54] - - - - m * * *   The list of tracks that are not used in that part of the stream. It is useful when using overlay tracks on seeking. Then you should decide what track to use. SilentTrackNumber 3 [58][D7] - * - - u * * *   One of the track number that are not used from now on in the stream. It could change later if not specified as silent in a further Cluster. Position 2 [A7] - - - - u * * *   The Position of the Cluster in the segment (0 in live broadcast streams). It might help to resynchronise offset on damaged streams. PrevSize 2 [AB] - - - - u * * * * Size of the previous Cluster, in octets. Can be useful for backward playing. SimpleBlock 2 [A3] - * - - b   * * * Similar to Block but without all the extra information, mostly used to reduced overhead when no extra feature is needed. (see SimpleBlock Structure) BlockGroup 2 [A0] - * - - m * * * * Basic container of information containing a single Block or BlockVirtual, and information specific to that Block/VirtualBlock. Block 3 [A1] * - - - b * * * * Block containing the actual data to be rendered and a timecode relative to the Cluster Timecode. (see Block Structure) BlockVirtual 3 [A2] - - - - b         A Block with no data. It must be stored in the stream at the place the real Block should be in display order. (see Block Virtual) BlockAdditions 3 [75][A1] - - - - m * * *   Contain additional blocks to complete the main one. An EBML parser that has no knowledge of the Block structure could still see and use/skip these data. BlockMore 4 [A6] * * - - m * * *   Contain the BlockAdditional and some parameters. BlockAddID 5 [EE] * - not 0 1 u * * *   An ID to identify the BlockAdditional level. BlockAdditional 5 [A5] * - - - b * * *   Interpreted by the codec as it wishes (using the BlockAddID). BlockDuration 3 [9B] - - - TrackDuration u * * * * The duration of the Block (based on TimecodeScale). This element is mandatory when DefaultDuration is set for the track (but can be omitted as other default values). When not written and with no DefaultDuration, the value is assumed to be the difference between the timecode of this Block and the timecode of the next Block in "display" order (not coding order). This element can be useful at the end of a Track (as there is not other Block available), or when there is a break in a track like for subtitle tracks. When set to 0 that means the frame is not a keyframe. ReferencePriority 3 [FA] * - - 0 u * * *   This frame is referenced and has the specified cache priority. In cache only a frame of the same or higher priority can replace this frame. A value of 0 means the frame is not referenced. ReferenceBlock 3 [FB] - * - - i * * * * Timecode of another frame used as a reference (ie: B or P frame). The timecode is relative to the block it's attached to. ReferenceVirtual 3 [FD] - - - - i         Relative position of the data that should be in position of the virtual block. CodecState 3 [A4] - - - - b   * *   The new codec state to use. Data interpretation is private to the codec. This information should always be referenced by a seek entry. Slices 3 [8E] - - - - m * * * * Contains slices description. TimeSlice 4 [E8] - * - - m * * * * Contains extra time information about the data contained in the Block. While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback. LaceNumber 5 [CC] - - - 0 u * * * * The reverse number of the frame in the lace (0 is the last frame, 1 is the next to last, etc). While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback. FrameNumber 5 [CD] - - - 0 u         The number of the frame to generate from this lace with this delay (allow you to generate many frames from the same Block/Frame). BlockAdditionID 5 [CB] - - - 0 u         The ID of the BlockAdditional element (0 is the main Block). Delay 5 [CE] - - - 0 u         The (scaled) delay to apply to the element. SliceDuration 5 [CF] - - - 0 u         The (scaled) duration to apply to the element. ReferenceFrame 3 [C8] - - - - m         DivX trick track extenstions ReferenceOffset 4 [C9] * - - - u         DivX trick track extenstions ReferenceTimeCode 4 [CA] * - - - u         DivX trick track extenstions EncryptedBlock 2 [AF] - * - - b         Similar to SimpleBlock but the data inside the Block are Transformed (encrypt and/or signed). (see EncryptedBlock Structure)
还有用之前的例子 

Cluster  ID =  [1F][43][B6][75] size = 0x12468f (1197711)
剩下的1197711的数据就是这个Cluster 的data
第一个EBML元素 是Timecode  ID = E7 size = 1 值为0 (红框内)
第二个元素ID = A0 查表可知这个EBML元素就是BlockGroup  size = 96042 
紧接着就是ID = A1 第三级EBML元素 Block  size = 96038 
Block 结构如下图
Block Header Offset Player Description 0x00+ must Track Number (Track Entry). It is coded in EBML like form (1 octet if the value is < 0x80, 2 if < 0x4000, etc) (most significant bits set to increase the range). 0x01+ must Timecode (relative to Cluster timecode, signed int16) 0x03+ - Flags Bit Player Description 0-3 - Reserved, set to 0 4 - Invisible, the codec should decode this frame but not display it 5-6 must Lacing
  • 00 : no lacing
  • 01 : Xiph lacing
  • 11 : EBML lacing
  • 10 : fixed-size lacing
7 - not used Lace (when lacing bit is set) 0x00 must Number of frames in the lace-1 (uint8) 0x01 / 0xXX must* Lace-coded size of each frame of the lace, except for the last one (multiple uint8). *This is not used with Fixed-size lacing as it is calculated automatically from (total size of lace) / (number of frames in lace). (possibly) Laced Data 0x00 must Consecutive laced frames
第1字节 表示Track Number
第2-3字节表示Timecode
第4字节表示 flags 
看上面的例子,
Block data 第1个字节 0x81  按照EBML解释方式 Track Number = 1,结合上文得知 这个Block 数据是track 1的数据。track 1对应的是video数据,解码器类型是H.264.也就是这个block 的数据是264帧数据
Timecode 为 0000
flags = 0 

Lace是根据 flags 的值来确定的。上面这个flags 5-6位都是0 所有是no lacing。剩下的96038 - 4 都是视频的帧数据。

将这个96034长度block 的数据转成NALU格式,然后加上从track部分中的CodecPrivate数据中解析出来的sps 和 pps 信息 保存到本地,应该就是1帧的264数据

用elecard 打开 果然是1帧I帧数据


按照这个套路,看看下一个


BlockGroup ID = A0 size = 0x2808

第一个block  ID = A1 size = 0x2805(10245)

第1字节 表示Track Number   =2  表示是track 2的数据,track是ac3 的音频。

第2-3字节表示Timecode = 0x0005;

第4字节表示 flags = 0x04
这个时候就要解析 Lace   flags 第5-6位为10 所有属于fixed-size lacing
Fixed-size lacing 是如下的结构
Fixed-size lacing

In this case only the number of frames in the lace is saved, the size of each frame is deduced from the total size of the Block. For example, for 3 frames of 800 octets each :

  • Block head (with lacing bits set to 10)
  • Lacing head: Number of frames in the lace -1, i.e. 2
  • Data in frame 1
  • Data in frame 2
  • Data in frame 3
07+1 就是包含的帧数,因为是ac3的音频 可以看到 07后面紧接着就是ac3的同步头0x0b77(绿框)
用工具看看相对应的解析结果


按照这种逻辑和方法,我们就可以把mkv文件中的音视频数据流demux出来了。


5.Cueing Data

Cueing Data 这部分内容其实是关键帧的index,如果没有关键帧的index的话,在做seek、快进快退的时候是十分困难的。你要逐个包去找。之前说过flv文件中官方没有做I帧index的规定。但是在民间已经做了补充。mkv官方有对index的规范。那就是Cueing Data 

下面是结构图。

Cueing Data Cues CuePoint CueTime CuePosition CuePoint CueTime CuePosition Cueing Data Cues 1 [1C][53][BB][6B] - - - - m * * * * A top-level element to speed seeking access. All entries are local to the segment. Should be mandatory for non "live" streams. CuePoint 2 [BB] * * - - m * * * * Contains all information relative to a seek point in the segment. CueTime 3 [B3] * - - - u * * * * Absolute timecode according to the segment time base. CueTrackPositions 3 [B7] * * - - m * * * * Contain positions for different tracks corresponding to the timecode. CueTrack 4 [F7] * - not 0 - u * * * * The track for which a position is given. CueClusterPosition 4 [F1] * - - - u * * * * The position of the Cluster containing the required Block. CueRelativePosition 4 [F0] - - - - u         The relative position of the referenced block inside the cluster with 0 being the first possible position for an element inside that cluster. CueDuration 4 [B2] - - - - u         The duration of the block according to the segment time base. If missing the track's DefaultDuration does not apply and no duration information is available in terms of the cues. CueBlockNumber 4 [53][78] - - not 0 1 u * * * * Number of the Block in the specified Cluster. CueCodecState 4 [EA] - - - 0 u   * *   The position of the Codec State corresponding to this Cue element. 0 means that the data is taken from the initial Track Entry. CueReference 4 [DB] - * - - m   * *   The Clusters containing the required referenced Blocks. CueRefTime 5 [96] * - - - u   * *   Timecode of the referenced Block.

继续看上面的例子,我们找到了Cues  所在的位置。

ID = [1C][53][BB][6B]  表示Cues size = 0x7f

紧接着每个ID = 0xBB 就是一个CuePoint ,图中的绿色框中的就是一个。 size = 0xC

CueTime ID = 0xB3  size = 1 data = 0;

CueTrackPositions  ID=0xB7 size=7 data=0xf78101f18215ef

       CueTrack  ID=F7 size = 1 data = 1 表示这个位置的track num 值为1  针对这个流应该是video

       CueClusterPosition  ID = F1 size = 2 data = 15ef   位置是在0x15ef(5615) 相对于Segment 

找到这个位置发现是第一个Clusters 上面章节分析了,这个族的video内容正好是关键帧。

按照这种方式 发现这个文件中共有8个cuepoint 信息


把这个文件中的264视频demux出来,用工具查看发现关键帧正好也是8个。

6.小结
已经把MKV主要部分的内容作了一次详细的叙述,现在对mkv文件做个小结。
1.MKV的基本组成单元都是EBML格式。每个元素都有级别。一级一级的包括组成了mkv不同的部分。
Level 0 Grouping Level 1 Level 2 Level 3
2.MKV是由EBML header 和 Segment 2大部分组成。Segment中又分Meta Seek InformationSegment InformationTrackChaptersClustersCueing DataAttachmentTagging
3.EBML header 部分包含着MKV可辨识性的信息。
4.Meta Seek Information包含其实部分位置信息。
5.Segment Information 包含识别文件的信息,包括 Title 、 SegmentUID,有个比较关心的文件时常信息Duration也在这一部分
6.Track包含了音视频的基本信息,如音视频解码器类型、视频分辨率、音频采样率等。
7.真实的音视频数据信息交叉装在Clusters中
8.Cueing Data 关键帧index,对seek至关重要。


















    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3