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
  width: 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 未測試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章