tag:blogger.com,1999:blog-53947020609901503952024-03-13T23:56:51.923+09:00自堕落に生きる人間?駄目人間が適当なことを書き綴ります。みぐのってhttp://www.blogger.com/profile/16784090389463227147noreply@blogger.comBlogger9125tag:blogger.com,1999:blog-5394702060990150395.post-35209507513857439522009-12-11T18:37:00.000+09:002009-12-11T18:37:30.249+09:00MPEG2 TSの仕様について調べた(3)前回特定したPMTの内容について。<br />
<br />
<a name='more'></a><br />
取り合えず前回の結果以下のような感じにデータを出してみた。<br />
<br />
SecSize:152 ID:dc30 VER:20 NEXT:1 SECN:0 LSECN:0<br />
<span style="white-space: pre;"> </span>PCR_PID:0100 PI_LEN:12 DSCF[TAG:09 DSC_LEN:4 CAS_ID:0005 CA_PID:0060 PF<c1,01,84,de,01,ef,>]<br />
<span style="white-space: pre;"> </span>Data[SF_ID:02 E_PID:0111 ESI_LEN:6 DSCF<52,01,00,c8,01,47,>]<br />
<span style="white-space: pre;"> </span>Data[SF_ID:0f E_PID:0112 ESI_LEN:3 DSCF<52,01,10,>]<br />
<span style="white-space: pre;"> </span>Data[SF_ID:06 E_PID:0114 ESI_LEN:8 DSCF<52,01,30,fd,03,00,08,3d,>]<br />
<span style="white-space: pre;"> </span>Data[SF_ID:0d E_PID:0810 ESI_LEN:15 DSCF<52,01,40,fd,0a,00,0c,33,3f,00,03,00,00,ff,bf,>]<br />
<span style="white-space: pre;"> </span>Data[SF_ID:0d E_PID:0811 ESI_LEN:10 DSCF<52,01,50,fd,05,00,0c,1f,ff,bf,>]<br />
<span style="white-space: pre;"> </span>Data[SF_ID:0d E_PID:081a ESI_LEN:10 DSCF<52,01,5e,fd,05,00,0c,1f,ff,bf,>]<br />
<span style="white-space: pre;"> </span>Data[SF_ID:0d E_PID:081f ESI_LEN:10 DSCF<52,01,5f,fd,05,00,0c,1f,ff,bf,>]<br />
<span style="white-space: pre;"> </span>Data[SF_ID:0d E_PID:0816 ESI_LEN:10 DSCF<52,01,60,fd,05,00,0c,1f,ff,bf,>]<br />
<span style="white-space: pre;"> </span>Data[SF_ID:0d E_PID:081b ESI_LEN:10 DSCF<52,01,6e,fd,05,00,0c,1f,ff,bf,>]<br />
CRC:ab4a4b27<br />
<br />
よってPATから指定されているPMTからPCRのPID:0x0100、限定受信PID:0x0060、繰り返しの部分からPIDが9個指定されているのが分かる。それぞれストリーム形式が0x02、0x0f、0x06、0x0dと指定されている。このストリーム形式とは何だろうと調べてみる。するとそれぞれ値が決められていて0x02は映像ストリーム、0x0fが音声ストリーム(ADTSトランスポート構造)、0x06がプライベートデータを格納したPESパケット、0x0dがISO/IEC 13818-6(タイプD)となっていた。0x0dは取り合えず置いておくとして、これでPMTから映像と音声のPIDが参照できることが分かった。<br />
またそれぞれの記述子領域を見てみると、先頭から1バイトずつ「記述子タグ」「記述子長」「コンポーネントタグ」と規定されているようだが最後のタグの長さが違うのはなぜだ。<br />
記述子タグは全て0x52で、これはストリーム識別記述子あることを示している。<br />
記述子長は0x01 = 1であるが、これはその次のコンポーネントタグが1バイトと規定されているためだと思われる。<br />
それでコンポーネントタグだが、これでその映像や音声がどの形式で格納されているかの情報を伝えているようだが、いまいちよく分からない。音声については0x10でこれがコンポーネントタグとして「音声2/0/0-3/2/2-0.1モード(マルチチャンネルステレオ音声モード表記法らしい)」を示してることは情報として探すことが出来た。音声のモードが指定されているのだから、映像についてもこの部分で解像度やMPEG2ですよとかそういうことが分かるようになっているはずなのだが。まあ詳細についてはおいおい調べておくことにしてまずは先に進むことにする。<br />
<br />
まずは映像についてだが、データ自体は多分映像PIDに指定されているパケットのペイロードを連結すればいいんだろうけどMPEG2の技術自体を理解していないと意味が無い。<a href="http://home.catv.ne.jp/dd/pub/book/mpeg.html">ここ</a>を読んで頑張っていこうと思う。みぐのってhttp://www.blogger.com/profile/16784090389463227147noreply@blogger.com0tag:blogger.com,1999:blog-5394702060990150395.post-15796766858593565212009-12-09T20:16:00.001+09:002009-12-11T14:45:14.338+09:00MPEG2 TSの仕様について調べた(2)前回に続いてPATの解析で分かったPMTのデータ構造について見ていくことにする。<br />
<br />
<a name='more'></a>取り合えずまずPMT(PID=0x0101)のペイロードを見てみる。<br />
<br />
<span style="font-family: 'Courier New', Courier, monospace;">00,02,b0,98,dc,30,e9,00,00,e1,00,f0,0c,09,04,00,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">05,e0,60,c1,01,84,de,01,ef,02,e1,11,f0,06,52,01,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">00,c8,01,47,0f,e1,12,f0,03,52,01,10,06,e1,14,f0,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">08,52,01,30,fd,03,00,08,3d,0d,e8,10,f0,0f,52,01,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">40,fd,0a,00,0c,33,3f,00,03,00,00,ff,bf,0d,e8,11,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">f0,0a,52,01,50,fd,05,00,0c,1f,ff,bf,0d,e8,1a,f0,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">0a,52,01,5e,fd,05,00,0c,1f,ff,bf,0d,e8,1f,f0,0a,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">52,01,5f,fd,05,00,0c,1f,ff,bf,0d,e8,16,f0,0a,52,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">01,60,fd,05,00,0c,1f,ff,bf,0d,e8,1b,f0,0a,52,01,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">6e,fd,05,00,0c,1f,ff,bf,ab,4a,4b,27,ff,ff,ff,ff,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">ff,ff,ff</span><br />
<br />
それで仕様を見てみると、先頭の0x00が区切りに使われているのはPATと同じで続く1バイトの0x02がPMTの識別子になる。これが異なればPMTのPID取得に失敗している事になる。<br />
<br />
続く2バイトはPATと同じで上位4ビットが1011で残りの12ビットでセクションの長さを規定している。この場合は0x0098 = 152バイトになる。確かに後ろの0xffが連続して出現する場所までのバイトの数は152になっていることが確認できた。<br />
<br />
次の2バイトで前回も取得できた放送番組番号識別の値で0xdc30になっている。前回取得した値と同じだ。<br />
<br />
次の1バイトもPATの時にも出てきた先頭2ビットが11、次の5ビットがバージョン番号、残りの1ビットがカレントネクスト指示であるバイトになる。今のデータでは0xe9 = 11101001なので、バージョンが0x14になっているが正しいことが分かる。<br />
<br />
次の2バイトがセクション番号と最終セクション番号だが、これもPATと同じで0である。<br />
<br />
この次からPMT独自の情報になる。<br />
次の2バイト0xe100の先頭3ビットは111となるように規約で決められている。今1110000100000000なのでこれは正しく、残りの13ビットでPCR_PIDを指定している。<br />
<br />
次の2バイトも似たように先頭の4ビットが1111であり残りの12ビットで番組情報長を規定している。今0xf00c = 1111000000001100なので先頭の条件を満たしており、1100 = 0x0c = 12バイトである。それが示すのは [09,04,00,05,e0,60,c1,01,84,de,01,ef] である。これは資料によれば以下のような構造をしているようだ。<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbJBX7LmREAcvzpk1tHixjEJMKZ9BY1PVrUlxD5OL55t78sZOPwtrkT9TEBFQqJiWpO_8Uto3E1kT_9uJcyFnRi8OF7ZPgg9gO-XSEyl4MOk6ouUcHgAPAZm80NV34T31OsT2jDOs0bFc/s1600-h/MPEG2-TS-PTM-PAYLOAD-DescripterField.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbJBX7LmREAcvzpk1tHixjEJMKZ9BY1PVrUlxD5OL55t78sZOPwtrkT9TEBFQqJiWpO_8Uto3E1kT_9uJcyFnRi8OF7ZPgg9gO-XSEyl4MOk6ouUcHgAPAZm80NV34T31OsT2jDOs0bFc/s320/MPEG2-TS-PTM-PAYLOAD-DescripterField.png" /></a><br />
</div>照らし合わせてみるとタグは0x09であっている。<br />
次の1バイトで記述子長を規定している。これは今0x04 = 4である。<br />
次の2バイトは限定受信方式識別となっているが、これは今0x0005である。<br />
続く2バイトでまた上位3ビットが111のPIDである。0xe060 = 1110000001100000なので正しく、限定受信PIDは0x0060となる。<br />
残りの6バイト [c1,01,84,de,01,ef] は放送局固有の情報らしい。<br />
<br />
後は【1バイトのストリーム識別子+2バイトのPID+2バイトの情報長+可変長の記述子領域】の繰り返し+最後にCRCとなる。データをこれにしたがって並び替えてみると以下になる。<br />
<br />
<span style="font-family: 'Courier New', Courier, monospace;">02,e1,11,f0,06,52,01,00,c8,01,47,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">0f,e1,12,f0,03,52,01,10,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">06,e1,14,f0,08,52,01,30,fd,03,00,08,3d,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">0d,e8,10,f0,0f,52,01,40,fd,0a,00,0c,33,3f,00,03,00,00,ff,bf,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">0d,e8,11,f0,0a,52,01,50,fd,05,00,0c,1f,ff,bf,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">0d,e8,1a,f0,0a,52,01,5e,fd,05,00,0c,1f,ff,bf,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">0d,e8,1f,f0,0a,52,01,5f,fd,05,00,0c,1f,ff,bf,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">0d,e8,16,f0,0a,52,01,60,fd,05,00,0c,1f,ff,bf,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">0d,e8,1b,f0,0a,52,01,6e,fd,05,00,0c,1f,ff,bf,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">ab,4a,4b,27</span><br />
<br />
これを各行について解析した結果が以下である。<br />
<br />
===== analyze PMT payload =====<br />
SecSize:152 ID:dc30 VER:20 NEXT:1 SECN:0 LSECN:0 PCR_PID:0100 LPI:000c DSC[TAG:09 LEN:04 CASI:0005 CAPID:0060 PF<c1,01,84,de,01,ef,>]<br />
Data[FMT:02 EPID:0111 ESIL:0006 DF<52,01,00,c8,01,47,>]<br />
Data[FMT:0f EPID:0112 ESIL:0003 DF<52,01,10,>]<br />
Data[FMT:06 EPID:0114 ESIL:0008 DF<52,01,30,fd,03,00,08,3d,>]<br />
Data[FMT:0d EPID:0810 ESIL:000f DF<52,01,40,fd,0a,00,0c,33,3f,00,03,00,00,ff,bf,>]<br />
Data[FMT:0d EPID:0811 ESIL:000a DF<52,01,50,fd,05,00,0c,1f,ff,bf,>]<br />
Data[FMT:0d EPID:081a ESIL:000a DF<52,01,5e,fd,05,00,0c,1f,ff,bf,>]<br />
Data[FMT:0d EPID:081f ESIL:000a DF<52,01,5f,fd,05,00,0c,1f,ff,bf,>]<br />
Data[FMT:0d EPID:0816 ESIL:000a DF<52,01,60,fd,05,00,0c,1f,ff,bf,>]<br />
Data[FMT:0d EPID:081b ESIL:000a DF<52,01,6e,fd,05,00,0c,1f,ff,bf,>]<br />
CRC:ab4a4b27<br />
<br />
今日は取り合えずここまで。みぐのってhttp://www.blogger.com/profile/16784090389463227147noreply@blogger.com0tag:blogger.com,1999:blog-5394702060990150395.post-69243442280351366832009-12-09T15:51:00.002+09:002009-12-09T15:54:32.719+09:00MPEG2 TSの仕様について調べた(1)前回の流れからJavaでTSファイルを読み込みたい訳だが、JDKにはそんなAPIはない。ということは誰かが作ったものを利用するか自分で作らないと駄目ってことだ。まあその誰かが作ったものが前回までで失敗しているわけであるが。<br />
FFMPEGを利用して何かやろうとしている物もあったが、あれは一般の利用する側としては全てのメディアに対応してて便利だが使用するとなるとメンドイし、何より開発がとまってるっぽい。JNIかJNAを使って何らかのデコードDLLを利用する手も考えたが、そもそもその手のDLLは32ビットであるので目標から考えるといまいち。Windows7のmsmpeg2vdec.dllを使えばWindowsの標準だし64ビットだしいいじゃん!と思ったがDLLの利用関数が調べられなくて頓挫した。これの使い方が載っている場所があったら教えて欲しい。<br />
<br />
<br />
<a name='more'></a>という訳でもう面倒になったので一からPureJavaで読み込める物を作ることにした。<br />
当然仕様から調べる必要がある。こういうときはWikipediaさんに限る。<br />
<br />
<a href="http://ja.wikipedia.org/wiki/MPEG-2_SYSTEMS">MPEG-2 SYSTEMS</a>(ここのトランスポートストリーム)<br />
<br />
なるほどだから拡張子はTSなのか。更にこのMPEG2-TSの1パケット(188byte)についての説明が載ってたのが以下。<br />
<br />
<a href="http://www.mpeg.co.jp/libraries/video_it/video_03.html">http://www.mpeg.co.jp/libraries/video_it/video_03.html</a><br />
<a href="http://www.mpeg.co.jp/libraries/video_it/video_04.html">http://www.mpeg.co.jp/libraries/video_it/video_04.html</a><br />
<br />
これらにはパケットにくっついているヘッダ(先頭4byte、PIDを持つ)とアダプテーションフィールド(ヘッダの後ろ2byte+α)についての説明が載っていた。<br />
なるほど大体ヘッダについては理解できたので、早速JavaからTSファイルのヘッダの解析をしてみた。参照したTSファイルはドラゴンボール改の1話分30分をHDUSで録画したもので、そこから先頭1024パケットを見てみた。<br />
<br />
File Byte size: 2147483647<br />
Bytes/PaketSize: 11422785<br />
PID:0112 - 14 packets<br />
PID:0111 - 977 packets<br />
PID:0060 - 1 packets<br />
PID:0012 - 24 packets<br />
PID:0102 - 2 packets<br />
PID:0101 - 2 packets<br />
PID:0100 - 2 packets<br />
PID:0000 - 2 packets<br />
<br />
===メモリチェック===<br />
初期サイズ:100631936<br />
使用サイズ:1006896<br />
保証サイズ:96468992<br />
最大サイズ:1431699456<br />
<br />
PIDが0x0000(PAT)と0x0012(EIT)のは予約された特別なやつ。まあどう考えても0x0111が映像部分で0x0112が音声部分だろう。PATのペイロード部分(ヘッダの後ろの184byte)に映像や音声のPIDが格納されたPMTのPIDが入ってるようなのでそれを見てみることにする。<br />
[00, 00, b0, 19, 7c, 86, f7, 00, 00, 00, 00, e0, 10, dc, 30, e1, 01, dc, 31, e1, 02, dd, b0, ff, c8, 5f, 50, 6f, 22, ff, .... ff, ff]<br />
単純に見ると意味不明。ffの入っている部分はいらない部分だと推測はできる。<br />
取り合えずPATの情報を探すと<a href="http://allegro.dtiblog.com/blog-entry-185.html">PythonでTSの解析を書いてる方のサイトに情報があった</a>ので、それを見るとデジタル放送に関する規格についての説明文献へのリンクを発見した。これが欲しかった!<br />
<br />
<a href="http://www.arib.or.jp/english/html/overview/doc/2-STD-B10v4_7.pdf">ARIB標準規格:デジタル放送に使用する番組配列情報</a><br />
<br />
これによるとPATのペイロード部分は以下の図のような構造になっているようだ。<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzwpFLOxgRepuWJ2XcwDxpL8C97aTocJZqYLE-MVTaqYi3g7KQcfGvMXOJA2iPlfGKMgIevmrjluMFht87UoYCtuTbFW6x2SulT48Rxr12RzqP46gZkju-QY9Z_6wia_MVZcNYmOYV4rU/s1600-h/MPEG2-TS-PAT-PAYLOAD.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzwpFLOxgRepuWJ2XcwDxpL8C97aTocJZqYLE-MVTaqYi3g7KQcfGvMXOJA2iPlfGKMgIevmrjluMFht87UoYCtuTbFW6x2SulT48Rxr12RzqP46gZkju-QY9Z_6wia_MVZcNYmOYV4rU/s320/MPEG2-TS-PAT-PAYLOAD.png" /></a><br />
</div>数字の単位はビット。さっき見たPATのペイロードは<br />
<br />
00, 00, b0, 19, 7c, 86, f7, 00, 00, 00, 00, e0, 10, dc, 30, e1, 01, dc, 31, e1, 02, dd, b0, ff, c8, 5f, 50, 6f, 22, ff, ....<br />
<br />
だったから、ペイロードの先頭の0x00は区切りとして使われていてその次がPATのPIDである0x00は正しいのが分かる。後は図と照らし合わせて行くと、いきなりおかしいのが分かる。規格によると3番目と4番目のバイトにおいて2進表示で1011からすなわち0xb000以上であると定めている。<a href="http://www.lascom.or.jp/member/stdver/stdver4_305.pdf">ディジタル映像伝送回線</a>という資料も確認すると確かに同じことが書いてある。今の表示から見ると0xb019 = 1011000000011001である。これは正しい。<br />
<br />
続きの12ビットはセクション長を表してる。今のデータでは0xb019の頭4ビットを切ったものなので、0x0019 = 25バイトになる。セクション長はきちんと見てないがその次のバイトからCRCの終わりまで何バイトあるからしいから0x19の後から25バイト数えると丁度0xffに切り替わるポイントを示しているので正しいらしい。<br />
<br />
次の16ビットはトランスポートストリームIDなのでTS固有の値が入っているっぽい。ここでは0x7c86である。<br />
<br />
その次の8ビットは0xf7なので2進表示だと11110111である。頭の2ビットについては11と規定されており正しい。続く5ビットはバージョン番号なので取り合えず確保して、最後の1ビットはカレントネクスト指示で「送られてきたPATが現在有効であるか、次に有効であるかを示す。 」を判断するらしい。今は1なので現在有効であることが分かる。<br />
<br />
続く8ビットがセクション番号で、更に8ビットが最終セクション番号となっているがどちらも0である。なぜだ。ここのところはよく分からない。<br />
<br />
更に規格書によると続く4バイト毎ににネットワークPIDかPMTのPIDがループして格納されていることになっている。4バイト毎に見やすくしてみると以下となる。<br />
<br />
<br />
[00, 00, e0, 10] [dc, 30, e1, 01] [dc, 31, e1, 02] [dd, b0, ff, c8] [5f, 50, 6f, 22] ff, ff, ....<br />
<br />
今のデータではセクション長が25バイトで規定情報として5バイト使っているので、残りの20バイト即ち5個のセットがあれば正しいことになる。実際それは正しく格納されている。このうち最後の4バイトについては「PAT全体のCRCの計算値が入る」とされているので、4個のPID情報が格納されていることになる。<br />
各4バイトについては前2バイトが放送番組番号識別で、後ろ2バイトがPIDになる。うちPIDについては上位3ビットに111が立っている規約のためPIDとして認識するためには上位3ビットを除いた13ビットで考える必要がある。そう考えると今のPATデータから得られるPIDは[0x0010, 0x101, 0x0102, 0x1fc8]の4つだ。4つ目のPID[0x1fc8]はワンセグ用のPIDで固定になっているらしい。PIDが0の4バイトについてはネットワークPID=0x0010を指し示す仕様で、実際今のデータでも1つ目はその規則を守っている。<br />
以上によりPATのパケットの中からPMTのPID[0x101, 0x0102]が2つ得られた。<br />
<br />
それぞれのPIDを持つパケットは2つずつあるようだ。続きはまた次に。<br />
ちなみに以下は1万個のパケットについて上記の解析を行った結果の出力。<br />
<br />
<br />
File Byte size: 2147483647<br />
Bytes/PaketSize: 11422785<br />
<br />
===== PID & Packet count =====<br />
PID:0112 - 137 packets<br />
PID:0111 - 9616 packets<br />
PID:0012 - 42 packets<br />
PID:1fc8 - 2 packets<br />
PID:0010 - 1 packets<br />
PID:0152 - 24 packets<br />
PID:0027 - 1 packets<br />
PID:0151 - 109 packets<br />
PID:0150 - 3 packets<br />
PID:0024 - 1 packets<br />
PID:0023 - 2 packets<br />
PID:0102 - 11 packets<br />
PID:0101 - 11 packets<br />
PID:0060 - 11 packets<br />
PID:0100 - 18 packets<br />
PID:0000 - 11 packets<br />
<br />
===== analyze PAT payload =====<br />
SecSize:25 TSI:7c86 VER:27 NEXT:1 SECN:0 LSECN:0 [ID:0000, NET_PID:0010] [ID:dc30, PMT_PID:0101] [ID:dc31, PMT_PID:0102] [ID:ddb0, PMT_PID:1fc8] CRC:5f506f22<br />
SecSize:25 TSI:7c86 VER:27 NEXT:1 SECN:0 LSECN:0 [ID:0000, NET_PID:0010] [ID:dc30, PMT_PID:0101] [ID:dc31, PMT_PID:0102] [ID:ddb0, PMT_PID:1fc8] CRC:5f506f22<br />
SecSize:25 TSI:7c86 VER:27 NEXT:1 SECN:0 LSECN:0 [ID:0000, NET_PID:0010] [ID:dc30, PMT_PID:0101] [ID:dc31, PMT_PID:0102] [ID:ddb0, PMT_PID:1fc8] CRC:5f506f22<br />
SecSize:25 TSI:7c86 VER:27 NEXT:1 SECN:0 LSECN:0 [ID:0000, NET_PID:0010] [ID:dc30, PMT_PID:0101] [ID:dc31, PMT_PID:0102] [ID:ddb0, PMT_PID:1fc8] CRC:5f506f22<br />
SecSize:25 TSI:7c86 VER:27 NEXT:1 SECN:0 LSECN:0 [ID:0000, NET_PID:0010] [ID:dc30, PMT_PID:0101] [ID:dc31, PMT_PID:0102] [ID:ddb0, PMT_PID:1fc8] CRC:5f506f22<br />
SecSize:25 TSI:7c86 VER:27 NEXT:1 SECN:0 LSECN:0 [ID:0000, NET_PID:0010] [ID:dc30, PMT_PID:0101] [ID:dc31, PMT_PID:0102] [ID:ddb0, PMT_PID:1fc8] CRC:5f506f22<br />
SecSize:25 TSI:7c86 VER:27 NEXT:1 SECN:0 LSECN:0 [ID:0000, NET_PID:0010] [ID:dc30, PMT_PID:0101] [ID:dc31, PMT_PID:0102] [ID:ddb0, PMT_PID:1fc8] CRC:5f506f22<br />
SecSize:25 TSI:7c86 VER:27 NEXT:1 SECN:0 LSECN:0 [ID:0000, NET_PID:0010] [ID:dc30, PMT_PID:0101] [ID:dc31, PMT_PID:0102] [ID:ddb0, PMT_PID:1fc8] CRC:5f506f22<br />
SecSize:25 TSI:7c86 VER:27 NEXT:1 SECN:0 LSECN:0 [ID:0000, NET_PID:0010] [ID:dc30, PMT_PID:0101] [ID:dc31, PMT_PID:0102] [ID:ddb0, PMT_PID:1fc8] CRC:5f506f22<br />
SecSize:25 TSI:7c86 VER:27 NEXT:1 SECN:0 LSECN:0 [ID:0000, NET_PID:0010] [ID:dc30, PMT_PID:0101] [ID:dc31, PMT_PID:0102] [ID:ddb0, PMT_PID:1fc8] CRC:5f506f22<br />
SecSize:25 TSI:7c86 VER:27 NEXT:1 SECN:0 LSECN:0 [ID:0000, NET_PID:0010] [ID:dc30, PMT_PID:0101] [ID:dc31, PMT_PID:0102] [ID:ddb0, PMT_PID:1fc8] CRC:5f506f22<br />
<br />
===== memory check =====<br />
初期サイズ:100631936<br />
使用サイズ:4531640<br />
保証サイズ:96468992<br />
最大サイズ:1431699456<br />
<div><br />
<br />
パケットの数が増えるとPIDの数が増えるがキーであるPATは全て同じ事、PMTのPIDも変わらない事が分かる。<br />
</div><br />
以下はMPEG2-TSの映像部分であるMPEGについての技術的な説明が載っているところ。MPEG2については10章から先。<br />
<br />
<a href="http://home.catv.ne.jp/dd/pub/book/mpeg.html">MPEG Video 技術</a><br />
参考:<a href="http://www.chiariglione.org/mpeg/">MPEG公式ページ</a><br />
<br />
テレビ放送についてのメモ<br />
<a href="http://elm-chan.org/docs/rs170a/spec_j.html">http://elm-chan.org/docs/rs170a/spec_j.html</a><br />
<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">自分用メモ<br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><a href="http://msdn.microsoft.com/ja-jp/library/cc370197.aspx">DirectShowのMPEG2サポート</a>(DirectX9)<br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div>以下JNAについて調べたときのURLメモ<br />
<a href="http://www.avisynth.info/?FFmpegSource">http://www.avisynth.info/?FFmpegSource</a><br />
<a href="http://d.hatena.ne.jp/t-katochin/20090122/1232615970">http://d.hatena.ne.jp/t-katochin/20090122/1232615970</a><br />
<a href="http://hp.vector.co.jp/authors/VA033015/jnasamples.html">http://hp.vector.co.jp/authors/VA033015/jnasamples.html</a><br />
<a href="http://m-ono.info/tech/programming/jna/">http://m-ono.info/tech/programming/jna/</a><br />
<a href="http://d.hatena.ne.jp/ujiujise/20091202/p1">http://d.hatena.ne.jp/ujiujise/20091202/p1</a>みぐのってhttp://www.blogger.com/profile/16784090389463227147noreply@blogger.com97tag:blogger.com,1999:blog-5394702060990150395.post-47872914756399945142009-12-08T09:36:00.001+09:002009-12-09T08:38:24.257+09:00Javaでエンコードするソフトを作る(4)結論から言うと無理だった。<br />
<br />
<br />
<a name='more'></a>Quicktime for Javaを使って動画や画像を読み込んで画像に落とし込むテストをしたかったのだが、読み込み時のヘッダ部分は読み込めてるらしいが映像データ本体の読み込みが全く上手くいかず、真っ黒な画像が出来上がってしまう。QuicktimeのAPIでMovieとしてそのまま動画を再生は出来るのだが、映像を操作するために別クラスに移した途端に真っ黒になる。何かが間違っているのは確実なのだがそれが何かが全く分からない状態。<br />
<br />
取り合えず読み込みは以下のように行ってみた。<br />
<br />
画像について<br />
<pre><code class="language-java"> QTFile file = new QTFile("image.jpg");
GraphicsImporter importer = new GraphicsImporter(StdQTConstants.kQTFileTypeJPEG);
importer.setDataFile(file);</code></pre>これをGraphicsExportorを使って出力しようとしたが上手くいかず。<br />
<br />
動画について<br />
<pre><code class="language-java"> QTFile movieFile = QTFile.standardGetFilePreview(QTFile.kStandardQTFileTypes);
OpenMovieFile openMovieFile = OpenMovieFile.asRead(movieFile);
Movie movie = Movie.fromFile(openMovieFile);</code></pre>これはMovie.start()によって動画として出力出来るのだが、1フレームを取り出すことが上手くいかなかった。<br />
<br />
そもそもそれぞれのクラスが何の役割をしているのかについての把握が不十分なままやっているため上手くいくはずもない訳だが。Movieからの切り出しはPixMapなりQDRectなりが担当しているはずなのだが、それにしても不可解である。ついでにJavadocももっとキチンとして欲しい所だ。<br />
<br />
という訳でやはり動画の読み込み部分から作らないと駄目だということが分かった。今からTSとMP4について勉強する。みぐのってhttp://www.blogger.com/profile/16784090389463227147noreply@blogger.com0tag:blogger.com,1999:blog-5394702060990150395.post-70039067769312242592009-12-07T20:42:00.001+09:002009-12-09T08:38:15.107+09:00Javaでエンコードするソフトを作る(3)Javaでメディアファイルを読み込むだけでも本当にきつい事が分かった。<br />
基本のSDKではもちろん提供されてないし、プラグインを作ってる人たちもいるけどサンプルも少ない。何より基本的に動きがWindowsならDLLをJNIなりJNAなりで操作して読み込んでたりするので、Javaの利点であるOS依存ではない点において全く無価値になっている。<br />
<div><br />
</div><div><br />
<a name='more'></a>もちろん殆どのDLLが32ビットコンパイルされているので64ビットのJVMでは参照できずにExceptionをはいて死ぬ。<br />
</div><div><br />
</div><div>じゃあソース持ってきてコンパイルしようとすると、DLLを作るC/C++ソースの中にインラインアセンブリコードが混ざっててコンパイルできない(VCのx64コンパイラはインラインアセンブリをサポートしない)ことが多く、綺麗に直すだけのC/C++の知識が無いため諦めた。<br />
</div><div>そもそもVC2008ではx64コンパイル自体がExpress Editionではサポートされていないし。MinGWのGCCも64ビットについてはまだ正式な物がリリースされていない。<br />
</div><div><br />
</div><div>まあその辺はかなり時間かかってしまうので放置する方向で目標はあくまで動画を読み込んで画像に変換することなので、読み込みについては動けばいい。というわけで兎に角簡単に動くものを探したところQuicktime for Javaってのがあったのでこれを利用することにする。もちろん64ビットJVMでは動かないがな!<br />
<br />
使うにはQuicktimeを落としてインストールすると、インストールフォルダの中にQTSystemフォルダがあるのでその中の「QTJava.zip」「QTJavaNative.dll」「QTJNative.dll」を使う。多分これで足りるはず。<br />
サンプルとか動作確認には<a href="http://m-ono.info/tech/">ここのサイト</a>が参考になった。取り合えずだが特定のコーデックの動画と音声を読み込んで再生できることは確認できた。<br />
<br />
だが、Javadocが全然まともに書かれていないためかなりこれでもきつい。<br />
特に関数の引数にModeやTypeを指定する場合に、どの値を指定すればどのModeやTypeになるのか全くといっていいほど書いてない。多分quicktime.std.StdQTConstants*に固定値があるんだろうが、どれが何を指定しているのか非常に分かりにくい。というか分からない。<br />
<br />
とまあ色々試してみたのだが、そもそも前回考えた圧縮状態で表示って言う考え自体が間違っていることに気がついた。表示しているのだから当然ながら横×縦のピクセル×32bitはあるわけだが、表示している以外の部分については画像形式にかかわらずByteデータな訳だからどのようにも圧縮できるわけだ。<br />
後は表示フレームの前後をどれだけ未圧縮で保持するか、圧縮と展開の速くて効率のよい方法は何かを考えればいいんだ。<br />
<br />
まあ現状ではそのあたりまで全然たどりつけていませんが。<br />
</div>みぐのってhttp://www.blogger.com/profile/16784090389463227147noreply@blogger.com0tag:blogger.com,1999:blog-5394702060990150395.post-21555249231600181532009-12-06T14:58:00.002+09:002009-12-09T08:37:58.379+09:00Javaでエンコードするソフトを作る(2)<div>まず構成としては<br />
</div><div><ul><li>Movieインタフェース(読み込んだ元ソースからクラス生成</li>
<li>Soundインタフェース(同じく元ソースからクラス生成</li>
<li>staticなメソッドを持つUtilityクラス</li>
</ul></div><div>かな。<br />
</div><div><br />
</div><div><br />
<a name='more'></a>1で言ってたカット用のウィンドウの話について。<br />
</div><div><br />
</div><div>問題になるのはFPS×時間だけのjpegをメモリに保持できるかということ。<br />
</div><div>まず大きさについては4:3ならニコニコサイズの512x384あれば分かるだろうからそれでいいだろう。16:9についても同様にニコニコサイズの512x288に取り合えずするとする。サイズ的にでかい4:3の方で考えていくことにする。<br />
</div><div>このときbmpだと1枚が512x384の32ビットフルカラーで【768KB/枚】になる。これが30FPSだとすると【23MB/s】で、1分だと約【1.4GB/m】になる。これは無理。<br />
</div><div>テストに使った画像だと一般的なJPEG品質80%で【40KB/枚】>【1.2MB/s】>【72MB/m】となり、30分だと約2.2GBとなる。64ビット環境なら問題ないけどそれでも正直かなりきつい。更に60FPSだと倍になる。<br />
</div><div>逆にメモリを1GB使うとするとこの品質だと約14分保持できる。この辺を考えてまずメモリ上だけでどれだけ変換に時間がかかるか、実際にメモリを食うかをテストアプリで試してみることにする。<br />
</div><div><br />
</div><div>取り合えず動画が読み込めないと話しにならないのでFMJを使ってみた。ちょっと古いけど取り合えずだからまあなんとかなるだろう。<br />
</div><div><br />
</div><div>と思ったらきつい。兎に角Javaでメディアを扱おうとしてる人が少なすぎてサンプルが無い。Javadoc読んで頑張るしかないか。<br />
</div>みぐのってhttp://www.blogger.com/profile/16784090389463227147noreply@blogger.com0tag:blogger.com,1999:blog-5394702060990150395.post-84244551361062755292009-12-06T13:07:00.010+09:002009-12-09T08:37:46.571+09:00Javaでエンコードするソフトを作る(1)<b>目標:GUIでTSファイルを読み込み、各種フィルタ処理をしたH264+LC-AACのMP4ファイルを作る</b><br />
<div></div><br />
<div>まずは構成を考える。と、その前にEclipseの環境構築から。<br />
</div><br />
<div><br />
<a name='more'></a>Windows7のx64なのでどうせならEclipseもJavaも64ビットにしたいので、ちょっと検索すると以下のブログにそれらしい記述を発見。<br />
</div><br />
<div></div><div><a href="http://hope-lights.blogspot.com/2009/07/windows-7-rc-64bit-java-eclipse.html">http://hope-lights.blogspot.com/2009/07/windows-7-rc-64bit-java-eclipse.html</a><br />
</div><br />
<div></div><div>JDKの方は公式から簡単に64ビットものが見つかるのでよかったが、Eclipseの方は見つけづらかった。<br />
</div><div>取り合えず見つけたのでダウンロードページに直リンク。<br />
</div><br />
<div><a href="http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.5.1-200909170800/eclipse-SDK-3.5.1-win32-x86_64.zip">Eclipse-SDK-3.5.1(x64)</a><br />
</div><br />
<div></div><div>落として解凍して起動してプロセスが64ビットで動作しているのを確認した。<br />
</div><br />
<div>んで<a href="http://sourceforge.jp/projects/mergedoc/svn/view/trunk/Pleiades/build/pleiades.zip?root=mergedoc&view=log">ここ</a>のdownloadから日本語化ファイルを落として設定。<br />
</div><br />
<div>eclipse.iniに「javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar」を追加して-cleanオプションつけてEclipse起動。無事日本語化されていた。<br />
</div><br />
<div>んで取り合えずGUIを作りたいのでそれ系のプラグインが必要。<br />
</div><div>Wikiを見てみるとVisual Editerが標準のようだが、何か開発止まってるぽい?のでJigloo GUI Builderを導入してみた。インストールは簡単だが、サンプルアプリを作ろうとすると動きはするのだが、色々エラーをはいて気持ち悪い。だが簡単に直ったので問題なし。<br />
</div><div><br />
</div><div>しかしサンプルを作ろうとするとDLLが追加される。どうやらSWTは環境依存のDLLを利用するらしい。しかもどうみても32ビットのDLLであるが大丈夫だろうか。まあ取り合えず動くのでよしとする。<br />
</div><div><br />
</div><div>んでやっと構成を考えるわけだが、必要なパーツは以下だろうか。<br />
</div><div><ul><li>各種操作をするGUI</li>
<li>GUIの下で動く本体</li>
<li>入力プラグイン(映像、音声)</li>
<li>各種動画にかけるフィルター</li>
<li>出力プラグイン</li>
</ul><div>これ系のエンコソフトは大体こういう構成になってるはず。<br />
</div><div><br />
</div><div>今自分でエンコしていて問題に思っているのはフィルター系が32ビットで動いていて何か気持ちが悪い点であり、X264に関しては既にx64で動くexeが出回っているので、これに対してフィルタリングされた映像ストリームをキックできれば充分。音声も32ビットNeroEncodeで問題ない速度であるのでこれもwavかませてキックすればいい。そして出来たものをMP4BoxでMP4にしてしまえばよい。これもただMuxするだけなので別に32ビットのものでいい。<br />
</div><div><br />
</div><div>またそもそもAvisynthを使ってみて思った問題はCMのカットについてである。<br />
</div><div>Trim関数でフレームをカットするとなぜか音声がカットされなかった。まあ単純に理解が足りないだけだが。Murdoccutterを使えばそもそもTrim自体が必要ない訳だが、何かフレーム単位で切れないと気持ちが悪いので元ソースのまま読み込みTrimでカットしようとしていた。<br />
</div><div>今は基本的にAviutlを使っているわけだが、こちらの場合は元ソースを読み込み始点と終点を指定してOP/Aパート/Bパート/EDの基本的に4回に分けてエンコをバッチで出力して生成したMP4を結合して作成している。<br />
</div><div><br />
</div><div>どちらの場合もプレビューを見ながらCMをカットしているわけだが、当然ながら表示が遅い。カットするだけなら元ソースのまま表示する必要はないんだからjpegか何かの連続画像に変換して切り貼りする仕組みを作りたい。カット専用のビューを別ウィンドウで開いてカットするようにするか。<br />
</div><div>フィルタリングされたプレビューも指定フレームだけを別ウィンドウで開けるようにすれば充分じゃないだろうか。<br />
</div><div>またCMカットなんか場面転換が明らかなのである程度サーチが可能な気がするのでそれも考えてみたいところ。Aviutlで使ってる時間ジャンプも凄い便利なのでこれもほしい。<br />
</div><div><br />
</div><div>そういう風に考えるとGUIのビューとしては非常に簡単にならないか?<br />
</div><div>表示されている情報は「参照しているソース」「使用しているフィルタ」「出力先」くらいか。<br />
</div></div>みぐのってhttp://www.blogger.com/profile/16784090389463227147noreply@blogger.com0tag:blogger.com,1999:blog-5394702060990150395.post-42959405396728433542009-12-03T06:27:00.005+09:002009-12-09T08:37:33.697+09:00今日見た夢普通に寝て1度夢を見た。その内容は忘れた。<br />
<div><br />
</div><div><br />
<a name='more'></a>4時ごろ一旦目が覚めてしまい、この時間じゃなと思いまた寝たところまた夢を見た。<br />
</div><div>この夢ははっきりと覚えている。<br />
</div><div><br />
</div><div>時間は高校3年の大学受験を皆終えた時期である。<br />
</div><div>この時期にクラス全員が教室に集まることは実際にはありえないことなのだが、なぜか担任の先生を含めて全員が揃って授業のようなことをしている。<br />
</div><div>すると突然3人の男がやって来て私を呼ぶ。<br />
</div><div>先頭の一人は普通の人であった。しかし、なぜか夢の中で私はその人を軍人っぽいと感じている。はっきりとした感覚ではない、漠然としたものである。それに所謂アニメキャラの子安が演じるような一見どう見ても怪しいだろこれみたいな感じもしない。<br />
</div><div>あとの二人は片方は白衣を着た明らかに研究者っぽい人と、終始無口で無愛想な人であった。<br />
</div><div><br />
</div><div>そして私は一人別室へ連れられていく。<br />
</div><div>そこで先の軍人っぽいと感じた人と話をし、あなたは特別であると言われた。<br />
</div><div>何がどう特別なのか、その特別を持っているとどうなるのかについては何も言われない。ただ彼らが私を特別であると断定した理由をノートパソコンに表示されるデータを使って説明していく。<br />
</div><div>私自身はそれに関して何も感じない。そもそも自分が特別何かができると感じたことは無いからだ。事実、その時点で私は他の人と何一つ変わらない学校生活、人生を送ってきていた。<br />
</div><div>そして彼の説明が終わると彼は慎重な面持ちでこう告げる、「このノートパソコンと携帯電話を渡しておきます。しばらくの間不審な人物と関わらないようにして下さい。もし何か不審な出来事があったら、携帯電話に私への連絡先を登録してあるので、そこにすぐ連絡するように」と。<br />
</div><div>そして意識が飛ぶ。お話的に場面が飛んだのか、はたまた本当に気を失ったのか分からない。だがしかし場面は変化した。気がつくと私は教室で一人ノートパソコンと携帯電話を前に立ち尽くしている。<br />
</div><div><br />
</div><div>どれだけ時間がたったかは分からない。パソコンでウェブを見た記憶も無い。携帯電話でクラスメイトに今の自分の状況を確認した記憶も無い。なぜそれをしないのかについて疑問も持たない。<br />
</div><div>そんな不思議な感じなのに嫌に手持ち無沙汰で暇に感じた。そこで校内を歩き回ってみることにした。<br />
</div><div><br />
</div><div>教室を出てすぐに分かったことなのだが、誰もいない。時間的には明るく夕暮れにはまだまだ早いように思える。時計は見ない。生徒もいないし教師もいない。<br />
</div><div>でも私は恐怖を感じず、ただひたすら校内を歩く。何かを確認しているようで何も見ていない、考えていない。そして見慣れない外国人と出会う。元居た教室に戻ったときだったような気もするし、そうでもないような気もする。兎に角出会ったのだ。<br />
</div><div><br />
</div><div>この外国人は日本語が非常に上手だ。外国人特有の変な訛りの無い流暢な日本語を喋る。<br />
</div><div>そして非常に親しげでこちらの警戒心を微塵も発揮させない。<br />
</div><div>何か挨拶のようなものを交わした気もするし、しなかった気もする。<br />
</div><div>そしていくつか話をした。内容は覚えていない。だが彼からの質問であったような気もする。<br />
</div><div>短い時間だった気もするし、それなりの時間だったかもしれないが、しばらくの後に私たちは何する訳でもなく分かれた。<br />
</div><div>私は彼を不快には感じなかった。あんなに日本語の上手な外国人も居るものなんだな。と感じただけだ。<br />
</div><div><br />
</div><div>そして気がついたときに最初に居た教室に戻ってくると(ということはやはり先の外国人とは別の教室か、若しくは廊下で話をしていたことになるのか)、クラスメイトたちが数名居た。<br />
</div><div>何かノートパソコンを見て騒いでいる様子だ。<br />
</div><div>私が居ることに気がつくとそのノートパソコンを私に見せ、「何かやばそうな警告が表示されているんだけど何これ!」と詰問してきた。確かに画面は赤く警告が表示されている。<br />
</div><div>それを見るとどうやら中に入っているデータに対してハッキングがされたようである。何を持って自分がそれを判断したのかは分からない。またそれが外部回線からなのか、直接触られたのかは分からない。<br />
</div><div>しかし画面にはどのデータにアクセスがあったかが表示されている。見てみるとそれはちょっと前に軍人っぽい人が説明に使った私のデータのようであった。<br />
</div><div>すぐにやばいと感じた。携帯電話を使って連絡を取らねばと。しかしなぜかすぐに携帯電話を手にとって連絡をすることはしない。理由は自分でも分からない。不審な人物や出来事には注意すること、何かあればすぐ連絡するように念を押されていたにも拘らず、意識が飛んだことや先の外国人と会話をしてしまったことに何かを感じていたからだろうか。<br />
</div><div>そうしているうちに続々とクラスメイトが集まってくる。なぜだ?ここは確かに自分の居た高校ではあるがこの教室が3年次に使っていた教室である確信が無い。<br />
</div><div>また服装も不思議だ。学生服を着ている者も居れば、普段着の者も居る。<br />
</div><div>話をしてみると私と同様に気がついたらその格好で色々な場所に居たらしい。<br />
</div><div>自分にも言えることであるが、なぜその状況でパニックにならずこの教室に向かって集まってくるのだ?今考えると不思議なことである。<br />
</div><div>そしてクラスメイト全員が集まると、これまたなぜか担任教師がやってくる。そして唐突に以下のことを告げるのだった。<br />
</div><div><br />
</div><div>「今お前たちは受験の終わった高校3年の時代には居ない。今はあの時の2年前だ」と。<br />
</div><div><br />
</div><div>突然のことに意味が分からない。理解できない。当然皆騒ぎ始める。<br />
</div><div>しかしどう見ても私達は外見上高校3年生のあの時の背格好、顔立ちである。<br />
</div><div>高校時代の2年であれば小中程ではないにしろ、かなり変化のある者もいる筈であるが周りのクラスメイトを見ても誰もあの高校3年の時点の見た目である。俄に信じがたい。<br />
</div><div>そしてある程度騒ぎが収まったこ頃にクラスメイトが口々に言い出すのだ「あんなに受験を頑張ったのにまたやり直しか」と。おかしい。今疑問に思い解決しなければならないことはそんなことではないはずだ。<br />
</div><div>クラスメイトの一人が自分に話しかけてくる。「あんたはいいよね。推薦だったし」私は「ああ、うん。そうだね」と答える。だが今はそんなことは問題ではない。それにこの話しかけてきたクラスメイトの女子は高校3年のあの時点において、殆どというか全くに近いほど話したことの無い人だった。<br />
</div><div><br />
</div><div>そしてまた突然に白衣の人物が教室にやってくる。最初にやってきた3人のうちの一人だったあの白衣の学者風の人だ。<br />
</div><div>教師に代わり教壇に立つ。<br />
</div><div><br />
</div><div>「さてあの人が来るまでクイズでもしましょうか」<br />
</div><div><br />
</div><div>分からないことだらけだ。私は携帯電話で軍人風の彼に連絡を取らなければならないと思ってはいたが、携帯電話を手に取っただけで実際に連絡はしてないはずだ。にも拘らず学者風の人はやってきた。それに何でクイズなんだ。そんなことより今時分たちに起こっている事について説明をしてほしい。<br />
</div><div>しかも気がつくと何時の間にか教室の後ろに3人のうちのもう一人、無口で無愛想な人も居るではないか。<br />
</div><div>どういうことだ理解できない。<br />
</div><div><br />
</div><div>皆に何が起きた?自分に何が起きた?そもそも周りのクラスメイトは本当にあのクラスメイトなのか?それになぜ気を失った後に時間が飛んでいるならまだしも、なぜ時間が逆行しているのだ?<br />
</div><div><br />
</div><div>そうして混乱しているうちに軍人風の彼がやってくる気配がする。<br />
</div><div><br />
</div><div>ここで目が醒めた。<br />
</div><div><br />
</div><div>ちくしょぉぉぉぉおおおおおおおおおおおおおおおおおおおおおおおおお!<br />
</div><div>続きが気になるだろ!<br />
</div><div>夢に整合性を求めるのは間違いだけどせめて締めてくれ!<br />
</div><div>下手にストーリー性があるだけに妙に気になる!<br />
</div><div>もう一回寝たって続きなんか見れるわけないし!<br />
</div>みぐのってhttp://www.blogger.com/profile/16784090389463227147noreply@blogger.com0tag:blogger.com,1999:blog-5394702060990150395.post-27229962642177951632009-11-16T20:59:00.004+09:002009-12-09T08:37:05.832+09:00アスペルガーとオキシトシンかなり気になることだったのでちょっと調査と情報の整理をして自分で把握しやすくするために残す。<br />
<br />
<br />
<a name='more'></a>「アスペルガー オキシトシン」で検索すると最初に<a href="http://a-syndrome.com/page_12.html">このページ</a>が出てくる。<br />
<div>ここには「オキシトシンはホルモンの1種であり、既に陣痛促進剤として使われていて珍しいものではない」「報道によりオキシトシンが発達障害の治療に使用できると勝手に解釈されているとして指摘」「元となっている論文はNatureに載っていて、あくまで要因のひとつかもしれないという指摘に過ぎないということ」というようなことが記載されている。<br />
</div><div><br />
</div><div>というわけでその論文を探してみると<a href="http://www.natureasia.com/japan/neuroscience/highlights/article.php?i=54915">これ</a>がその論文に該当するようだ。<br />
</div><div>英語でよーわからんので同様な論文が無いか探してみると<a href="http://www.nikkei-science.com/page/magazine/0810/200810_060.html">これ</a>が出てきた。<br />
</div><div>どっちにしても雑誌の記事なので金が必要そうだが、概要が載っているのでそれで我慢する。<br />
</div><div><br />
</div><div>まず前者はマウス実験によりオキシトシンの血中濃度の減少により母性的・社会的行動が著しく抑制されたとしている。が、あくまでこの実験はCD38欠損マウスは結果的にオキシトシンの分泌が抑制されそのようになると書いているのであり、つまりのところCD38の欠損が発達障害の1要因かも知れないという結びになっている。<br />
</div><div><br />
</div><div>後者は流石に人間の脳みそ弄る訳にはいかないので、前者の結果を踏まえてだと思われるがオキシトシンに注目して実験を行い、その結果を報告している。<br />
</div><div>本文が読めないので概要しか分からないが、まず女性の出産において陣痛促進・授乳機能などについては確実に影響があるとしている。(これについては最初のサイトと同じ)次に『信頼ゲーム』という実験において血中オキシトシン濃度を測定し、また直接的にオキシトシンを鼻から吸引してその影響を調べ比較するということを行っている。その結果、オキシトシンの血中濃度を高めると人の間の信頼関係を強めると結論付けている。またその結論を受けて、自閉症の人はオキシトシンの受容体に機能不全があるのではと推論している。<br />
</div><div><br />
</div><div>この二つだけでも疑問点がかなりある。<br />
</div><div><ul><li>(前者)そもそもマウスの「母性的・社会的行動」ってなんぞ?</li>
<li>(後者)「人と人の間の信頼」という測定できないものを『信頼ゲーム』で図ったつもりになっているが、そもそもそれが間違いである可能性は?</li>
<li>(後者)オキシトシンの血中濃度UP=信頼関係UPとしているが、全然関係が見られない人もいた(概要には異常に高い濃度にもかかわらず全く返金しなかった人もいるとしている)と書いているにも関わらず、なんで決め付けてるわけ?</li>
</ul>特に後者の『信頼ゲーム』はちょっと問題があると思われる。<br />
</div><div>「ゲームの成績がよい=信頼関係がよい」としてるのだが、この「ゲームの成績」というものが分からない。どうやら顔を見せ合わない状態で、互いに見知らぬ二人が、現金をやり取りしてその利益を成績にしているのだろうが、利益が多いパターンはAが全額Bに渡すその一言に限るのだがその辺の評価がよく分からない。そもそもこのゲーム自体が『<a href="http://ja.wikipedia.org/wiki/%E5%9B%9A%E4%BA%BA%E3%81%AE%E3%82%B8%E3%83%AC%E3%83%B3%E3%83%9E">囚人のジレンマ</a>』をモロに体現している気がするのは気のせいだろうか?<br />
</div><div>それに比較をしているのだから同じ人間がオキシトシン濃度の異なる状態で同じゲームをやったことになるわけだが、その結果に前回のゲームの結果がかなり影響を及ぼしていると思うのだが?<br />
</div><div><br />
</div><div>更に調べてみるとマウスの事例しか出てこないが、オキシトシンの発現の抑制されたマウスは母乳が出ない・出づらいらしい。<br />
</div><div><br />
</div><div>また一月前に調べたときは見つけたのだが現時点で見つけられないことがあって、それは情報の伝播についてである。前に調べたときは論文の発表が2007年、日本での報道が2008年に伝播し、今変な形で広がっているように記憶していたのだがよく辿れない。<br />
</div><div><br />
</div><div>なんにせよ、母親とオキシトシンは切り離せないものであることは確かな事である様である。だが、自閉症系の事に関してオキシトシンがどれだけ影響を与えているかについては全く未知数であると思われる。<br />
</div>みぐのってhttp://www.blogger.com/profile/16784090389463227147noreply@blogger.com0