1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/matrixy-jtt1078-video-server

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Оглавление

  1. Общие сведения
  2. Разделение ветвей
  3. Описание проекта
  4. Подготовка инструментов
  5. Шаги тестирования
  6. Тестовая среда
  7. To Do
  8. Благодарность
  9. Рекомендованные проекты коллег
  10. Обсуждение

jtt1078-video-server

Видеотрансляционный сервер, реализованный на основе протокола JT/T 1078. Когда сервер устройства передает сообщение управления потоком аудио-видео (0x9101), автомобильное устройство подключается к этому серверу и отправляет видеопоток с камеры. Сервер принимает и декодирует аудио-видео данные, обеспечивая транслирование.

Кроме того, этот проект позволяет одновременно выводить поток на RTMP-сервер после конфигурирования пути к ffmpeg и rtmp-url, что обеспечивает воспроизведение видео на мобильных устройствах (учитывайте, что производительность снижается из-за использования ffmpeg как отдельного процесса).

Благодарю 孤峰赏月/hx(github/jelycom за предоставление поддержки mp3-аудио.

Разделение ветвей

Изначально проект содержал четыре ветви различных реализаций. Все остальные ветви были удалены, так как они больше не используются. После конфигурирования ffmpeg и rtmp можно попробовать вывести поток на HLS и другие системы.

Для разработчиков на других языках рекомендую "JTT/1 Yöntem ve Protokol Geliştirme Kılavuzu", где я подробно описываю ошибки и недочеты официальной документации, чтобы помочь вам избежать проблем.

Описание проекта

Проект принимает аудио-видео данные от автомобильного устройства, видео сразу упаковывается в FLV-TAG, аудио преобразуется из G.711A, G.711U, ADPCMA, G726 в PCM и затем сжимается в MP3 перед упаковкой в FLV-TAG.

Поддержка кодирования видео

На данный момент большинство терминалов используют h264 как основной кодировщик видео, поэтому упаковка в FLV является простой задачей. Некоторые производители используют AVS, но мне еще не приходилось встречаться с этим. В этом проекте поддерживаются только h264-кодировщики видео.

Поддержка кодирования аудио

Аудио кодировка Поддерживается Примечания
G.711A Да Поддерживается
G.711U Да Поддерживается
ADPCMA Да Поддерживается
G.726 Да Поддерживается

Существует множество аудио кодировок, однако доступно мало устройств для тестирования. Наиболее распространенными являются G.711A и ADPCMA. Для неподдерживаемых аудио кодировок используется статическое звуковое оформление.

Расширение кодирования аудио

Наследование и реализация абстрактных методов класса AudioCodec, позволяющее выполнять преобразование любого аудио в PCM кодировку. Добавьте также метод AudioCodec.getCodec(). Пример абстрактного класса AudioCodec представлен ниже:

public abstract class AudioCodec {
    // Преобразование в PCM
    public abstract byte[] toPCM(byte[] data);
    // Преобразование из PCM в текущий кодировщик, может быть пустым
    public abstract byte[] fromPCM(byte[] data);
}

Подготовка инструментов

В проекте есть тестовый скрипт (src/main/java/cn/org/hentai/jtt1078/test/VideoPushTest.java) и тестовый файл данных (src/main/resources/tcpdump.bin). Этот файл данных представляет собой пакеты аудио-видео данных, полученные с помощью специального инструмента. Тестовый скрипт может постоянно отправлять данные из файла, имитируя процесс отправки видеопотока.

Кроме того, был добавлен класс cn.org.hentai.jtt1078.test.RTPGenerate, который читает bin-файл, модифицирует номер SIM-карты и канал, создавая большое количество тестовых файлов для нагрузочных тестов.

Шаги тестирования

  1. Конфигурация сервера через изменение параметров в app.properties.
  2. Запуск сервера через IDE (cn.org.hentai.jtt1078.app.VideoServerApp) или сборка проекта командами mvn package и java -jar jtt1078-video-server-1.0-SNAPSHOT.jar.
  3. Запуск VideoPushTest.java для начала имитации отправки видеопотока.
  4. После запуска будет показана строка "start publishing: 013800138999-2".
  5. Открытие браузера и переход по адресу http://localhost:3333/test/multimedia#013800138999-2.
  6. Клик по кнопке "play video" для начала воспроизведения видео.

Тестовая среда

Установлена тестовая среда на моем VPS, используя код из ветки flv. Вы можете направлять аудио-видео данные вашего терминала на этот сервер или использовать netcat для создания симулированных данных.

Заголовок Описание
1078 аудио-видео сервер 185.251.248.4:10780
Страница реального времени аудио-видео http://1078.hentai.org.cn/test/multimedia#SIM-CHANNEL
  1. Файл tcpdump.bin в директории /src/main/resources/ содержит аудио-видео данные, полученные с помощью пакетного анализа. Команда cat tcpdump.bin | pv -L 40k -q | nc 185.251.248.4 10780 позволяет отправлять данные на сервер со скоростью 40 kBPS.
  2. Переход по адресу http://1078.hentai.org.cn/test/multimedia#SIM-CHANNEL (не забудьте заменить SIM и CHANNEL на номер SIM-карты и канал соответственно), затем клик по кнопке "play video".

Поскольку IP-адрес сервера может меняться, рекомендуется проверить актуальный IP-адрес командой ping www.hentai.org.cn.

Описание файлов проекта

│   ├── 1078.png (иконка)
│   └── ffmpeg.png
├── LICENSE (лицензия открытого исходного кода)
├── pom.xml
├── README.md (описание проекта)
├── src
│   └── main
│       ├── java
│       │   └── cn
│       │       └── org
│       │           └── hentai
│       │               └── jtt1078
│       │                   ├── app
│       │                   │   └── VideoServerApp.java (основной входящий программный модуль)
│       │                   ├── codec
│       │                   │   ├── ADPCMCodec.java (ADPCM кодировщик и декодировщик)
│       │                   │   ├── AudioCodec.java (абстрактный родительский класс аудио кодировщиков и декодировщиков)
│       │                   │   ├── G711Codec.java (G711A/alaw кодировщик и декодировщик)
│       │                   │   ├── G711UCodec.java (G711U/ulaw кодировщик и декодировщик)
│       │                   │   ├── g726 (реализация кодировщиков и декодировщиков G726)
│       │                   │   │   ├── G726_16.java
│       │                   │   │   ├── G726_24.java
│       │                   │   │   ├── G726_32.java
│       │                   │   │   ├── G726_40.java
│       │                   │   │   ├── G726.java
│       │                   │   │   └── G726State.java
│       │                   │   ├── G726Codec.java (G726 кодировщик и декодировщик)
│       │                   │   ├── MP3Encoder.java (PCM до MP3 компрессионный кодировщик)
│       │                   │   └── SilenceCodec.java (статический декодировщик звука)
│       │                   ├── entity
│       │                   │   ├── Audio.java
│       │                   │   ├── MediaEncoding.java
│       │                   │   ├── Media.java
│       │                   │   └── Video.java
│       │                   ├── flv
│       │                   │   ├── AudioTag.java
│       │                   │   ├── FlvAudioTagEncoder.java
│       │                   │   ├── FlvEncoder.java (H264 до FLV упаковочный кодировщик)
│       │                   │   └── FlvTag.java
│       │                   ├── http (внутренний HTTP-сервер, предоставляющий поддержку HTTP-CHUNKED передачи)
│       │                   │   ├── GeneralResponseWriter.java
│       │                   │   └── NettyHttpServerHandler.java
│       │                   ├── publisher
│       │                   │   ├── Channel.java (один канал один экземпляр Channel, Subscriber подписывает аудио и видео на канале)
│       │                   │   └── PublishManager.java (управление каналами и подписчиками)
│       │                   ├── server (ответственный за прием и декодирование 1078 RTP сообщений)
│       │                   │   ├── Jtt1078Decoder.java
│       │                   │   ├── Jtt1078Handler.java
│       │                   │   ├── Jtt1078MessageDecoder.java
│       │                   │   └── Session.java
│       │                   ├── subscriber
│       │                   │   ├── RTMPPublisher.java (реализация передачи http-flv через ffmpeg подпроцесс на RTMP сервер)
│       │                   │   ├── Subscriber.java (абстрактный класс подписчика)
│       │                   │   └── VideoSubscriber.java (видео подписчик)
│       │                   ├── test (тестовые модули)
│       │                   │   ├── AudioTest.java
│       │                   │   ├── ChannelTest.java
│       │                   │   ├── FuckTest.java
│       │                   │   ├── G711ATest.java
│       │                   │   ├── MP3Test.java
│       │                   │   ├── RTPGenerate.java (генератор тестовых данных путем чтения исходных сообщений данных, создание N новых файлов с измененным номером SIM-карты, для нагрузочных тестов)
│       │                   │   ├── VideoPushTest.java
│       │                   │   ├── VideoServer.java
│       │                   │   └── WAVTest.java
│       │                   └── util
│       │                       ├── ByteBufUtils.java
│       │                       ├── ByteHolder.java
│       │                       ├── ByteUtils.java
│       │                       ├── Configs.java
│       │                       ├── FileUtils.java
│       │                       ├── FLVUtils.java
│       │                       ├── Packet.java
│       │                       └── WAVUtils.java
│       └── resources
│           ├── app.properties (основной конфигурационный файл)
│           ├── audio.html
│           ├── g726
│           │   ├── in_16.g726
│           │   ├── in_24.g726
│           │   ├── in_32.g726
│           │   └── in_40.g726
│           ├── log4j.properties
│           ├── multimedia.html (тестовая страница для воспроизведения аудио-видео)
│           ├── tcpdump.bin (тестовый файл данных, аудио ADPCM с головками HiSilicon, видео H264)
│           ├── nginx_sample.conf (пример конфигурации NGINX для обратного прокси, решение проблемы шести параллельных соединений)
│           ├── test.html
│           └── video.html

Инструкции по сборке проекта

Проект собирается командой mvn package, которая создает jar-файл. Запуск осуществляется командой java -jar jtt1078-video-server-1.0-SNAPSHOT.jar. Лучше всего иметь файлы app.properties и multimedia.html в одном каталоге, поскольку проект предпочитает считывать конфигурацию из локальных файлов. Если нет необходимости в локальном тестировании, файл multimedia.html можно не использовать.

Внимание

  1. Этот проект представляет собой реализацию части протокола JT 1078 для стримингового сервера, которая не включает взаимодействие с контролирующими сообщениями протокола 1078. То есть это реализация аудио/видео сервера, которому подключается конечное устройство после отправки команды 0x9101.
  2. В обычных браузерах, таких как Chrome, существует ограничение на количество одновременных соединений с одним доменом — максимум шесть. Поэтому при необходимости одновременного воспроизведения нескольких видеопотоков следует подготовить несколько доменов или портов и распределить соединения с помощью циклического метода, направляя видео-трансляционные соединения на различные URL.

Благодарность

Начальный вариант этого проекта был простым демонстрационным примером. После открытия исходного кода и создания QQ группы для общения он получил значительную помощь и поддержку со стороны единомышленников. За это мы выражаем благодарность. Проект еще находится в процессе совершенствования, и мы рады приветствовать новых друзей, чтобы вместе создать более мощную платформу для мониторинга видео.

Список благодарностей

Мы хотели бы выразить особую благодарность следующим пользователям за их помощь и поддержку, а также всем другим участникам, которые помогли нам:

  • Не Ань Не Минь
  • Гуй Шугу
  • Хао Чжунгуай
  • Yedajiang44.com (github.com/yedajiang44)
  • Счастье Обязательно Сильное
  • Minigps - базовая станция для позиционирования
  • Медленно
  • Power LXC
  • Куиду
  • Гуфэн Сянюэ / Хуацзе (github/jelycom)
  • Лоци (cuiyaonan)
  • Тмыам

Рекомендованные проекты участников группы

Проект URL Автор Описание
JT1078 https://github.com/yedajiang44/JT1078 SmallChi/yedajiang44 C#, поддерживает аудио/видео, передача flv через websocket на фронтенд

Обсуждение

QQ группа: 808432702, присоединяйтесь к нам! В группе вас ждут активные единомышленники, связанные материалы, тестовые данные, код и множество других решений.

Донат

Открытый исходный код требует усилий. Поддержите меня, купив сигареты "Фубинго".

Донат

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Видеосервер для трансляции, реализованный на основе стандарта JT/T 1078. Развернуть Свернуть
Java и 2 других языков
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/matrixy-jtt1078-video-server.git
git@api.gitlife.ru:oschina-mirror/matrixy-jtt1078-video-server.git
oschina-mirror
matrixy-jtt1078-video-server
matrixy-jtt1078-video-server
flv