Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/65: Рейтинг темы: голосов - 65, средняя оценка - 4.98
5 / 5 / 0
Регистрация: 25.04.2012
Сообщений: 97

Проверка наличия rtsp-потока с IP-камеры libvlc

23.12.2015, 09:28. Показов 12892. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Пишу программу с возможностью показа видео с IP-камер. Использую libvlc. Процедуры начала трансляции и остановки(с офф-сайта https://wiki.videolan.org/Usin... _Delphi/):
Delphi
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
procedure TForm1.btnStart1Click(Sender: TObject);
begin
  // create new vlc instance
  vlcInstance1 := libvlc_new(0, nil);
  // create new vlc media from network, use libvlc_media_new_location instead
  vlcMedia1 := libvlc_media_new_location(vlcInstance1, 'rtsp://192.168.9.55:555/h264/media.amp');
  // create new vlc media player
  vlcMediaPlayer1 := libvlc_media_player_new_from_media(vlcMedia1);
  // now no need the vlc media, free it
  libvlc_media_release(vlcMedia1);
  // play video in a TPanel, if not call this routine, vlc media will open a new window
  libvlc_media_player_set_hwnd(vlcMediaPlayer1, Pointer(Panel1.Handle));
  // play media
  libvlc_media_player_play(vlcMediaPlayer1);
end;
 
procedure TForm1.btnStop1Click(Sender: TObject);
begin
  if not Assigned(vlcMediaPlayer1) then
    Exit;
 
  // stop vlc media player
  libvlc_media_player_stop(vlcMediaPlayer1);
  // and wait until it completely stops
  while libvlc_media_player_is_playing(vlcMediaPlayer1) = 1 do begin
    Sleep(100);
  end;
  // release vlc media player
  libvlc_media_player_release(vlcMediaPlayer1);
  vlcMediaPlayer1 := nil;
  // release vlc instance
  libvlc_release(vlcInstance1);
end;
Как можно отслеживать наличие/отсутствие потока (например, если обрыв сетевого канала или отключение питания IP-камеры)?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.12.2015, 09:28
Ответы с готовыми решениями:

Проверка наличия камеры
Доброго времени. подскажите плиз, как проверить наличие камеры на устройстве? проверяю вот таким методом private boolean...

Рендеринг видео потока используя OpenTK и LibVLC
Здравствуйте! Требуется отрендерить на полигон видео. Решил использовать LibVLC, нашел пример для OpenGL: ...

Видео по rtsp из ip камеры
Доброго всем времени. Есть задача, подключиться к камере на чипе H3518e по адресу...

11
 Аватар для wendstor
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 518
23.12.2015, 13:20
Думаю так
libvlc_state_t

API VLC
1
5 / 5 / 0
Регистрация: 25.04.2012
Сообщений: 97
23.12.2015, 13:40  [ТС]
Цитата Сообщение от wendstor Посмотреть сообщение
Думаю так
libvlc_state_t
И периодически вызывать libvlc_media_get_state()? А можно как отловить событие?
0
 Аватар для wendstor
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 518
23.12.2015, 16:05
Оно ?
Delphi
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, PasLibVlcUnit, Vcl.StdCtrls,
  Vcl.ExtCtrls;
 
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
    pMediaPlayer: libvlc_media_player_t_ptr;
  public
    { Public declarations }
  end;
 
procedure EventCallBack(p_event : libvlc_event_t_ptr; data:  Pointer); cdecl;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure EventCallBack(p_event : libvlc_event_t_ptr; data:  Pointer);
var
  str: string;
begin
  case p_event.event_type of
    libvlc_MediaPlayerPlaying: str := 'Playing';
    libvlc_MediaPlayerPaused: str := 'Paused';
    libvlc_MediaPlayerStopped: str := 'Stopped';
    libvlc_MediaPlayerOpening: str := 'Opening';
    libvlc_MediaPlayerEncounteredError: str := 'Encountered Error';
  end;
  Form1.Label1.Caption := str;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  libvlc_media_player_play(pMediaPlayer);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  libvlc_media_player_stop(pMediaPlayer);
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
  libvlc_media_player_pause(pMediaPlayer);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var
  pInst : libvlc_instance_t_ptr;
  pMedia: libvlc_media_t_ptr;
  pEventManager: libvlc_event_manager_t_ptr;
begin
  libvlc_dynamic_dll_init();
  pInst := libvlc_new(0, nil);
  pMedia := libvlc_media_new_location(pInst, 'rtmp://stream.smcloud.net/live2/eskatv/eskatv_480p');
  pMediaPlayer := libvlc_media_player_new_from_media(pMedia);
  libvlc_media_release(pMedia);
  libvlc_media_player_set_hwnd(pMediaPlayer, Panel1.Handle);
  // get event manager
  pEventManager := libvlc_media_player_event_manager(pMediaPlayer);
  // register event
  libvlc_event_attach(pEventManager, libvlc_MediaPlayerPlaying, @EventCallBack, nil);
  libvlc_event_attach(pEventManager, libvlc_MediaPlayerPaused, @EventCallBack, nil);
  libvlc_event_attach(pEventManager, libvlc_MediaPlayerStopped, @EventCallBack, nil);
  libvlc_event_attach(pEventManager, libvlc_MediaPlayerOpening, @EventCallBack, nil);
  libvlc_event_attach(pEventManager, libvlc_MediaPlayerEncounteredError, @EventCallBack, nil);   // it is?
end;
 
end.
1
5 / 5 / 0
Регистрация: 25.04.2012
Сообщений: 97
24.12.2015, 11:02  [ТС]
Цитата Сообщение от wendstor Посмотреть сообщение
Оно ?
Да. Спасибо большое. А это откуда?
0
 Аватар для wendstor
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 518
24.12.2015, 14:09
Цитата Сообщение от Michael Посмотреть сообщение
А это откуда?
ручками написано + доки
1
5 / 5 / 0
Регистрация: 25.04.2012
Сообщений: 97
24.12.2015, 14:30  [ТС]
Цитата Сообщение от wendstor Посмотреть сообщение
ручками написано + доки
Если можно, выложите, пожалуйста, PasLibVlcUnit(и другие юниты vlc, если есть) и библиотеку
0
 Аватар для wendstor
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 518
24.12.2015, 14:44
PasLibVlc - ссылка последняя версия заголовков под VCL 2.2.0
+ установить VCL - Ссылка
1
5 / 5 / 0
Регистрация: 25.04.2012
Сообщений: 97
24.12.2015, 15:06  [ТС]
Благодарю
0
5 / 5 / 0
Регистрация: 25.04.2012
Сообщений: 97
25.12.2015, 16:11  [ТС]
Цитата Сообщение от wendstor Посмотреть сообщение
Оно ?
Извините. Не совсем оно.

Во-первых, libvlc_MediaPlayerEncounteredError возникает, когда до запуска нет связи с камерой, а потом нажать play. А если шло воспроизведение, а потом произошел обрыв соединения, то возникнет libvlc_MediaPlayerEndReached. Это если я правильно понял.

А вот вторая проблема: если во время воспроизведения разорвать сеть на несколько секунд, а потом опять восстановить, то плеер
- либо несколько секунд показывает застывшую картинку, потом несколько секунд что-то буферрирует и восстанавливает поток(это может длиться секунд 40);
- либо продолжает показывать, но с задержкой(примерно равной времени разрыва).

Как избавиться от такой задержки? И можно ли отловить эти миниразрывы?
0
 Аватар для wendstor
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 518
25.12.2015, 17:39
Цитата Сообщение от Michael Посмотреть сообщение
Извините. Не совсем оно.
Во-первых, libvlc_MediaPlayerEncounteredError возникает, когда до запуска нет связи с камерой, а потом нажать play. А если шло воспроизведение, а потом произошел обрыв соединения, то возникнет libvlc_MediaPlayerEndReached. Это если я правильно понял.
А вот вторая проблема: если во время воспроизведения разорвать сеть на несколько секунд, а потом опять восстановить, то плеер
- либо несколько секунд показывает застывшую картинку, потом несколько секунд что-то буферрирует и восстанавливает поток(это может длиться секунд 40);
- либо продолжает показывать, но с задержкой(примерно равной времени разрыва).
Как избавиться от такой задержки? И можно ли отловить эти миниразрывы?
"Куда копать показано" - и это оно, осталось немного "покурить" мануал, что вы и не сделали.
Вторая проблема: это буферизация, читайте доки.
1
5 / 5 / 0
Регистрация: 25.04.2012
Сообщений: 97
29.12.2015, 13:11  [ТС]
Цитата Сообщение от wendstor Посмотреть сообщение
"Куда копать показано" - и это оно, осталось немного "покурить" мануал, что вы и не сделали.
Я тут просто уточнил, что нужно ещё обрабатывать событие libvlc_MediaPlayerEndReached в дополнение к libvlc_MediaPlayerEncounteredError.
Цитата Сообщение от wendstor Посмотреть сообщение
Вторая проблема: это буферизация, читайте доки.
А вот с этим никак не разберусь. Не пойму, как vlc восстанавливает поток. В доках не нашел. Ткните носом, пожалуйста.
Иногда после разрыва соединения поток восстанавливается за несколько секунд. А иногда - через минуту. От чего это зависит?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.12.2015, 13:11
Помогаю со студенческими работами здесь

Получение данных с камеры по протоколу RTSP
есть задача - получать изображение с камеры, должно работать и в Windows и в Linux, с RTSP раньше не встречался, поэтому банальный вопрос -...

Не выводится видео из RTSP потока
Приветствую. Такая проблема. Есть ip камера,то,что она отображает можно просматривать через RTSP поток. Установил на телефон VLC,...

Вывод в программе потока RTSP
Есть поток RTSP подскажите код , как вывести его в окне C# windows formВы так много сообщили, что Вам требуется и так хорошо...

Как узнать функции HTTP-сервера веб-камеры, ну и RTSP-адреса тоже...
Мне кто-то может на пальцах рассказать, как вкрыть и посмотреть, что умеет камера по http-протоколу... Wireshark помогает, но не всегда......

Отображение RTSP потока видео на iOS устройствах
Доброго времени суток. Мне требуется отобразить на экране телефона видео, которое вещается из интернета по RTSP протоколу. Стандартными...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru