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

OSCHINA-MIRROR/null_166_0518-easystream

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 9.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 17:46 17e19e6

EASYSTREAM — простой инструмент для преобразования RTSP в RTMP, HLV и HLS

Проект EASYSTREAM представляет собой фреймворк для вторичного обёртывания потоков RTSP от Hikvision Dahua и их преобразования в потоки для веб-трансляций. С помощью Nginx можно воспроизводить видео в форматах RTMP, HLV и HLS.

Проект

EASYSTREAM позволяет преобразовывать потоки RTSP от камер Hikvision Dahua в форматы, подходящие для веб-трансляции. Для трансляции на Windows был скомпилирован Nginx, который доступен для скачивания в проекте. Если вы используете Linux, вам потребуется динамическая компиляция.

Конфигурация EASYSTREAM добавляется в application.yml:

easystream:
  # Соответствующий адрес сервера Nginx
  push_host: 192.168.200.2
  # Время жизни потока (в минутах)
  keepalive: 1
  # Дополнительный адрес отправки
  host_extra: 127.0.0.1
  # Порт отправки Nginx
  push_port: 1935
  # Максимальная скорость основного потока
  main_code: 5120
  # Максимальная скорость дополнительного потока
  sub_code: 1024
  # Тип потока: 1 — Invr, 2 — синтез
  rtsptype: 1
  # Доступный порт для видеопотока
  access_port: 8085

Быстрый старт

Пример основан на Spring Boot.

  • Шаг 1: Добавьте зависимость Maven:

    <dependency>
        <groupId>com.github.xianyujava</groupId>
         <artifactId>easystream-spring-boot-starter</artifactId>
        <version>1.1.1</version>
    </dependency>
  • Шаг 2: Сканируйте интерфейсы:

    В классе конфигурации или запуска Spring Boot добавьте аннотацию @EasystreamScan.

    @SpringBootApplication
    @Configuration
    @EasystreamScan
    public class MyApplication {
      public static void main(String[] args) {
          SpringApplication.run(MyApplication.class, args);
       }
    }
  • Шаг 3: Вызовите интерфейс:

    Внедрите экземпляр интерфейса EasysteamService.

    // Внедрение экземпляра интерфейса
    @Autowired
    private EasysteamService easysteamService;
    ...

Запуск видеопотока

/**
 * CameraPojo — атрибуты сущности
 *  private String username = "";// Имя пользователя камеры
    private String password = "";// Пароль камеры
    private String ip = "";// IP-адрес камеры
    private String port = "8000";
    private String channel = "";// Канал камеры
    private String stream = "1";// Поток камеры: 1 — основной поток, 2 — дополнительный поток
    private String rtsp = "";// Возвращаемый адрес RTSP
    private String rtmp = "";// Возвращаемый адрес RTMP
    private String url = "";// Возвращаемый URL для HLV
    private String startTime = "";// Время начала воспроизведения при воспроизведении
    private String endTime = "";// Время окончания воспроизведения при воспроизведении
    private String openTime = "";// Открытое время
    private int count = 0;// Количество пользователей по умолчанию
    private String token = "";// Для прямой трансляции и воспроизведения требуется уникальный идентификатор
    private String hls = "";// Возвращённый URL для HLS
    private String type="";// По умолчанию пусто для синтеза видео, 0:nvr, 1:ipc
********************************************

    Параметры метода должны быть установлены следующим образом:
        username = "";// Имя пользователя камеры
        password = "";// Пароль камеры
        ip = "";// IP-адрес камеры
        port = "8000";
        channel = "";// Канал камеры
        token = "";// Уникальный идентификатор для прямой трансляции и воспроизведения
        type="";// По умолчанию пусто для синтеза видео, 0:nvr, 1:ipc
********************************************
    При открытии потока воспроизведения необходимо передать:
        startTime = "";// Начало времени воспроизведения
        endTime = "";// Конец времени воспроизведения
********************************************    
    Метод возвращает результат в виде строки JSON CameraPojo, включая URL воспроизведения:
        rtsp = "";// Адрес RTSP
        rtmp = "";// Адрес RTMP
        url = "";// URL для HLV
        hls = "";//URL для HLS
 */
String result = easysteamService.openCamera(CameraPojo pojo);

Завершение прямой трансляции видеопотока

/**
 * tokens — токены для открытия видеопотока, разделенные запятыми; например, 1,3
 */
String result = easysteamService.closeCamera(String tokens);

Завершение воспроизведения видеопотока

/**
 * tokens — токены для открытия видеопотока, разделённые запятыми; например, 1,3
 */
String result = easysteamService.closeHistoryCamera(String tokens);

Поддержание активности видеопотока, иначе он будет остановлен после тайм-аута

/**
 * tokens — токены для открытия видеопотока, разделённые запятыми; например, 1,3
 */
String result = easysteamService.keepAlive(String tokens);

Поддержание активности воспроизведения видеопотока, иначе оно будет остановлено после тайм-аута

/**
 * tokens — токены для открытия видеопотока, разделённые запятыми; например, 1,3
 */
String result = easysteamService.keepPlayBackAlive(String tokens);

Пример передней страницы (здесь используется библиотека flv.js)

<script src="../../lib/media/flv1.5.js"></script>

<video id="video_3"  autoplay="autoplay" height="100%" width="100%"></video>
function playvidoe(param, timer,id) {
  
    $.ajax({
        type: 'POST',
        url: '/nslcloud/rtmp/cameras',
        dataType: 'json',
        data: {
            'ip': param.videoip,
            'port': param.videoport,
            'username':
``` ```
param.username,
'password': param.password,
'channel': param.monitortdh,
'type': param.type,
'token': param.videoid,
'kcdm' : param.kcdm
},
success: function (json) {
    //json=JSON.parse(json)
    //alert(json.url);
    var ieversion = IEVersion();
    if (json.url != '') {
        //if (flvjs.isSupported()) {
        if (ieversion == 99) {
            var videoElement = document.getElementById('video_' + id);
            var flvPlayer = flvjs.createPlayer({
                type: 'flv',
                //height:'1040px',
                url: json.url
            });

            flvPlayer.attachMediaElement(videoElement);
            flvPlayer.load();
            flvPlayer.play();
            //flvid[id] = flvPlayer;
            flvid.put(id, flvPlayer);
            kcdms.put(id,param);
        } else {
            videojs('video_' + id).ready(
                function () {
                    //alert("1111");
                    var myPlayer5 = this;
                    myPlayer5.src({type: "rtmp/flv", src: json.rtmp});
                    myPlayer5.load(json.rtmp);
                    //myPlayer5.src({type: "rtmp/flv", src: json.hls});
                    //myPlayer5.load(json.hls);
                    myPlayer5.play();
                    this.on('play', function () {//开始播放
                        //flvid[id] = myPlayer5;
                        flvid.put(id, myPlayer5);
                        kcdms.put(id,param);
                    });
                }
            );
        }

        var interval = setInterval(function () {
            $.ajax({
                type: 'POST',
                url: '/nslcloud/rtmp/keepAlive',
                dataType: 'json',
                traditional: true,//这里设置为true
                headers: {
                    'Authorization': sessionStorage.getItem('Authorization')
                },
                data: {
                    'tokens': param.videoid,
                    'kcdm' : param.kcdm
                }, success: function (json) {

                }
            });
        }, 10000, 3000);
        if (timer.containsKey(id)) {
            clearInterval(timer.get(id));
            timer.remove(id);
        }
        //timer[id] = interval;
        timer.put(id, interval);
        // }
    } else {

        alert("无视频源!");
    }
},
error: function (data) {
    alert("请求错误!");
}
});

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/null_166_0518-easystream.git
git@api.gitlife.ru:oschina-mirror/null_166_0518-easystream.git
oschina-mirror
null_166_0518-easystream
null_166_0518-easystream
master