Как передать файл pcap в поток RTP / RTCP? - PullRequest
5 голосов
/ 20 мая 2011

Я записал три разных потока в виде файла pcap с метаданными. Как я могу вернуться к потоку RTP / RTCP?

Ответы [ 7 ]

10 голосов
/ 30 апреля 2013

Если я правильно понимаю, у вас есть pcaps, но вы хотите получить RTP от них?

Пользовательский интерфейс Wireshark

Вы можете использовать пользовательский интерфейс Wireshark, чтобы легко получить RTP из pcap через Меню: Телефония / RTP / затем показать все потоки ... нажмите наПоток это списки, а затем «анализировать».

Однако, если вы хотите автоматизировать это и избежать пользовательского интерфейса ... вы можете использовать tshark.Я нашел несколько учебных пособий в Интернете и использовал их для создания тестового жгута, который автоматически перестраивает аудио / rtp на pcap, затем создает wav-файл и транскрибирует аудио с этого wav-файла в текст.

Автоматизировано с помощью Tshark

Я делал тестовый звонок и хотел преобразовать записанный pcap в аудио.Для этого я удалил RTP из pcap, затем преобразовал файл rtp в необработанный звук, а затем в wav.

Я делаю все это через командную строку, чтобы его можно было автоматизировать.Так что на самом деле у меня есть сценарий оболочки, который делает это:

tshark -a duration:20 -w /jenkins/userContent/sip_1call.pcap

Выше записывает захват пакета в течение 20 секунд (продолжительность вызова происходит одновременно) и выводит пакеты как sip_1call.pcap

ssrc=$(tshark -n -r /jenkins/userContent/sip_1call.pcap -R rtp -T fields -e rtp.ssrc -Eseparator=, | sort -u | awk 'FNR ==1 {print}')

Я устанавливаю переменную ssrc для этого действия использования tshark для извлечения значения rtp ssrc.Что такое ssrc, так это идентификатор потока RTP.Если у вас есть один поток, у вас будет одно значение RTP ssrc.Вам нужно было бы захватить все файлы RTP.ssrc и вывести их в файл, и он снова может легко стать необработанным аудио.

sudo tshark -n -r /jenkins/userContent/sip_1call.pcap -R rtp -R "rtp.ssrc == $ssrc" -T fields -e rtp.payload | tee payloads

На этом этапе моего сценария оболочки я снова запускаю tshark на записанном pcap и принимаю это значение ssrc и говорю «найди их всех как« полезную нагрузку »)

for payload in `cat payloads`; do IFS=:; for byte in $payload; do printf "\\x$byte" >> /jenkins/userContent/sip_1call.raw; done; done

Теперь скрипт устанавливает эти RTP.ssrc в выходной файл, я вызываю sip_1call.raw

Для своих целей я также хотел преобразовать этот необработанный файл в wav, поэтому я использовал sox:

sox -t raw -r 8000 -v 4 -c 1 -U /jenkins/userContent/sip_1call.raw /jenkins/userContent/sip_1call.wav

Я сделал еще кое-что в моей инфраструктуре автоматизации (например, переписал аудио в текст и сравнил с известной строкой) ... но это выходит за рамки вашего вопроса.

Надеюсь, это поможет ...

Подробнее о SSRc: http://en.wikipedia.org/wiki/Real-time_Transport_Protocol

Подробнее о полном сценарии оболочки, который я использую: http://www.continuous -qa.com / 2013/04/automated-verification-of-voip-audio.html

1 голос
/ 18 июля 2013

Вы можете воспроизвести все ваши захваченные пакеты (включая RTP) с помощью этого простого, бесплатного инструмента.

PlayCap - Воспроизведение для захвата Wireshark

PlayCap Screenshot

1 голос
/ 19 июня 2011

Для этой цели есть инструмент, входящий в пакет SIP-тестирования SIP. http://sipp.sourceforge.net/doc/reference.html#PCAP+Play

(отказ от ответственности: я никогда не использовал его сам, хотя сам использовал SIPp и очень его любил)

1 голос
/ 04 июня 2011

Взять pcap и (я предполагаю) переиграть его - нетривиальная вещь;я не знаю никаких пакетов для этого.Это может быть сделано, но требует очень хорошего знания как SIP (я полагаю, вы используете SIP), так и RTP.Вы также должны быть осторожны, чтобы воспроизводить пакеты в нужное время, не так быстро, как можете.

Кто-то, кто действительно знает, что делает, может написать такой инструмент за 3-5 дней.

0 голосов
/ 02 апреля 2013

Я тоже некоторое время бился головой об стену ... Но у меня есть решение. Итак, во-первых, убедитесь, что вы можете правильно позвонить на программный телефон / телефон ... если вы можете сделать это соединение в порядке, остальное не так уж плохо.

Вот моя командная строка:

sudo sipp -s [мой номер телефона] [ip моего прокси / софтсвитча] -sf /home/sipp-3.3/uac_pcap_g711.xml -m 2000 -mi [ip моего компьютера, отправляющего загрузку] - d 1200 -trace_rtt -trace_err -stat_delimiter,

Так что я использую свой собственный файл сценария, но вышеприведенные параметры должны хорошо работать для вас. вот что я делаю с SIPP:

sudo: Почему sudo? Если вы этого не сделаете, он не сможет создать сокет, необходимый для отправки аудио / мультимедиа.

mi: mi указывает ваш IP для отправки медиа ... Мне не нужно было указывать порт.

d: я добавил 1200 мс к паузе

trace_rtt и trace_err: я вывожу файлы журнала и отчет о производительности

stat_delimiter: я изменяю значение по умолчанию; до

В любом случае, это сработало для меня.

Редактировать:

Кроме того, обратите внимание, что у меня это для вызовов 2000, по умолчанию (10CPS) ... вы можете сделать это -m 1 на данный момент, чтобы вы могли проверить, работает ли он. Он должен воспроизвести звук pcap, а затем отправить DTMF.

После того, как я заработал это, я импортировал все это в Jenkins CI и вызвал sipp через задания Jenkins, преобразовал вывод csv в визуальные графики, а также сделал некоторые захваты tshark во время загрузки ... все через Jenkins ... если вам интересно, загляните в мой блог (упомянутый в моем профиле), чтобы узнать, как это настроить.

0 голосов
/ 18 января 2012

Как я могу вернуться к потоку RTP / RTCP.

Для достижения вашей цели есть специальный (бесплатный) инструмент с именем rtpplay: http://www.cs.columbia.edu/irt/software/rtptools/

0 голосов
/ 17 июня 2011

Если вы просто хотите воспроизвести / прослушать аудио, вы можете сохранить полезную нагрузку RTP в сыром звуковом файле, используя wireshark, затем вы можете отправить его повторно (или прослушать с помощью аудиоредактора), но если вы хотите воспроизвести точный поток RTP / RTCP сложнее

...