Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/16: Рейтинг темы: голосов - 16, средняя оценка - 4.81
Michael
3 / 3 / 0
Регистрация: 25.04.2012
Сообщений: 96
1

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

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

Здравствуйте.
Пишу программу с возможностью показа видео с IP-камер. Использую libvlc. Процедуры начала трансляции и остановки(с офф-сайта https://wiki.videolan.org/Using_libvlc_with_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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2015, 09:28
Ответы с готовыми решениями:

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

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

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

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

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

11
wendstor
133 / 133 / 64
Регистрация: 15.05.2012
Сообщений: 503
23.12.2015, 13:20 2
Думаю так
libvlc_state_t

API VLC
1
Michael
3 / 3 / 0
Регистрация: 25.04.2012
Сообщений: 96
23.12.2015, 13:40  [ТС] 3
Цитата Сообщение от wendstor Посмотреть сообщение
Думаю так
libvlc_state_t
И периодически вызывать libvlc_media_get_state()? А можно как отловить событие?
0
wendstor
133 / 133 / 64
Регистрация: 15.05.2012
Сообщений: 503
23.12.2015, 16:05 4
Оно ?
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
23.12.2015, 16:05
Michael
3 / 3 / 0
Регистрация: 25.04.2012
Сообщений: 96
24.12.2015, 11:02  [ТС] 5
Цитата Сообщение от wendstor Посмотреть сообщение
Оно ?
Да. Спасибо большое. А это откуда?
0
wendstor
133 / 133 / 64
Регистрация: 15.05.2012
Сообщений: 503
24.12.2015, 14:09 6
Цитата Сообщение от Michael Посмотреть сообщение
А это откуда?
ручками написано + доки
1
Michael
3 / 3 / 0
Регистрация: 25.04.2012
Сообщений: 96
24.12.2015, 14:30  [ТС] 7
Цитата Сообщение от wendstor Посмотреть сообщение
ручками написано + доки
Если можно, выложите, пожалуйста, PasLibVlcUnit(и другие юниты vlc, если есть) и библиотеку
0
wendstor
133 / 133 / 64
Регистрация: 15.05.2012
Сообщений: 503
24.12.2015, 14:44 8
PasLibVlc - ссылка последняя версия заголовков под VCL 2.2.0
+ установить VCL - Ссылка
1
Michael
3 / 3 / 0
Регистрация: 25.04.2012
Сообщений: 96
24.12.2015, 15:06  [ТС] 9
Благодарю
0
Michael
3 / 3 / 0
Регистрация: 25.04.2012
Сообщений: 96
25.12.2015, 16:11  [ТС] 10
Цитата Сообщение от wendstor Посмотреть сообщение
Оно ?
Извините. Не совсем оно.

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

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

Как избавиться от такой задержки? И можно ли отловить эти миниразрывы?
0
wendstor
133 / 133 / 64
Регистрация: 15.05.2012
Сообщений: 503
25.12.2015, 17:39 11
Цитата Сообщение от Michael Посмотреть сообщение
Извините. Не совсем оно.
Во-первых, libvlc_MediaPlayerEncounteredError возникает, когда до запуска нет связи с камерой, а потом нажать play. А если шло воспроизведение, а потом произошел обрыв соединения, то возникнет libvlc_MediaPlayerEndReached. Это если я правильно понял.
А вот вторая проблема: если во время воспроизведения разорвать сеть на несколько секунд, а потом опять восстановить, то плеер
- либо несколько секунд показывает застывшую картинку, потом несколько секунд что-то буферрирует и восстанавливает поток(это может длиться секунд 40);
- либо продолжает показывать, но с задержкой(примерно равной времени разрыва).
Как избавиться от такой задержки? И можно ли отловить эти миниразрывы?
"Куда копать показано" - и это оно, осталось немного "покурить" мануал, что вы и не сделали.
Вторая проблема: это буферизация, читайте доки.
1
Michael
3 / 3 / 0
Регистрация: 25.04.2012
Сообщений: 96
29.12.2015, 13:11  [ТС] 12
Цитата Сообщение от wendstor Посмотреть сообщение
"Куда копать показано" - и это оно, осталось немного "покурить" мануал, что вы и не сделали.
Я тут просто уточнил, что нужно ещё обрабатывать событие libvlc_MediaPlayerEndReached в дополнение к libvlc_MediaPlayerEncounteredError.
Цитата Сообщение от wendstor Посмотреть сообщение
Вторая проблема: это буферизация, читайте доки.
А вот с этим никак не разберусь. Не пойму, как vlc восстанавливает поток. В доках не нашел. Ткните носом, пожалуйста.
Иногда после разрыва соединения поток восстанавливается за несколько секунд. А иногда - через минуту. От чего это зависит?
0
29.12.2015, 13:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2015, 13:11

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru