zoukankan      html  css  js  c++  java
  • srs2录制flv文件metadata不准确

    测试环境:
    server:srs2
    client:librestreaming / yasea
    srs 配置 dvr
    录制24分钟flv文件。

    e:flv
    $ ll
    total 518312
    drwxr-xr-x 1 Administrator 197121         0 七月 24 11:55 ./
    drwxr-xr-x 1 Administrator 197121         0 七月 24 11:55 ../
    -rw-r--r-- 1 Administrator 197121 530743006 七月 22 18:17 07-22-17.52.30.193.flv

    pc上使用最新版本vlc、potplayer播放,均显示35分钟;使用mpc-be播放,显示24分钟。
    而使用mediainfo查看显示24分钟,实际上确实是24分钟。
    和srs群好友们讨论了一下,是srs写flv文件时metadata的问题。可以通过添加配置time_jitter  full;修复metadata的时间戳。

    e:flv
    $ flvtool2.exe -P 07-22-17.52.30.193.flv
    ---
    e:/flv/07-22-17.52.30.193.flv:
      audiodatarate: 64
      framerate: 25
      service: SRS/2.0.223(ZhouGuowen)
      videocodecid: 7
      audiosamplerate: 44100
      height: 720
      filesize: 530743006
      duration: 2103.602
      audiocodecid: 10
       1280
    ...

    很明显duration: 2103.602 这个字段对应的是35分钟是错误的。
    既然用到了flvtool2 那么就展示一下本次使用的工具。

    e:flv
    $ flv
    flvmdi.exe    flvmeta.exe   flvtool2.exe

    1. 测试flvmdi

    e:flv
    $ cp 07-22-17.52.30.193.flv test01.flv
    
    e:flv
    $ flvmdi.exe /v
    
    Manitu Group FLV MetaData Injector 2.96
    Copyright (c) 2004-2010 Manitu Group. http://www.buraks.com/flvmdi
    
     usage: flvmdi inFile [outFile] [/v] [/s] [/x] [/k] [/l] [/eExtraData] [/p]
    
    e:flv
    $ flvmdi.exe test01.flv testflvmdi.flv
    
    Manitu Group FLV MetaData Injector 2.96
    Copyright (c) 2004-2010 Manitu Group. http://www.buraks.com/flvmdi
    
    Completed.
    
    e:flv
    $ flvmdi.exe /k test01.flv testkflvmdi.flv
    
    Manitu Group FLV MetaData Injector 2.96
    Copyright (c) 2004-2010 Manitu Group. http://www.buraks.com/flvmdi
    
    Completed.
    
    e:flv
    $ flvmdi.exe test01.flv
    
    Manitu Group FLV MetaData Injector 2.96
    Copyright (c) 2004-2010 Manitu Group. http://www.buraks.com/flvmdi
    
    Completed.
    
    e:flv
    $ ll
    total 2073252
    drwxr-xr-x 1 Administrator 197121         0 七月 24 13:44 ./
    drwxr-xr-x 1 Administrator 197121         0 七月 24 11:55 ../
    -rw-r--r-- 1 Administrator 197121 530743006 七月 22 18:17 07-22-17.52.30.193.flv
    -rw-r--r-- 1 Administrator 197121 530764769 七月 24 13:39 testkflvmdi.flv
    -rw-r--r-- 1 Administrator 197121 530743230 七月 24 13:48 test01.flv
    -rw-r--r-- 1 Administrator 197121 530743230 七月 24 13:38 testflvmdi.flv

    /k是把keyframes写入metadata,所以生成的文件比其他两个命令生成的文件大。
    三个命令均耗时13s,均完成修复。播放器均可以识别正确的时长。

    2. 测试flvmeta

    e:flv
    $ cp 07-22-17.52.30.193.flv test02.flv

    e:flv
    $ flvmeta.exe -V
    flvmeta 1.2.1

    Copyright (C) 2007-2016 Marc Noirot <marc.noirot AT gmail.com>
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    e:flv
    $ flvmeta.exe -f test02.flv testfflvmeta.flv

    e:flv
    $ flvmeta.exe -t test02.flv testtflvmeta.flv

    e:flv
    $ flvmeta.exe -U test02.flv testUflvmeta.flv

    e:flv
    $ flvmeta.exe -U test02.flv

    e:flv
    $ ll
    total 4146564
    drwxr-xr-x 1 Administrator 197121 0 七月 24 13:57 ./
    drwxr-xr-x 1 Administrator 197121 0 七月 24 11:55 ../
    -rw-r--r-- 1 Administrator 197121 530743006 七月 22 18:17 07-22-17.52.30.193.flv
    -rw-r--r-- 1 Administrator 197121 530764769 七月 24 13:39 flvmdi.flv
    -rw-r--r-- 1 Administrator 197121 530743230 七月 24 13:48 test01.flv
    -rw-r--r-- 1 Administrator 197121 530764891 七月 24 13:59 test02.flv
    -rw-r--r-- 1 Administrator 197121 530764891 七月 24 13:55 testfflvmeta.flv
    -rw-r--r-- 1 Administrator 197121 530743230 七月 24 13:38 testflvmdi.flv
    -rw-r--r-- 1 Administrator 197121 530764891 七月 24 13:56 testtflvmeta.flv
    -rw-r--r-- 1 Administrator 197121 530764891 七月 24 13:57 testUflvmeta.flv

    flvmeta 命令行耗时2s 生成的文件大小一致。
    均完成修复。播放器均可以识别正确的时长。

    3. 测试flvtool2

    e:flv
    $ flvtool2 -V
    FLVTool2 1.0.6
    e:flv
    $ flvtool2.exe -U test03.flv testflvtool.flv
    ERROR: undefined method `[]' for #<Object:0x23b5fcc>
    ERROR: flv/stream.rb:138:in `add_meta_tag'
    ERROR: flvtool2/base.rb:184:in `add_meta_data_tag'
    ERROR: flvtool2/base.rb:137:in `update'
    ERROR: flvtool2/base.rb:47:in `send'
    ERROR: flvtool2/base.rb:47:in `execute!'
    ERROR: flvtool2/base.rb:46:in `each'
    ERROR: flvtool2/base.rb:46:in `execute!'
    ERROR: flvtool2/base.rb:239:in `process_files'
    ERROR: flvtool2/base.rb:225:in `each'
    ERROR: flvtool2/base.rb:225:in `process_files'
    ERROR: flvtool2/base.rb:44:in `execute!'
    ERROR: flvtool2.rb:168:in `execute!'
    ERROR: flvtool2.rb:228

    e:flv
    $ ll testflvtool.flv
    -rw-r--r-- 1 Administrator 197121 0 七月 24 14:13 testflvtool.flv

    flvtool2 在执行30s以后报错,生成的文件大小为0.
    我之前成功过其他文件,这个处理时间是这样的,估计我的文件错误超出了flvtool2的处理能力。

    4. 对比ffmpeg

    e:flv
    $ ffmpeg -i test04.flv -acodec copy -vcodec copy -f flv testffmpeg.flv
    
    e:flv
    $ ffmpeg -i test04.flv -acodec copy -vcodec copy -f mp4 testffmpeg.mp4
    
    e:flv
    $ ll
    total 6219296
    drwxr-xr-x 1 Administrator 197121         0 七月 24 14:23 ./
    drwxr-xr-x 1 Administrator 197121         0 七月 24 11:55 ../
    -rw-r--r-- 1 Administrator 197121 530743006 七月 22 18:17 07-22-17.52.30.193.flv
    -rw-r--r-- 1 Administrator 197121 530764769 七月 24 13:39 flvmdi.flv
    -rw-r--r-- 1 Administrator 197121 530743230 七月 24 13:48 test01.flv
    -rw-r--r-- 1 Administrator 197121 530764891 七月 24 13:59 test02.flv
    -rw-r--r-- 1 Administrator 197121 530743006 七月 24 14:04 test03.flv
    -rw-r--r-- 1 Administrator 197121 530743006 七月 24 14:19 test04.flv
    -rw-r--r-- 1 Administrator 197121 530764891 七月 24 13:55 testfflvmeta.flv
    -rw-r--r-- 1 Administrator 197121 530743115 七月 24 14:20 testffmpeg.flv
    -rw-r--r-- 1 Administrator 197121 530246130 七月 24 14:23 testffmpeg.mp4
    -rw-r--r-- 1 Administrator 197121 530743230 七月 24 13:38 testflvmdi.flv
    -rw-r--r-- 1 Administrator 197121         0 七月 24 14:13 testflvtool.flv
    -rw-r--r-- 1 Administrator 197121 530764891 七月 24 13:56 testtflvmeta.flv
    -rw-r--r-- 1 Administrator 197121 530764891 七月 24 13:57 testUflvmeta.flv

    ffmpeg两条命令均耗时3s 播放器均可以识别正确的时长。发现生成mp4文件大小比原文件还小一些。

    另外,在一些metadata错误信息存在的情况下,使用ffmpeg比其他几个修复的更好。

    还有一个工具yamdi 未测试。

  • 相关阅读:
    3-附1 ->和*的区别
    第2章 变量和基本类型
    第2章 变量和基本类型 附3---底层const和顶层const
    第2章 变量和基本类型 附2 --声明和定义的区别
    第2章 变量和基本类型 附1---变量和对象的区别
    第一章 开始
    1. 数据采集基础问题
    跟波利亚学解题---1
    [PTA]L2-001 紧急救援 (25 分)
    [图论]最短路计数(spfa)
  • 原文地址:https://www.cnblogs.com/zzugyl/p/7228850.html
Copyright © 2011-2022 走看看