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

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

30.04.2017, 11:48. Показов 8801. Ответов 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
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,457
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
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,457
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
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,457
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
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,457
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
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,457
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru