С Новым годом! Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/40: Рейтинг темы: голосов - 40, средняя оценка - 4.98
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684

Как добавить в приложение просмотр потока с камеры видеонаблюдения?

30.04.2017, 11:48. Показов 8726. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

есть видеорегистратор аналоговой системы видеонаблюдения(доступен через интернет), к нему подключены 3 камеры, задача:

1. подключиться по ip-адресу и порту к видеорегистратору.

2. взять поток нужной камеры и отобразить в приложении.

есть похожее приложение vMEye
я в нем заполняю 5 полей: adress, port, login, password, max channel и все работает,

подскажите кто сталкивался, что использовать для подключения, и как можно это реализовать?


Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.04.2017, 11:48
Ответы с готовыми решениями:

Как отредактировать видео с камеры видеонаблюдения .mp4? Видеоредакторы не открывают
Добрый день. IP камера hikvision ds-2cd2035-i круглосуточно пишет видео на комп в mp4, кодек h.264, размер каждого видеофайла 1 гб ~18...

Камеры видеонаблюдения
Не знаю какой форум для этого есть но решил поспрашивать здесь, какие камеры видеонаблюдения, надо такую чтобы она записывала видео...

Подключение камеры видеонаблюдения
нужно подключить камеру видеонаблюдения в проект ... чтобы при нажатии на button она зафиксировала этот момент и вывела изображение в...

16
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
03.05.2017, 08:54  [ТС]
это вообще реально сделать?

т.е. допустим зная ip и port, я с помощью httpURLconnection подключаюсь к видеорегистратору, а куда дальше копать?
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
03.05.2017, 09:16
disx, это реально сделать, но начать стоит не с приложения "которое делает так как мне нужно", а с изучения технической документации к камере которую вы собираетесь использовать: в каком формате она может отдавать видео? какие инструменты имеются у этой камеры для ее интеграции во внешние программные комплексы? в самом простом случае: настройте на камере выдачу потока в формате MJPEG, разместите в приложении WebView, пропишите в нем тег img с нужной ссылкой. для более сложных случаев поможет либо SDK камеры либо ffmpeg либо <свой вариант>
0
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
03.05.2017, 09:51  [ТС]
vxg,
Цитата Сообщение от vxg Посмотреть сообщение
в каком формате она может отдавать видео?
если правильно понимаю аналоговая камера отдает сигнал, а в формат видео кодирует видеорегистратор к которому она подключена этот формат называется H.264. (сохранить видео с регистратора можно в формате H.264 и AVI).



Цитата Сообщение от vxg Посмотреть сообщение
пропишите в нем тег img с нужной ссылкой
т.е. эта ссылка на что должна быть?
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
03.05.2017, 10:49
disx, компрессия h264 это хорошо для потока но (если можно так выразиться) не для принимающей стороны - для того что бы отобразить этот поток вам понадобится чуть более чем сказать 1-2-3. обычно в документации указываются ссылки соответствующие разным потокам и протоколам, например:
или
rtsp://admin:12345@192.0.0.64/h264/ch1/sub/av_stream
вот ее и нужно записать в тег.
если это MJPEG можно записать ссылку в тег img
HTML5
1
<img src='http://127.0.0.1:8080/cam1/stream.mjpeg'>
если это нечто иное можно попробовать тег video из HTML-5
HTML5
1
<video src='rtsp://admin:12345@192.0.0.64/h264/ch1/sub/av_stream'>Video not supported</video>
Добавлено через 2 минуты
disx, аналоговая камера конечно же не отдаст вам поток по ссылке но некоторые регистраторы могут прокинуть поток от аналоговой до вас

Добавлено через 9 минут
disx, кстати, можно попробовать подсунуть эту ссылку и в VideoView
1
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
03.05.2017, 13:28
Лучший ответ Сообщение было отмечено vxg как решение

Решение

Делал как то пример для себя, стандартный mediaPlayer умеет воспроизводить RTSP поток, к ip камере подключался без проблем, но фишка вроде с андроида 5 или 4.4

вот тестовый код, нашел на просторах и переделал под себя

Java
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
89
90
91
92
93
94
import android.content.Context;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Base64;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;
 
import java.util.HashMap;
import java.util.Map;
 
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, MediaPlayer.OnPreparedListener{
 
    final static String USERNAME = "admin";
    final static String PASSWORD = "111111";
    //final static String RTSP_URL = "rtsp://10.0.1.7:554/play1.sdp";
    //final static String RTSP_URL = "rtsp://192.168.5.35:554/channel1";
    final static String RTSP_URL = "rtsp://admin:111111@192.168.0.2:554/v2";
    //final static String RTSP_URL = "rtsp://192.168.0.100:554/user=admin_password=1_channel=1_stream=v0";
 
    private MediaPlayer _mediaPlayer;
    private SurfaceHolder _surfaceHolder;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        Window window = getWindow();
        window.setFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        window.setBackgroundDrawableResource(android.R.color.black);
 
        setContentView(R.layout.activity_main);
 
        // Configure the view that renders live video.
        SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
        _surfaceHolder = surfaceView.getHolder();
        _surfaceHolder.addCallback(this);
        _surfaceHolder.setFixedSize(320, 240);
    }
 
    @Override
    public void onPrepared(MediaPlayer mp) {
        _mediaPlayer.start();
    }
 
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        _mediaPlayer = new MediaPlayer();
        _mediaPlayer.setDisplay(_surfaceHolder);
 
        Context context = getApplicationContext();
        Map<String, String> headers = getRtspHeaders();
        Uri source = Uri.parse(RTSP_URL);
 
        try {
            // Specify the IP camera's URL and auth headers.
            _mediaPlayer.setDataSource(context, source, headers);
 
            // Begin the process of setting up a video stream.
            _mediaPlayer.setOnPreparedListener(this);
            _mediaPlayer.prepareAsync();
        }
        catch (Exception e) {}
    }
 
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
 
    }
 
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        _mediaPlayer.release();
    }
 
    private Map<String, String> getRtspHeaders() {
        Map<String, String> headers = new HashMap<String, String>();
        String basicAuthValue = getBasicAuthValue(USERNAME, PASSWORD);
        headers.put("Authorization", basicAuthValue);
        return headers;
    }
 
    private String getBasicAuthValue(String usr, String pwd) {
        String credentials = usr + ":" + pwd;
        int flags = Base64.URL_SAFE | Base64.NO_WRAP;
        byte[] bytes = credentials.getBytes();
        return "Basic " + Base64.encodeToString(bytes, flags);
    }
}
layout

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="ru.himik.nightscream.rtsp_test.MainActivity">
 
    <SurfaceView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/surfaceView"/>
</RelativeLayout>
1
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
04.05.2017, 09:29  [ТС]
_Night_Scream_, вроде все понятно но пока не удается пробиться к видео, можно немного пояснить:

1. этот способ только по протоколу rtsp работает, нужно ли где-то на регистраторе настраивать работу по RTSP?
2. в поле RTSP_URL должен быть указан внешний ip-адрес роутера?
3. порт 554 - это какой-то специальный порт для rtsp или мне нужно указать такой же порт как я указываю в приложении vMEye(ну в ней все работает) которая идет в комплекте с регистратором?
4. после порта и слэша идет v2 - это наименование канала/камеры которое задается пользователем или какое-то внутреннее название потока/канала?

пока, что не пробую пишет в лог не ошибку но такое: D/MediaPlayer: Couldn't open file on client side, trying server side

помогите пожалуйста до конца разобраться?
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
04.05.2017, 09:39
disx
1 учитывая что в ссылке указано rtsp - да, настравивать нужно, тем более что у вас камеры аналоговые и единственный кто может отдать RTSP это регистратор - не факт что он это умеет
2 в этом поле должна быть ссылка - в общем случае это не IP - это нечто вроде того что вам написали
3 это специальный порт, однако, если вы укажите другой порт в настройках устройства раздающего поток, то там будет другой порт
4 то что идет в ссылке специфично для оборудования раздающего поток и должно указываться в документации либо настраиваться
1
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
04.05.2017, 09:58
disx, Во многих регистраторах (DVR), RTSP есть, это надо узнавать не здесь, а у производителя вашего dvr\nvr.

ТС не предоставил ни марки регистратора, ни архитектуры сети, а задаёт глупые вопросы - "в поле RTSP_URL должен быть указан внешний ip-адрес роутера?" Да хоть гугла, откуда ж мы знаем чего у тебя там....

У меня вопрос. Зачем писать свои костыли? Если vMEye хорошая программа.
0
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
04.05.2017, 10:09  [ТС]
_Night_Scream_,

Не по теме:

все понял, больше не беспокою.

0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
04.05.2017, 16:42
disx, у меня в логе такое же сообщение но мое устройство на андроид ниже 4.4 может в этом дело
0
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
04.05.2017, 17:44  [ТС]
vxg, в регистраторе нашел поставил галку использовать RTSP, производитель моего рега любезно предоставляет тип(составляющих) ссылки - "Ссылка на RTSP поток", проверил кинув в VLC плеер, работает.

но в приложении пока все равно не воспроизводится и все так: D/MediaPlayer: Couldn't open file on client side, trying server

на android.developer написано что MediaPlayer h.264 поддерживает...., ковыряюсь дальше.
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
04.05.2017, 18:08
disx, h264 это кодек, например им может быть упакован mp4. RTSP это протокол. Я бы для начала отталкивался от версии андроид которую указали выше
0
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
05.05.2017, 09:28
vxg,disx, а разрешение INTERNET прописан?
Мне единственное что не понравилось это длительность подключения, секунд 10-15.
0
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
05.05.2017, 09:35  [ТС]

Не по теме:

vxg,

Цитата Сообщение от vxg Посмотреть сообщение
RTSP это протокол
вкурсе, это так на сайте производителя написано :)


_Night_Scream_, да разрешение есть...

есть еще такой подход, попробовал но опять же вроде как только API 21, а мне надо на 19-й стартануть...
0
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
05.05.2017, 20:49
Сегодня наткнулся на такую штуку
https://www.videoexpertsgroup.com/player-sdk/
есть видео урок
https://www.youtube.com/watch?v=W4Vj59JlPl0
и есть проект rtsp клиента на этом sdk на github
https://github.com/VideoExpert... RTSPplayer

я думаю это то, что нужно
1
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
06.05.2017, 14:01  [ТС]
_Night_Scream_, да, вроде то что надо...

правда сделал по видеоуроку, не работает пока и не выдает ошибок,... просто висит ProgressDialog.

а в RTSPplayer вкидываю свою ссылку все работает отлично..., буду разбираться.

Добавлено через 9 минут
ВСЕ ОТЛИЧНО РАБОТАЕТ - из примера, адрес с опечаткой вбил,.. спасибо всем огромное!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.05.2017, 14:01
Помогаю со студенческими работами здесь

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

Беспроводные камеры видеонаблюдения существуют?
Всем привет! Интересует такая задача, очень остро стал вопрос об установке видеонаблюдения в частный дом. Беглый поиск по гуглу,...

Чем занять ребенка? Сделать муляж камеры видеонаблюдения)
Вот прислал знакомый ссылку на видео, меня зацепило)) Rws4ap0colA

Как запретить просмотр видео потока на чужом сайте ?
Подскажите пожалуйста, у меня есть код VLC плеера для броузера, вот код &lt;object...

Просмотр видео с ip камеры
У меня есть камера от TRENDNet. Мне нужно получить с неё видео.Максимум что у меня получилось это 3-5 кадров в секунду посредством...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru