在上传到服务器之前获取flv长度

时间:2009-12-10 07:19:54

标签: flex flash actionscript-3 flv

我正在使用FileReference类将flv上传到服务器。 在允许上传之前,是否可以检查flv长度而不是大小?

2 个答案:

答案 0 :(得分:4)

您是单独定位Flash Player 10还是降低版本?因为较低版本的Flash播放器(9等)不允许上传SWF来读取文件的内容(除了creationDate,creator(文件的Macintosh创建者类型),modificationDate,name,size in bytes和type),所以你无法在这些球员身上做到这一点。

如果您仅定位FP10用户,则可以将[{3}} FLV加入SWF中的ByteArray

  1. 使用FLV播放器播放并从播放器中读取持续时间属性。但我找不到一个以ByteArray作为输入的FLV播放器 - 在SO中阅读load之后,似乎根本不可能。
  2. 解析FLV文件,并从其元数据中读取duration属性。 this thread已经公开,但这并不容易。
  3. 更新评论:
    摘自FLV文件规范:

      

    <强>调用onMetaData
      FLV文件可以包含带有“onMetaData”标记的元数据。各种流属性   通过NetStream.onMetaData属性可用于正在运行的ActionScript程序。   可用的属性因使用的软件而异。
      常见属性包括:

         
        
    • duration:一个DOUBLE,表示文件的总持续时间(以秒为单位)
    •   
    • width:指示视频宽度的DOUBLE(以像素为单位)
    •   
    • height:指示视频高度的DOUBLE(以像素为单位)
    •   
    • videodatarate:一个DOUBLE,表示以千比特/秒为单位的视频比特率
    •   
    • framerate:表示每秒帧数的DOUBLE
    •   
    • videocodecid:一个DOUBLE,表示文件中使用的视频编解码器ID(请参阅“视频”   标签“在第8页上获取可用的CodecID值”
    •   
    • audiosamplerate:一个DOUBLE,表示音频流的频率   重放
    •   
    • audiosamplesize:表示单个音频样本分辨率的DOUBLE
    •   
    • stereo:指示数据是否为立体声的BOOL
    •   
    • audiocodecid:一个DOUBLE,表示文件中使用的音频编解码器ID(请参阅“音频   标签“在第6页上获取可用的SoundFormat值”
    •   
    • filesize:一个DOUBLE,表示文件的总大小,以字节为单位
    •   

    FLV文件可以包含元数据 - 它并不表示它将包含元数据。它还说可用的属性可能会根据用于创建FLV的软件而有所不同。所以我想不能保证(根据规格)duration属性存在。也就是说,duration是FLV的基本属性之一,可以安全地假设任何合理的软件都包含它。

答案 1 :(得分:1)

您可以使用Netstream.appendBytes将FileReference.data(在通话调用之前,在上传调用之前)提供给用于播放视频的NetStream。从那里,持续时间可以从元数据中获取,如该线程中的其他地方所述。请注意,此方法至少需要Flash Player 10。