忘備録

年をとると忘れやすくなる。過去、これからのことを書き綴る。

着うたフル奮闘記(#9)

2006-01-13 13:14:22 | Weblog
昨日何歳??かの誕生日あー年は取りたくない!!若いころなら寒くてもゴルフに釣り、夜は飲み会と誕生日一週間はイベントが続いたもんだが、年を取ると寒さがこたえ、どうしても暖かいとこしか行きたくなくなる(パチンコ、酒)。

前回の続き

stsz -> sample (block byte) size box
[000000] 00 00 3B 1C 73 74 73 7A 00 00 00 00 00 00 00 00
[000010] 00 00 0E C2 00 00 01 11 00 00 01 5D 00 00 01 B5
以下省略
$00-03 size 0x00003B1C(15132)
$04-07 name 0x7374737A(stsz)
$08 version 0x00(0)
$09-0B flags 0x00000080)
$0C-0F block byte size for all 0x00000000(0) different sizes = 0
$10-13 number of block sizes 0x00000EC2(3778)
$14-17 block byte sizes 0x00000111(273) 以後3777block続く
全ブロック総バイト=mdatサイズとなる。

stsc -> sample/framing to chunk/block box
[000000] 00 00 00 28 73 74 73 63 00 00 00 00 00 00 00 02
[000010] 00 00 00 01 00 00 00 15 00 00 00 01 00 00 00 B4
[000020] 00 00 00 13 00 00 00 01
$00-03 size 0x00000028(40)
$04-07 name 0x73747363(stsc)
$08 version 0x00(0)
$09-0B flags 0x000000(0)
$0C-0F number of blocks 0x00000002(2)
$10-13 frames per block(first/next block) 0x00000001(1)
$14-17 frames per block(# of frames) 0x00000015(21)
$18-1B samples description id 0x00000001(1)
以後12バイトごと、number of blocks分続く
同一framesが続く場合、次に違うframesがくるまで省略できるので
第一フレーム0x15(21)で第二フレーム0x13(19)のfirst/next blockが0xB4(180)なので第一フレーム0x15(21)が179続いていることになる。

stco -> chunk/block offset box
[000000] 00 00 02 E0 73 74 63 6F 00 00 00 00 00 00 00 B4
[000010] 00 00 43 80 以後省略
$00-03 size 0x000002E0(736)
$04-07 name 0x7374636F(stco)
$08 version 0x00(0)
$09-0B flags 0x000000(0)
$0C-0F number of offsets 0x000000B4(180)
$10-13 block offsets 0x00004380 以後4バイトごと、number of offsets分続く
block offsetsはmdatの絶対アドレスを指している為、mdat以前のアトムを編集した場合(増減)はblock offsetsの値を修正する必要がある。

stss -> optional sync sample (key/intra frame) box
[000000] 00 00 02 E0 73 74 73 73 00 00 00 00 00 00 00 B4
{000010] 00 00 00 01 00 00 00 16 以後省略
$00-03 size 0x000002E0(736)
$04-07 name 0x73747373(stss)
$08 version 0x00(0)
$09-0B flags 0x000000(0)
$0C-0F number of key frames 0x000000B4(180)
$10-13 key/intra frame location 0x00000001
$14-17 key/intra frame location 0x00000016 以後省略
key/intra frame location は先ほどstscの# of framesの値を参照にし、第一キーよりの加算値となる。
本来このアトムはなくても聴くには支障がないが、着うた切り出しに必要となるもので、全ての携帯をチェックしたわけではないが付加されてない場合は切り出しが不能となる携帯もある。

今回までのアトムが実装された3G2ファイルであれば着登録(メール着)が可能である。
断片化(QTPRO)の場合はmoovアトム内に規定のアトムが実装されていない為(上記アトム外)に起こりうる問題であり規定のアトムを実装するこにより回避できる。

着うたフル奮闘記(#8)

2006-01-11 15:13:42 | Weblog
前回に続き、、

stbl -> sample (framing info) table box
[000000] 00 00 41 8E 73 74 62 6C
$00-03 size 0x0000418E(16782)
$04-07 name 0x7374626C(stbl)

stts -> time to sample (frame timing) box
[000000] 00 00 00 18 73 74 74 73 00 00 00 00 00 00 00 01
[000010] 00 00 0E C2 00 00 04 00
$00-03 sise 0x00000018(24)
$04-07 name 0x73747473(stts)
$08 version 0x00(0)
$09-0B flags 0x000000(0)
$0C-0F number of times 0x00000001(1)
$10-13 framing rate count 0x00000EC2(3778)
$14-17 duration 0x00000400(1024)

stsd -> sample (frame encoding) description box
[000000] 00 00 00 6A 73 74 73 64 00 00 00 00 00 00 00 01
[000010] 00 00 00 5A 6D 70 34 61 00 00 00 00 00 00 00 01
[000020] 00 00 00 00 00 00 00 00 00 02 00 10 00 00 00 00
[000030] 56 22 00 00 00 00 00 36 65 73 64 73 00 00 00 00
[000040] 03 80 80 80 25 00 00 00 04 80 80 80 17 40 15 00
[000050] 06 00 00 00 BB 80 00 00 BB 80 05 80 80 80 05 13
[000060] 90 56 E5 A0 06 80 80 80 01 02
$00-03 size 0x0000006A(106)
$04-07 name 0x73747364(stsd)
$08 version 0x00(0)
$09-0B flags 0x000000(0)
$0C-0F number of descriptions 0x00000001 default = 1
$10-13 description size 0x0000005A(90)
$14-17 description name 0x6D703461(mp4a)
$18-1D reserved 0x000000000000
$1E-1F data reference index 0x0001
$20-21 QUICKTIME audio encoding version 0x00(0) default = 0
$22-23 QUICKTIME audio encoding revision level 0x00(0) default = 0
$24-27 QUICKTIME audio encoding vendor 0x00000000("")
$28-29 audio channels 0x00002(2) mono = 1 stereo = 2
$2A-2B audio sample size 0x0010(16) 8 or 16
$2C-2D QUICKTIME audio compression id 0x0000(0) default = 0
$2E-2F QUICKTIME audio packet size 0x0000(0)
$30-33 audio sample rate 0x56220000(22050.0)
$34-37 ES Descriptor size 0x00000036(54)
$38-3B ES Descriptor name 0x65736473(esds) vers. 2 ES Descriptor box
$3C version 0x00(0)
$3D-3F flags 0x000000(0)
$40 ES descriptor type tag 0x03(3)
$41-43 start or end type 0x808080 start = 0x80 end = 0xFE
$44 descriptor type length 0x25(37)
$45-46 ES ID 0x0000(0)
$47 stream priority 0x00 defaults = 16 0 - 31
$48 ES descriptor type tag 0x04(4)
$49-4B start or end type 0x808080 start = 0x80 end = 0xFE
$4C descriptor type length 0x17(23)
$4D object type ID 0x40(64) MPEG-4 video = 32 audio = 64
$4E stream type or flags 0x15 bit展開後
00010101 左から
6bit 000101 0x05(5) audio = 5 visual = 4
1bit 0 0x00(0) upstream flag
1bit 1 0x01(1) reserved flag set to 1
$4F-51 buffer size 0x000600(1536)
$52-55 maximum bit rate 0x0000BB80(48000)
$56-59 average bit rate 0x0000BB80(48000)
maximum bit rate,average bit rate はbitrate偽装に使われてる箇所
$5A ES descriptor type tag 0x05(5)
$5B-5D start or end type 0x808080 start = 0x80 end = 0xFE
$5E descriptor type length 0x05(5)
$5F-63 header start codes 0x139056E5A0 bit展開後
0001001110010000010101101110010110100000 左から
AudioObjectType = 5bit 00010 0x02(2) = LC = 2 HE = 5
SamplingRateIndex = 4bit 0111 0x07(7) = 22050
channels = 4bit 0010 0x02(2) mono = 1 stereo = 2
reserved = 3bit 000 0x00
syncExtensionType = 11bit 010 1011 0111 0x2B7 = SBR Stuff
extensionAudioObjectType = 5bit 00101 0x05(5) = HE
sbrPresentFlag = 1bit 1 0x01 TRUE = SBR
extensionSamplingRateIndex = 4bit 0x04(4) = 44100
alignBits = 3bit 000 1bit毎に意味があるが、ま、いいか
$64 ES descriptor type tag 0x06(6)
$65-67 start or end type 0x808080 start = 0x80 end = 0xFE
$68 descriptor type length 0x01(1)
$69 SL value 0x02(2)

注意しなければいけないのは、$4D object type ID、$4E stream type or flags、$52- maximum bit rate、$56- average bit rate、$5F- header start codes がくい違っていると不正なデータとしてはじかれる可能性がある。

着うたフル奮闘記(#7)

2006-01-09 23:30:36 | Weblog
土曜日PET検査受けた。二回目だが、前処理がCT検査より長い!!問診後静脈に放射性ブドウ糖??を入れられ約一時間安静後、台に寝かされ約20分ゴトゴトと全身撮影される、うーん長い!!CT検査なら長くて15秒ま、寝てればいいのだけど!!
結果は五日後なんにもなければ、、なるようにしかならないのが世の中やし(笑)

前回の続き

trak -> trak(element) box
[000000] 00 00 42 7B 74 72 61 6B
$00-03 size 0x0000427B(17019)
$04-07 name 0x7472616B(trak)

tkhd -> trak header box
[000000] 00 00 00 5C 74 6B 68 64 00 00 00 07 BF E0 CB FF
[000010] BF E0 CB FF 00 00 00 01 00 00 00 00 00 01 9B 35
[000020] 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
[000030] 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[000040] 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[000050] 40 00 00 00 00 00 00 00 00 00 00 00
$00-03 size 0x0000005C(92)
$04-07 name 0x746B6864()tkhd
$08 version 0x00(0)
$09-0B flags 0x000007(7)
TrackEnabled = 1 TrackInMovie = 2 TrackInPreview = 4 TrackInPoster = 8
$0C-0F creation time 0xBFE0CBFF(Wed Jan 04 00:49:03 2006)
$10-03 modification time 0x0xBFE0CBFF(Wed Jan 04 00:49:03 2006)
$14-17 trak ID 0x00000001(1) first track = 1
$18-1B reserved 0x00000000
$1C-1F duration 0x00019B35(105269)
$20-27 reserved 0x0000000000000000
$28-29 video layer 0x0000(0) middle = 0
$2A-2B alternate 0x0000(0) none = 0
$2C-2D audio volume 0x0100 mute = 0x0001 ; 100% = 1.0 ; QUICKTIME 200% max = 2.0
$2E-2F reserved 0x0000
$30-53 matrix value A,B,U,C,D,V,Xy,W
$54-57 width 0x00000000(0)
$58-5B height 0x00000000(0)

mdia -> media (stream) box
[000000] 00 00 42 17 6D 64 69 61
$00-03 size 0x00004217(16919)
$04-07 name 0x6D646961(mdia)

mdhd -> media (stream) header box
[000000] 00 00 00 20 6D 64 68 64 00 00 00 00 BF E0 CB FF
[000010] BF E0 CB FF 00 00 56 22 00 3B 08 00 55 C4 00 00
$00-03 size 0x00000020(32)
$04-07 name 0x6D646864(mdhd)
$08 version 0x00(0)
$09-0B flags 0x000000(0)
$0C-0F creation time 0xBFE0CBFF(Wed Jan 04 00:49:03 2006)
$10-13 modification time 0x0xBFE0CBFF(Wed Jan 04 00:49:03 2006)
$14-17 time scale 0x00005622(22050)
$18-1B duration 0x003B0800(3868672) 再生時間 = duration / time scale
$1C-1D anguage 0x55C4 (B:0101010111000100)
左から
0 -> 0x0 -> ISO language padding = 0
101010111000100 -> 0x55C4 -> ISO 639-2 language code
$1E-1F quality 0x0000 normal = 0

hdlr -> handler reference box
[000000] 00 00 00 25 68 64 6C 72 00 00 00 00 00 00 00 00
[000010] 73 6F 75 6E 00 00 00 00 00 00 00 00 00 00 00 00
[000020] 73 6F 75 6E 00
$00-03 size 0x00000025(37)
$04-07 name 0x68646C72(hdlr)
$08 version 0x00
$09-0B flags 0x000000
$0C-0F component type 0x00000000("")
$10-13 component subtype 0x736F756E("soun")
$14-17 component manufacturer 0x00000000("")
$18-1B component flags 0x00000000(0) none = 0
$1C-1F component flags mask 0x00000000(0) none = 0
$20-23 component name 0x0x736F756E00("soun")

minf -> media (stream) information box
[000000] 00 00 41 CA 6D 69 6E 66
$00-03 size 0x000041CA(16842)
$04-07 name 0x6D696E66(minf)

smhd -> sound media (stream) info header box
[000000] 00 00 00 10 73 6D 68 64 00 00 00 00 00 00 00 00
$00-03 size 0x00000010(16)
$04-07 name 0x736D6864(smhd)
$08 version 0x00(0)
$09-0B flags 0x000000(0)
$0C-0D audio balance 0x0000(0.0) normal = 0.0
$0E-0F reserved 0x0000

dinf -> data (locator) information box
[000000] 00 00 00 24 64 69 6E 66
$00-03 size 0x00000024(36)
$04-07 name 0x64696E66(dinf)

dref -> data reference box
[000000] 00 00 00 1C 64 72 65 66 00 00 00 00 00 00 00 01
[000010] 00 00 00 0C 75 72 6C 20 00 00 00 01
$00-03 size 0x0000001C(28)
$04-07 name 0x34726566(dref)
$08 version 0x00(0)
$09-0B flags 0x000000(0)
$0C-0F number of references 0x00000001(1) minimum = 1
$10-13 size 0x0000001C(12)
$14-17 type 0x75726C20("urn ")
#18 version 0x00(0)
$19-1B flags 0x000001 external data = 0x000000 internal data = 0x000001

ま、ここらのアトムはこんなのがあるんだ位で毒にも薬もならないようなもんで、あればいいと頭の片隅に、、、、次回はstblについて、ここが難解でMPプレイヤーでは考えなくても再生できるが、携帯となると駄々をこねるところである(笑)

着うたフル奮闘記(#6)

2006-01-05 12:42:30 | Weblog
今病院帰り、先月28日のCTの結果を聞きに何かようわからんが、肝臓に2mm位の影があるとか!担当医は転移の可能性もとか?(二年前に直腸癌切除)ま、しばらく様子を見ましょうと、又、腫瘍マーか(CEA)の値が異常に高いから次の検査までには必ずタバコを止めるようにとのお達し(泣)
CT検査だけでは心もとないので、PET検査を受けてみようと思っている。去年のPET検査では異常は見られなかったが念のためにと、

フルを作るにあたって必要と思われるATOMについて簡単に記すと

ftyp -> ファイル識別
[000000] 00 00 00 1C 66 74 79 70 6B 64 64 69 00 00 00 00
[000010] 6B 64 64 69 33 67 32 61 6D 70 34 32
$00-03 -> size 0x0000001C(28)
$04-07 -> name 0x66747970(ftyp)
$08-0B -> major brand 0x6B646469(kddi)
$0C-0F -> major brand version 0x00000000(0)
$10-13 -> compatible brands 0x6B646469(kddi)
$14-17 -> compatible brands 0x33673261(3g2a)
$18-1B -> compatible brands 0x6D703432(mp42)

uuid.cpgd -> 端末においての楽曲の制限
[000000] 00 00 00 2C 75 75 69 64 60 70 67 64 A8 8C 11 D4
[000010] 81 97 00 90 27 08 77 03 00 00 00 00 00 00 00 00
[000020] 00 00 00 00 00 00 00 00 00 00 00 00
$00-03 -> size 0x0000002C(44)
$04-07 -> name 0x75756964(uuid)
$08-0B -> sub name 0x60706764(cpgd)
$0C-17 -> なんかようわからん固定(12byte)
$18-1B -> 再生回数、有効期限制限フラグ 1bit=再生回数 2bit=有効期限(days) 3bit= 有効期限(date)
$1C-1F -> 配信制限 0x00000000 = なし 0x00000001 = あり
$20-23 -> 有効期限(date) 0xBFCDCCF0(Tue Dec 20 15:00:00 2005)
$24-27 -> 有効期限(days) 0x0000001E(30)
$28-2B -> 再生回数 0x00000003(3)
注:有効期限(date)は1904年から数値(APPLE基準)
clock = media->dwValue - 0x7C25B080; // 1970/01/01
newtime = gmtime( &clock );
if( newtime != NULL )
{
 now = asctime( newtime );
 now[strlen( now ) - 1] = 0x00;
 cszComment.Format( media->cszComment, now );
}

uuid.ioed -> 端末においての楽曲の切り出し
切り出し位置設定なし(自由設定のみ)
[000000] 00 00 00 29 75 75 69 64 69 6F 65 64 A8 8C 11 D4
[000010] 81 97 00 90 27 08 77 03 00 00 00 00 00 00 00 00
[000020] 00 00 00 00 00 00 00 00 00
$00-03 -> size 0x00000029(41)
$04-07 -> name 75756964(uuid)
$08-0B -> sub name 696F6564(ioed)
$0C-17 -> なんかようわからん固定(12byte)
$18-28 -> All 0x00 -> これで自由設定

切り出し位置設定あり
[000000] 00 00 00 C2 75 75 69 64 69 6F 65 64 A8 8C 11 D4
[000010] 81 97 00 90 27 08 77 03 00 00 00 00 00 00 00 00
[000020] 00 00 00 00 00 00 00 00 03 41 41 41 41 41 00 00
[000030] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[000040] 00 00 00 00 00 00 00 00 00 00 00 01 0A 01 05 01
[000050] 00 00 02 95 00 00 00 01 00 00 00 41 42 42 42 42
[000060] 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[000070] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 0A
[000080] 01 19 01 00 00 02 95 00 00 00 01 00 00 00 41 43
[000090] 43 43 43 43 00 00 00 00 00 00 00 00 00 00 00 00
[0000A0] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[0000B0] 00 01 0A 01 2D 01 00 00 02 95 00 00 00 01 00 00
[0000C0] 00 41
$00-03 -> size 0x000000C2(194)
$04-07 -> name 75756964(uuid)
$08-0B -> sub name 696F6564(ioed)
$0C-17 -> なんかようわからん固定(12byte)
以下多分そうであろう??
$18-1B -> 切り出し制限(A) 0x00000000 = なし 0x00000001 = あり
$1C-1F -> 切り出し制限(B) 0x00000000 = なし 0x00000001 = あり
$20-23 -> 切り出し制限(C) 0x00000000 = なし 0x00000001 = あり
$24-27 -> 自由設定制限 0x00000000 = なし 0x00000001 = あり
$28 -> 切り出し数(3)
$29-48 -> タイトル(A)
$49-4C -> 開始秒が含まれている moov,moof の絶対位置
$4D -> 0x01 固定
$4E -> 開始秒 stco,trun 位置 moov -> stco moof -> trun を参照
$4F -> 開始ミリ秒 stsc,ttrun 位置
$50-53 -> 秒数
$54-57 -> 0x00000001
$58-5B -> 0x00000041
以後同じ
自由設定が出来れば好きな所を切り出せるので個人では単純なioedで充分だろう。

moov -> ファイル メディア ヘッダー
[000000] 00 00 43 07 6D 6F 6F 76
$00-03 size 0x00004307(17159)
$04-07 name 0x6D6F6F76(moov)

mvhd -> movie (presentation) header
[000000] 00 00 00 6C 6D 76 68 64 00 00 00 00 BF E0 CB FF
[000010] BF E0 CB FF 00 00 02 58 00 01 9B 35 00 01 00 00
[000020] 01 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00
[000030] 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00
[000040] 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00
[000050] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[000060] 00 00 00 00 00 00 00 00 00 00 00 02
$00-03 -> size 0x0000006c(108)
$04-07 -> name 0x6D766864(mvhd)
$08 -> version 0x00(0)
$09-0B -> flags 0x000000(0)
$0C-0F -> creation time 0xBFE0CBFF (Wed Jan 04 00:49:03 2006)
$10-13 -> modification time 0xBFE0CBFF (Wed Jan 04 00:49:03 2006)
$14-17 -> time scale 0x00000258(600) サンプリング単位(defualt=600)
$18-1B -> duration 0x00019B35(105269) 総再生時間 = duration / time scale
$1C-1F -> preferred rate 0x00010000(1.0) normal = 1.0
$20-21 -> preferred vulume 0x0100(1.0) mute = 0.0 normal = 1.0 QTmax = 3.0
$22-2B -> reserved
$2C-4F -> movie matrix(A,B,U,C,D,V,X,Y,W)
$50-53 -> preview time 0x00000000(0)
$54-57 -> preview duration 0x00000000(0)
$58-5B -> poster time 0x00000000(0)
$5C-5F -> selection time 0x00000000(0)
$60-63 -> selection duration 0x00000000(0)
$64-67 -> current time 0x00000000(0)
$68-6B -> next track ID 0x00000002(2) single track = 2

え、なに、そう家内との会話である(笑)PET検査の日時が決まった!土曜日早いなー正月明けで空いてるから!!病院も高額な医療機器を遊ばすほど余裕がないからなーと独り言(ぶつぶつ)

着うたフル奮闘記(#5)

2006-01-04 23:32:59 | Weblog
実際にどの様に結合されてるか?テスト用のKMFを作る。

index.txt -> 161byte
内容
KDDIMU01
config.txt,0 ,79,text/plain
music.3g2,1024 ,193740,audio/3gpp2
jacket.jpg,195584 ,2379,image/jpeg
description.txt,198656 ,99,text/plain

config.txt -> 79byte
内容
 KDDIMU01

 wallpaper.jpg,
 000.000,000.000
 000.000,000.000
 000.000,000.000

music.3g2 -> 193,740byte

jacket.jpg -> 2,379byte (160*160)

description.txt -> 99byte
内容
 title,test
 artist,
 album_title,
 track_number,0101
 time,0031
 author,
 publisher,
 copyright,

上記をTARとして結合させる

$000000
 512byte (index.txt用header)
$0001FF
$000200
 index.txt(161byte) + 0x00(351byte)
$0003FF
$000400
 512byte (config.txt用header)
$0005FF
$000600
 config.txt(79byte) + 0x00(433byte)
$0007FF
$000800
 512byte (music.3g2用header)
$0009FF
$000A00
 music.3g2(193740byte) + 0x00(308byte)
$173FFF
$174000
 512byte (jacket.jpg用header)
$1741FF
$174200
 jacket.jpg(2379byte) + 0x00(181byte)
$174BFF
$174C00
 512byte (description.txt用header)
$174DFF
$174E00
 description.txt(99byte) + 0x00(413byte)
$174FFF

のような配置になるが、現実プログラミングの知識がないとこんな事を並びたてたとしても意味はないが、ま、年をとると忘れることが多いので、自分の忘備録として、、、、
非現実的だが、DOSの世界からパソコンをいじっている方なら、バイナリエデターとコマンドプロント上でTARファイルは作れると思うが????
現実はネットで探せば色んなソフトがあるので、それを上手に組み合わせて使えば至って簡単に出来る便利な世の中です。