miniDLNAいじり(じわじわ進行中)

その1

TSのパケットサイズ取得に失敗していた件。やはりamd64の場合だった。
miniDLNAが、API経由ではなく、AVFormatContextのpriv_dataを覗いてパケットサイズを拾っていて、LP64だとその位置がずれているという。。。こんなイメージ。

--miniDLNA/metadata.h.orig
++miniDLNA/metadata.h

 typedef struct tsinfo_s {
-	int x;
+	void* x;
	int packet_size;
 } tsinfo_t;

というわけで、こっちは解決。
miniDLNAにバグレポすべき?英語で??

その2

タイムベースシークが遅い件。デバッグモードでログがどかどか出てるので遅いのかと、普通に起動してみたが、やはり遅い。27秒スキップしても、27分スキップしても、だいたい3〜4秒かかる感じ。
だいたい同じフローを通るはずのバイトシークはそんなにかからないし、どこでひっかかってるんだろう。

その3

30分番組なのに9時間と判定されて、シークもぐちゃぐちゃ、の件。
av_find_stream_info()とdump_format()だけを呼んでみた。

Input #0, mpegts, from '(null)':
  Duration: 09:01:15.88, start: 22075.566433, bitrate: 2105 kb/s
  Program 101 NHKBS1
    Stream #0.19[0x100]: Video: mpeg2video, yuv420p, 720x480 [PAR 32:27 DAR 16:9], 10500 kb/s, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.17[0x101]: Video: mpeg2video, yuv420p, 352x240 [PAR 40:33 DAR 16:9], 300 kb/s, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.13[0x110]: Audio: mp3, 0 channels, s16
    Stream #0.18[0x112]: Audio: mp3, 0 channels, s16
  Program 102 NHKBS2
  Program 910 WNI
    Stream #0.14[0x1918]: Data: 0x000d
    Stream #0.15[0x1911]: Video: mpeg2video, yuv420p, 352x240 [PAR 10:11 DAR 4:3], 920 kb/s, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.16[0x1912]: Audio: aac, 48000 Hz, 1 channels, s16, 49 kb/s
  Program 929 Dpa
    Stream #0.0[0x771]: Data: 0x000d
    Stream #0.1[0x772]: Data: 0x000d
    Stream #0.2[0x773]: Data: 0x000d
    Stream #0.3[0x774]: Data: 0x000d
    Stream #0.4[0x775]: Data: 0x000d
    Stream #0.5[0x776]: Data: 0x000d
    Stream #0.6[0x777]: Data: 0x000d
    Stream #0.7[0x778]: Data: 0x000d
    Stream #0.8[0x779]: Data: 0x000d
    Stream #0.9[0x77a]: Data: 0x000d

上は、Program名が化けてたところを削ったもの。
そういえば、録画したのはNHKBSだったのだった。複数番組あって、それぞれbitrateが違うので、そりゃまあうまく取れないわなあ。というか、2105kb/sって、どこから出てきた数字なんだろう。
見える範囲のすべてのストリームのbitrateを合計して、総ファイルサイズを割ればdurationになる?mpeg2video以外のパケットの分が誤差で、audioの影響がでかそうだが。
ほんとは、ターゲットの番組を特定して、最初のPCRと最後のPCRの差を取ればいいんだろうなあ。遅そうだけど。
直接関係ないけど、このファイル3番組あったのね。BRAVIAからは選択できん。。。