長時間配信の再生時間表示がおかしくなる件について

長時間配信の再生時間表示がおかしくなる件についてスレで有用な情報を頂いた
934さんどうもありがとうございました!

934 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2011/04/25(月) 20:52:38.03 ID:6KHGsd410
recoで長時間録画したファイルが再生ソフトなどで少ない再生時間表示になり
ちゃんと再生できないファイルを修復するソフトを作りました

長時間とは16777秒(約4時間40分)超えのことです

http://osflash.org/flv
ここのFLVの仕様を見るとTimestampの3byte分(0xFFFFFF=16777215㍉秒)を超えると
また0からはじまり、TimestampExtendedが1増えるのですが
recoだとこれが0に固定されていて再生時間がおかしくなります

この修復ソフトはTimestampExtendedだけを変更します
使用方法は壊れたファイルをドラッグアンドドロップするだけです
http://www1.axfc.net/uploader/Sc/so/227881.zip&key=nico

これで今まで6時間配信できちんとテストなんてしてないことがばればれになってしまったな
それとドキュメントはちゃんと読まないとダメだ


追記
952さんからパッチを頂いた
どうもありがとうございました!

952 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2011/04/25(月) 23:17:42.05 ID:NIjszGIz0 [2/2]
recoだとRtmp内のタイムスタンプは単調増加だから書き出すところで調整すれば終わりかな?
timestampextended の次の StreamId 3バイトは >>934 だと always 0 ってなってるけどrecoだと最後 1 になってるね何ぞ

diff --git a/scripts/flv.rb b/scripts/flv.rb
index 085e869..1e27913 100755
--- a/scripts/flv.rb
+++ b/scripts/flv.rb
@@ -16,8 +16,8 @@ class Flv
def output(type, length, length_str, timestamp, body)
@fd.print [type].pack("C*")
@fd.print length_str
- @fd.print decomp(timestamp, 3)
- @fd.print [0x00, 0x00, 0x00, 0x01].pack("C*")
+ @fd.print decomp(timestamp & 0xffffff, 3)
+ @fd.print [(timestamp >> 24) & 0xff , 0x00, 0x00, 0x00].pack("C*")
@fd.print body
@fd.print decomp(length + 11, 4)
end