<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>润物无声 &#187; Flv</title>
	<atom:link href="http://blog.zhourunsheng.com/tag/flv/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zhourunsheng.com</link>
	<description>天空一朵雨做的云</description>
	<lastBuildDate>Sat, 08 May 2021 05:17:21 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>FLV格式流媒体的缓存渐进拖放原理</title>
		<link>http://blog.zhourunsheng.com/2012/06/flv%e6%a0%bc%e5%bc%8f%e6%b5%81%e5%aa%92%e4%bd%93%e7%9a%84%e7%bc%93%e5%ad%98%e6%b8%90%e8%bf%9b%e6%8b%96%e6%94%be%e5%8e%9f%e7%90%86/</link>
		<comments>http://blog.zhourunsheng.com/2012/06/flv%e6%a0%bc%e5%bc%8f%e6%b5%81%e5%aa%92%e4%bd%93%e7%9a%84%e7%bc%93%e5%ad%98%e6%b8%90%e8%bf%9b%e6%8b%96%e6%94%be%e5%8e%9f%e7%90%86/#comments</comments>
		<pubDate>Sat, 02 Jun 2012 12:21:23 +0000</pubDate>
		<dc:creator><![CDATA[润物无声]]></dc:creator>
				<category><![CDATA[移动开发]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Flv]]></category>
		<category><![CDATA[流媒体]]></category>
		<category><![CDATA[缓存]]></category>

		<guid isPermaLink="false">http://blog.zhourunsheng.com/?p=1620</guid>
		<description><![CDATA[<p>前几天讲解了mp4格式文件的解析，边缓存边播放，拖动处理，faplayer的编译等等，可以查看我的《Andro [&#8230;]</p>
<p><a rel="nofollow" href="http://blog.zhourunsheng.com/2012/06/flv%e6%a0%bc%e5%bc%8f%e6%b5%81%e5%aa%92%e4%bd%93%e7%9a%84%e7%bc%93%e5%ad%98%e6%b8%90%e8%bf%9b%e6%8b%96%e6%94%be%e5%8e%9f%e7%90%86/">FLV格式流媒体的缓存渐进拖放原理</a>，首发于<a rel="nofollow" href="http://blog.zhourunsheng.com">润物无声</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>前几天讲解了mp4格式文件的解析，边缓存边播放，拖动处理，faplayer的编译等等，可以查看我的《<a href="http://blog.zhourunsheng.com/tag/android/">Android系列专题文章</a>》，本文给大家介绍flv格式文件的缓存渐进拖放原理。</p>
<p>flv是Adobe公司提出来的一种视频存储格式，因为其压缩的效果比较好，容量小，所以很适合网络传播，这也就是国外的youtube，国内的优酷，土豆等等都无一类外的采用flv格式来进行存储，有关flv格式的具体内容可以参照<a href="http://en.wikipedia.org/wiki/Flash_Video">Flash Video</a>和 <a href="http://osflash.org/flv">osflash</a>。<span id="more-1620"></span></p>
<p>flv是采用一种tag的数据结构进行流媒体数据的存储，首先是文件头，接下来是可选的meta信息，再后面就是音频和视频数据的交替存储，比起来mp4文件庞大的文件头，flv的文件头基本可以忽略了，只有9个字节，meta部分存储一些音视频解码和长度等的一些信息，具体的音频和视频的tab部分存储实际的流媒体数据。</p>
<p>mp4文件之所以能边缓存边播放，并且可以支持跳转，原因是文件头存储了视频整体的信息，像视频的总时长，关键帧，对应的时间轴，对应的文件偏移量等等，有了这些信息，就能实现在视频全部下载完毕之前就支持跳转播放，如果mp4的文件头放在了文件末端，那么该文件就不支持缓存跳转播放了，只有等待文件全部下载完毕之后才能进行播放，具体怎么样将文件头重新提取到头部，我博客专题的文章中有写，可以参照。</p>
<p>同理，flv文件的meta信息是可选的，如果这部分数据没有存储关键帧，时间轴和文件偏移量，那么该flv文件在全部缓存完毕之前是不支持跳转播放的，那么，大家可能会很奇怪，优酷，土豆看了这么久，所有的视频都是可以拖动跳转的，那么具体的原因是什么，下面我给大家详细解释。</p>
<p>首先大家先了解下什么是flv meta 注入，意思就是通过解析当前flv文件的音视频tag，然后根据这些流媒体数据来生成关键帧，时间轴和偏移量的信息，然后将这些信息重置到该flv文件的meta部分，这样就能够使不支持拖动播放的flv文件变得支持拖动播放了，实际上优酷的做法就是这样，用户上传的视频动态转码成flv格式，并且通过扫描和解析flv文件，进行meta注入，最后我们在网上播放的视频就是处理过的视频。实现flv注入，有两个工具可以使用，具体可以参照<a href="http://www.buraks.com/flvmdi/">flvmdi</a>和<a href="http://www.inlet-media.de/flvtool2/">FLVTool2</a>。</p>
<p>接下来我用win版本的flvtool来分析一段优酷的视频（<a href="http://v.youku.com/v_show/id_XMzk2NzQ1MDUy.html">谢霆锋热血微电影</a>），解析到的meta信息如下：</p>
<pre>---
C:/Users/Administrator/Desktop/flvtool2.exe -P test.flv
  hasKeyframes: true
  hasVideo: true
  framerate: 15
  audiosamplerate: 22050
  hasAudio: true
  height: 288
  metadatacreator: modified by youku.com in 20111202
  keyframes: 
    times: 
      - 0
      - 0
      - 6
      - 12
      - 18
      - 24
      - 25.6666666666667
      - 26.7333333333333
      - 28.3333333333333
      - 30.2666666666667
      // 省略部分
      - 193.866666666667
      - 199.866666666667
      - 205.866666666667
    filepositions: 
      - 1400
      - 1494
      - 98389
      - 205673
      - 312032
      - 422862
      - 438242
      - 495063
      - 555999
      - 695882
      // 省略部分
      - 7259084
      - 7426324
      - 7538447
  duration: 210.066666666667
  hasMetadata: true
  width: 512
...</pre>
<p>通过分析上面的meta信息，我们可以得到该视频的播放尺寸为512*288，视频的总时长约为210s，也就是3分半钟，从keyframes中可以解析得到关键帧对应的时间轴和对应的文件文件偏移量，有了这些信息，就能让该视频支持缓存跳转播放了，还有一句话，大家注意“metadatacreator: modified by youku.com in 20111202”，这是优酷在进行视频处理的时候填入的制作者信息。</p>
<p>好了，原理的部分就讲到这里，至于代码的实现，可以先参照我系列文章中mp4播放器边缓存，边播放，拖动缓存的实现代码，后续再做flv部分的完善。</p>
<p><a rel="nofollow" href="http://blog.zhourunsheng.com/2012/06/flv%e6%a0%bc%e5%bc%8f%e6%b5%81%e5%aa%92%e4%bd%93%e7%9a%84%e7%bc%93%e5%ad%98%e6%b8%90%e8%bf%9b%e6%8b%96%e6%94%be%e5%8e%9f%e7%90%86/">FLV格式流媒体的缓存渐进拖放原理</a>，首发于<a rel="nofollow" href="http://blog.zhourunsheng.com">润物无声</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zhourunsheng.com/2012/06/flv%e6%a0%bc%e5%bc%8f%e6%b5%81%e5%aa%92%e4%bd%93%e7%9a%84%e7%bc%93%e5%ad%98%e6%b8%90%e8%bf%9b%e6%8b%96%e6%94%be%e5%8e%9f%e7%90%86/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
