Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182

Генерация заголовка RTP

04.04.2016, 12:31. Показов 4985. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Перерыл много информации по RTP но так и не понял, как мне реализовать в с++ генерацию заголовка. Как мне работать с байтовым типом, если в с++ есть только тип char, эмулирующий byte?
Если кому-то не лень, может кто-нибудь привести пример функции, создающей заголовок?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.04.2016, 12:31
Ответы с готовыми решениями:

Автоматическая генерация заголовка для текста
Здравствуйте! Есть текст, но к нему нет заголовка, возможно ли с помощью скрипта автоматически генерировать заголовок? (текст на...

При переносе сложного заголовка таблицы в Word теряются границы ячеек заголовка
При переносе "сложного" заголовка таблицы в Word на следующий лист (на первом листе таблицы все границы у ячеек есть!) теряются некоторые...

В заданном файле найти и напечатать строки заголовка. Строкой заголовка считать строку, до и после которой оставлена хотя бы одна пустая строка.
В заданном файле найти и напечатать строки заголовка. Строкой заголовка считать строку, до и после которой оставлена хотя бы одна пустая...

31
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
04.04.2016, 16:02  [ТС]
Студворк — интернет-сервис помощи студентам
avgoor, я использую boost.
сама функция передачи выглядит так:
C++
1
socket->send_to(boost::asio::buffer(buffer, buffer_size +12/*rtp_header*/), Endpoint);
где buffer - uint8_t.

Видимо, мне надо в начало buffer вставить мой заголовок. Сейчас попробовал сложить все свойства RTP и отправить - не получилось. (wireshark воспринял мой заголовок как "d5")
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
struct RTP
{
    uint8_t get()
    {
        this->SN++;
        this->ESN++;
        this->TS += 160;
        return this->Ver + this->Padding + this->Extention + this->Csic + this->Marker + this->PT + this->SN + this->ESN + this->TS + this->SSI;
    }
    uint8_t Ver : 2;
    uint8_t Padding : 1;
    uint8_t Extention : 1;
    uint8_t Csic : 4;
    uint8_t Marker : 1;
    uint8_t PT : 7;
    uint16_t SN : 16;
    uint8_t ESN : 4;
    uint32_t TS : 32;
    uint8_t SSI : 7;
};
///////////////////
RTP b;
        b.Ver = 2;
        b.Padding = 0;
        b.Extention = 0;
        b.Csic = 0;
        b.Marker = 0;
        b.PT = 8;
        b.SN = 0;
        b.ESN = 0;
        b.SSI = (uint8_t)62560708;
        b.TS = 0;
///////////////////
socket->send_to(boost::asio::buffer((uint8_t)rtp.get() + buffer, buffer_size +12/*rtp_header*/), Endpoint);
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
04.04.2016, 16:08
feck, Тогда как-то так:
C++
1
2
RTP_HEADER h;
boost::asio::buffer(&h, sizeof(RTP_HEADER))
В общем, разберитесь как отправить кусок данных определенного размера.
0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
04.04.2016, 16:18  [ТС]
avgoor, тоесть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
struct RTP
{
    uint8_t get()
    {
        this->SN++;
        this->ESN++;
        this->TS += 160;
        return this->Ver + this->Padding + this->Extention + this->Csic + this->Marker + this->PT + this->SN + this->ESN + this->TS + this->SSI;
    }
    void setdata(uint8_t* a){ data = a; }
    uint8_t Ver : 2;
    uint8_t Padding : 1;
    uint8_t Extention : 1;
    uint8_t Csic : 4;
    uint8_t Marker : 1;
    uint8_t PT : 7;
    uint16_t SN : 16;
    uint8_t ESN : 4;
    uint32_t TS : 32;
    uint8_t SSI : 7;
    uint8_t *data;
};
///////////////////////
        RTP rtp;
        b.Ver = 2;
        b.Padding = 0;
        b.Extention = 0;
        b.Csic = 0;
        b.Marker = 0;
        b.PT = 8;
        b.SN = 0;
        b.ESN = 0;
        b.SSI = (uint8_t)62560708;
        b.TS = 0;
//////////////////////
rtp.setdata(output_packet.data);
Socket->send_to(boost::asio::buffer(&rtp, sizeof(rtp)), Endpoint);
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
04.04.2016, 16:24
Да. как-то так. Но, конечно, весь код надо смотреть.
0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
04.04.2016, 16:34  [ТС]
avgoor, wireshark не опознает такой пакет... А точнее, его заголовок.
Все, что я делаю со структурой rtp я привел выше
Миниатюры
Генерация заголовка RTP  
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
04.04.2016, 17:15
feck

Чего вы хотите добиться этой строкой?
Цитата Сообщение от feck Посмотреть сообщение
return this->Ver + this->Padding + this->Extention + this->Csic + this->Marker + this->PT + this->SN + this->ESN + this->TS + this->SSI
Сложить все поля заголовка без смещения return 2+1+1+4...? Зачем?
Зачем вам в структуре указатель uint_8 *data. Получателю будет интересно узнать, что data у вас на компьютере находится, допустим, во второй планке памяти?

По теме, посмотрел спецификацию. там Big-endian порядок. Попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
struct RTP
{
    uint8_t Csic : 4;
    uint8_t Extention : 1;
    uint8_t Padding : 1;
    uint8_t Ver : 2;
    uint8_t PT : 7;
    uint8_t Marker : 1;
...
};
Если заработает расскажу, как сделать правильно.
0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
04.04.2016, 17:46  [ТС]
avgoor, а поля
C++
1
2
3
4
uint16_t SN : 16; //sequence number
    uint8_t ESN : 4; //extended SN
    uint32_t TS : 32;// timestamp
    uint8_t SSI : 7;//sync source id
как расставить? Просто не улавливаю по убыванию чего их ставить.

Точно) сейчас data поправлю и скажу, заработало ли
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
04.04.2016, 17:57
feck, Вообще, порядок полей в bitfield зависит от реализации, но на x86 он везде (по крайней мере в большинстве компиляторов) от младшего бита к старшему. В специализации RTP Указано смещение от старшего бита к младшему. Т.е. внутри байта меняем порядок на обратный.

Вообще, есть более правильные подходы.
0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
05.04.2016, 09:24  [ТС]
avgoor, нет, не заработало(
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
05.04.2016, 12:05
feck, Есть нормальный пакет, который проходит?
0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
05.04.2016, 15:06  [ТС]
avgoor, я думаю, потом вернусь к этой проблеме. Сейчас придумал временное решение: копировать заголовок от приходящих пакетов.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
05.04.2016, 15:19
Цитата Сообщение от feck Посмотреть сообщение
копировать заголовок от приходящих пакетов.
Так возьмите скопируйте его в структуру и перестановкой полей добейтесь правильной интерпретации.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.04.2016, 15:19
Помогаю со студенческими работами здесь

Не заполняются параметры макета заголовка группы СКД и как скрыть вывод заголовка группы
Две проблемы. В СКД создана группировка по ссылке, на отчет должен выводится макет заполненных параметрами из запроса, в макете группировки...

RTP нагрузка
Добрый день! Другого, более логичного места данной теме не нашел... Имеется "сырая" нагрузка RTP пакета, каким способом...

Разбор RTP
Хочу уточнить пару моментов по разбору RTP-пакетов. С помощью Wireshark сделал дамп и записал его в файл. Следует извлечь данные из...

Java и поддержка RTP
Здравствуйте форумчане! Опыт в сетевом программировании небольшой, как то писался чат используя java.net.Socket и java.net.ServerSocket и...

Работа по RTP протоколу
RTP является надстройкой над UDP и имеет вид typedef struct _RTP_HEADER { //--- NETWORK BYTE ORDER BEGIN ---// WORD NumCSRC:4; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru