<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>mizzy.org: FLV::Info &#12391; ustream &#12398; FLV &#12501;&#12449;&#12452;&#12523;&#24773;&#22577;&#12434;&#12392;&#12429;&#12358;&#12392;&#12377;&#12427;&#12392;&#12456;&#12521;&#12540;&#12395;&#12394;&#12427;&#20214;</title>
    <link>http://blog.mizzy.org/articles/2007/10/08/flv-info-ustream</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>FLV::Info &#12391; ustream &#12398; FLV &#12501;&#12449;&#12452;&#12523;&#24773;&#22577;&#12434;&#12392;&#12429;&#12358;&#12392;&#12377;&#12427;&#12392;&#12456;&#12521;&#12540;&#12395;&#12394;&#12427;&#20214;</title>
      <description>&lt;p&gt;ustream &#12398; &lt;span class="caps"&gt;FLV&lt;/span&gt; &#12434;&#12480;&#12454;&#12531;&#12525;&#12540;&#12489;&#12375;&#12390;&#38899;&#22768;&#22793;&#25563;&#12377;&#12427;&#26041;&#27861;&#12399;&#12289;&lt;a href="http://unknownplace.org/memo/2007/10/03"&gt;typester&#12373;&#12435;&#12398;&#12392;&#12371;&#12395;&#35443;&#12375;&#12367;&#26360;&#12356;&#12390;&#12354;&#12427;&lt;/a&gt; &#12431;&#12369;&#12391;&#12377;&#12364;&#12289;sox &#12395;&#28193;&#12377;&#12392;&#12365;&#12395;&#12469;&#12531;&#12503;&#12523;&#12524;&#12540;&#12488;&#12434;&#25351;&#23450;&#12377;&#12427;&#24517;&#35201;&#12364;&#12354;&#12387;&#12383;&#12426;&#12375;&#12414;&#12377;&#12290;&lt;/p&gt;


	&lt;p&gt;&#12391;&#12289;&#12371;&#12428;&#12434; Plagger &#12503;&#12521;&#12464;&#12452;&#12531;&#12391;&#23455;&#29694;&#12377;&#12427;&#12383;&#12417;&#12395;&#12399;&#12289;&#20309;&#12425;&#12363;&#12398;&#26041;&#27861;&#12391;&#20803;&#12501;&#12449;&#12452;&#12523;&#12398;&#12469;&#12531;&#12503;&#12523;&#12524;&#12540;&#12488;&#12434;&#21462;&#24471;&#12375;&#12394;&#12356;&#12392;&#12356;&#12369;&#12394;&#12356;&#12431;&#12369;&#12391;&#12289;&lt;a href="http://search.cpan.org/dist/FLV-Info/"&gt;&lt;span class="caps"&gt;FLV&lt;/span&gt;::Info&lt;/a&gt; &#12391;&#12391;&#12365;&#12381;&#12358;&#12384;&#12394;&#12289;&#12392;&#24605;&#12387;&#12383;&#12392;&#12371;&#12429;&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;Failed to read FLV file: Tag size is too small (0) at byte 193 (0xc1) at /usr/local/lib/perl5/site_perl/5.8.7/FLV/Tag.pm line 81.
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&#12392;&#12356;&#12387;&#12383;&#12456;&#12521;&#12540;&#12364;&#20986;&#12414;&#12377;&#12290;&#33394;&#12293;&#35519;&#12409;&#12390;&#12415;&#12383;&#12392;&#12371;&#12429;&#12289;ustream &#12398; &lt;span class="caps"&gt;FLV&lt;/span&gt; &#12501;&#12449;&#12452;&#12523;&#20013;&#12395;&#12289;&#12508;&#12487;&#12451;&#12364; 0 &#12398;&#12458;&#12540;&#12487;&#12451;&#12458;&#12479;&#12464;&#12364;&#23384;&#22312;&#12377;&#12427;&#12363;&#12425;&#12289;&#12392;&#12356;&#12358;&#12371;&#12392;&#12364;&#12431;&#12363;&#12387;&#12383;&#12398;&#12391;&#12289;&lt;a href="https://rt.cpan.org/Ticket/Display.html?id=29831"&gt;&#12497;&#12483;&#12481;&#12434;&#26360;&#12356;&#12390; RT &#12395;&#25237;&#12370;&#12390;&#12362;&#12365;&#12414;&#12375;&#12383;&#12290;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&#12497;&#12483;&#12481;&#33258;&#20307;&#12399;&#25968;&#34892;&#12467;&#12513;&#12531;&#12488;&#12450;&#12454;&#12488;&#12375;&#12390;1&#34892;&#36861;&#21152;&#12375;&#12383;&#12384;&#12369;&#12289;&#12392;&#12356;&#12358;&#31777;&#21336;&#12394;&#12418;&#12398;&#12394;&#12398;&#12391;&#12377;&#12364;&#12289;&#12371;&#12398;&#12497;&#12483;&#12481;&#12434;&#26360;&#12367;&#12383;&#12417;&#12395;&#12289;&lt;a href="http://osflash.org/flv"&gt;&lt;span class="caps"&gt;FLV&lt;/span&gt;&#12398;&#12501;&#12449;&#12452;&#12523;&#12501;&#12457;&#12540;&#12510;&#12483;&#12488;&lt;/a&gt; &#12434;&#35519;&#12409;&#12390;&#12289;&#38899;&#22768;&#12501;&#12457;&#12540;&#12510;&#12483;&#12488;&#12434;&#21462;&#24471;&#12377;&#12427; Perl &#12473;&#12463;&#12522;&#12503;&#12488;&#12434;&#33258;&#20998;&#12391;&#26360;&#12356;&#12390;&#12415;&#12383;&#12426;&#12392;&#12289;&#12360;&#12425;&#12367;&#22238;&#12426;&#36947;&#12375;&#12414;&#12375;&#12383;&#12290;&#12379;&#12387;&#12363;&#12367;&#12394;&#12435;&#12391;&#12473;&#12463;&#12522;&#12503;&#12488;&#12434;&#36617;&#12379;&#12390;&#12362;&#12365;&#12414;&#12377;&#12290;&#12473;&#12463;&#12522;&#12503;&#12488;&#20316;&#25104;&#12395;&#12354;&#12383;&#12387;&#12390;&#12289;&lt;a href="http://code.google.com/p/nelly2pcm/"&gt;nelly2pcm&lt;/a&gt; &#12398;&#12477;&#12540;&#12473;&#12418;&#21442;&#32771;&#12395;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;#!/usr/bin/perl

use strict;
use warnings;
use Readonly;

Readonly my $FLV_TAG_TYPE_AUDIO                =&amp;gt; 0x08;
Readonly my $AUDIO_MASK_STEREO                 =&amp;gt; 0x01;
Readonly my $AUDIO_MASK_16bit                  =&amp;gt; 0x02;
Readonly my $AUDIO_MASK_RATE                   =&amp;gt; 0x0c;
Readonly my $AUDIO_RATE_5point5KHZ             =&amp;gt; 0x00;
Readonly my $AUDIO_RATE_11KHZ                  =&amp;gt; 0x04;
Readonly my $AUDIO_RATE_22KHZ                  =&amp;gt; 0x08;
Readonly my $AUDIO_RATE_44KHZ                  =&amp;gt; 0x0c;
Readonly my $AUDIO_MASK_FORMAT                 =&amp;gt; 0xf0;
Readonly my $AUDIO_FORMAT_UNCOMPRESSED         =&amp;gt; 0x00;
Readonly my $AUDIO_FORMAT_ADPCM                =&amp;gt; 0x10;
Readonly my $AUDIO_FORMAT_MP3                  =&amp;gt; 0x20;
Readonly my $AUDIO_FORMAT_NELLYMOSER_8KHZ_MONO =&amp;gt; 0x50;
Readonly my $AUDIO_FORMAT_NELLYMOSER           =&amp;gt; 0x60;

Readonly my %AUDIO_RATE =&amp;gt; (
    $AUDIO_RATE_5point5KHZ =&amp;gt; 5.5,
    $AUDIO_RATE_11KHZ      =&amp;gt; 11,
    $AUDIO_RATE_22KHZ      =&amp;gt; 22,
    $AUDIO_RATE_44KHZ      =&amp;gt; 44,
);

Readonly my %AUDIO_FORMAT =&amp;gt; (
    $AUDIO_FORMAT_UNCOMPRESSED         =&amp;gt; 'Uncompressed',
    $AUDIO_FORMAT_ADPCM                =&amp;gt; 'ADPCM',
    $AUDIO_FORMAT_MP3                  =&amp;gt; 'MP3',
    $AUDIO_FORMAT_NELLYMOSER_8KHZ_MONO =&amp;gt; 'Nellymoser 8kHz mono',
    $AUDIO_FORMAT_NELLYMOSER           =&amp;gt; 'Nellymoser',
);

my $file = shift;

open my $fh, '&amp;lt;', $file;

my $header = read_header($fh);

while ( ! eof $fh ) {
    my $tag = read_tag($fh);
    if ( $tag-&amp;gt;{type} == $FLV_TAG_TYPE_AUDIO and $tag-&amp;gt;{length} ) {
        my $first_byte = $tag-&amp;gt;{first_byte};

    my $stereo       = $first_byte &amp;#38; $AUDIO_MASK_STEREO;
    my $audio_size  = $first_byte &amp;#38; $AUDIO_MASK_16bit ? 16 : 8;
        my $audio_rate   = $AUDIO_RATE{ $first_byte &amp;#38; $AUDIO_MASK_RATE } || 'unknown';
        my $audio_format = $AUDIO_FORMAT{ $first_byte &amp;#38; $AUDIO_MASK_FORMAT } || 'unknown';

        print 'audio type: ' . ( $stereo ? 'stereo' : 'mono' ) . "\n";
        print "audio size: $audio_size bit\n";
        print "audio rate: $audio_rate Hz\n";
        print "audio format: $audio_format\n";
        last;
    }
}

sub read_header {
    my $fh = shift;
    read $fh, my $sig,       3;
    read $fh, my $version,   1;
    read $fh, my $flag,      1;
    read $fh, my $offset,    4;
    read $fh, my $prev_tag,  4;

    return {
        sig =&amp;gt; $sig,
        version =&amp;gt; unpack('H*', $version),
        flag    =&amp;gt; unpack('H*', $flag),
        offset  =&amp;gt; unpack('H*', $offset),
    };
}

sub read_tag {
    my $fh = shift;
    read $fh, my $type,               1;
    read $fh, my $length,             3;
    read $fh, my $timestamp,          3;
    read $fh, my $timestamp_extended, 1;
    read $fh, my $stream_id,          3;
    read $fh, my $first_byte,         1;

    my $pos = hex unpack 'H*', $length;
    seek $fh, $pos - 1, 1;

    read $fh, my $prev_tag,  4;

    return {
        type       =&amp;gt; unpack('C', $type),
        length     =&amp;gt; $pos,
        first_byte =&amp;gt; unpack('C', $first_byte),
    };
}
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&#12371;&#12435;&#12394;&#24863;&#12376;&#12391; &lt;span class="caps"&gt;FLV&lt;/span&gt; &#12501;&#12449;&#12452;&#12523;&#12398;&#38899;&#22768;&#24773;&#22577;&#12434;&#34920;&#31034;&#12375;&#12414;&#12377;&#12290;&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;$ ./get_flv_info.pl broadcast_35957_1191232400660.flv
audio type: mono
audio size: 16 bit
audio rate: 11 Hz
audio format: Nellymoser  
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&#12354;&#12392;&#12399; Plagger &#12503;&#12521;&#12464;&#12452;&#12531;&#12434;&#26360;&#12367;&#12384;&#12369;&#12289;&#12392;&#12356;&#12358;&#24863;&#12376;&#12394;&#12398;&#12391;&#12377;&#12364;&#12289;&#12522;&#12499;&#12489;&#12540;&#12364;&#27832;&#12356;&#12390;&#12371;&#12394;&#12356;&#12398;&#12391;&#12385;&#12423;&#12387;&#12392;&#20445;&#30041;&#12290;FFmpeg &#12391; Nellymoser &#12395;&#23550;&#24540;&#12377;&#12427;&#20104;&#23450;&#12364;&#12354;&#12427;&#65288;&#26082;&#12395; &lt;span class="caps"&gt;SVN HEAD&lt;/span&gt; &#12395;&#12399; Nellymoser &#12392;&#12356;&#12358;&#25991;&#23383;&#21015;&#12364;&#12467;&#12540;&#12489;&#20013;&#12395;&#12354;&#12427;&#65289;&#12424;&#12358;&#12394;&#12398;&#12391;&#12289;&#12381;&#12428;&#12414;&#12391;&#24453;&#12387;&#12390;&#12418;&#12356;&#12356;&#12363;&#12394;&#12540;&#12289;&#12392;&#12290;&lt;/p&gt;


	&lt;p&gt;&#38899;&#22768;&#22793;&#25563;&#12377;&#12427;&#12503;&#12521;&#12464;&#12452;&#12531; &lt;a href="http://coderepos.org/share/browser/lang/perl/plagger/lib/Plagger/Plugin/Filter/Audio.pm"&gt;Filter::Audio&lt;/a&gt; &#12399; coderepos &#12395;&#12354;&#12370;&#12390;&#12354;&#12426;&#12414;&#12377;&#12398;&#12391;&#12289;&#20474;&#12364;&#23550;&#24540;&#12375;&#12390;&#12420;&#12427;&#12380;&#12289;&#12392;&#12356;&#12358;&#26041;&#12399;&#12362;&#22909;&#12365;&#12394;&#12424;&#12358;&#12395;&#12356;&#12376;&#12387;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;&lt;/p&gt;</description>
      <pubDate>Mon, 08 Oct 2007 14:07:00 +0900</pubDate>
      <guid isPermaLink="false">urn:uuid:8e786461-25a1-4c71-ab05-dc26ec4abb6b</guid>
      <author>Gosuke Miyashita</author>
      <link>http://blog.mizzy.org/articles/2007/10/08/flv-info-ustream</link>
      <category>program</category>
    </item>
  </channel>
</rss>
