для этого не требуется ffmpeg, но я предполагаю, что вам все равно, как извлекается звук... посмотрите Как декодировать G729 на вики wireshark...
В Wireshark используйте меню «Статистика -> RTP -> Показать все потоки». Выберите нужный поток и нажмите «Анализ».
В следующем диалоговом окне нажмите «Сохранить полезную нагрузку...». Варианты сохранения: Format = .raw и Channel = forward. Назовите файл sample.raw.
Преобразуйте файл .raw в формат .pcm с помощью декодера Open G.729. Синтаксис: va_g729_decoder.exe sample.raw sample.pcm. Или для Linux: wine va_g729_decoder.exe sample.raw sample.pcm.
Файл .pcm содержит 16-битные выборки линейной ИКМ с частотой 8000 Гц. Обратите внимание, что каждый образец находится в формате с прямым порядком байтов. Чтобы преобразовать в формат .au, все, что вам нужно сделать, это добавить 24-байтовый заголовок au и преобразовать каждый образец PCM в сетевой порядок байтов (или Big-Endian). Следующий Perl-скрипт сделает свое дело.
ИСПОЛЬЗОВАНИЕ: perl pcm2au.pl входной файл выходной файл
$usage = "Usage: 'perl $0 <Source PCM File> <Destination AU File>' ";
$srcFile = shift or die $usage;
$dstFile = shift or die $usage;
open(SRCFILE, "$srcFile") or die "Unable to open file: $!\n";
binmode SRCFILE;
open(DSTFILE, "> $dstFile") or die "Unable to open file: $!\n";
binmode DSTFILE;
###################################
# Write the AU header
###################################
print DSTFILE ".snd";
$foo = pack("CCCC", 0,0,0,24);
print DSTFILE $foo;
$foo = pack("CCCC", 0xff,0xff,0xff,0xff);
print DSTFILE $foo;
$foo = pack("CCCC", 0,0,0,3);
print DSTFILE $foo;
$foo = pack("CCCC", 0,0,0x1f,0x40);
print DSTFILE $foo;
$foo = pack("CCCC", 0,0,0,1);
print DSTFILE $foo;
#############################
# swap the PCM samples
#############################
while (read(SRCFILE, $inWord, 2) == 2) {
@bytes = unpack('CC', $inWord);
$outWord = pack('CC', $bytes[1], $bytes[0]);
print DSTFILE $outWord;
}
close(DSTFILE);
close(SRCFILE);
person
This
schedule
12.10.2011