谷歌在中国市场遭到了多方面的打击: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用对金钱的态度实际证明了自己的气节!国内的那些批着民族外衣的企业呢?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;
有了上文我们经知道了MKV文件时长、音视频的类型、分辨率、采样率等基本信息,接下来就是音视频的数据了。
4.Clusters- 00 : no lacing
- 01 : Xiph lacing
- 11 : EBML lacing
- 10 : fixed-size lacing
将这个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;
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
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.小结