Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с видео камерой через J2ME 
V
    Опции темы
Brodyaga
Дата 31.7.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: 2
Всего: 2



Доброго всем времени суток!
Заинтересовал такой вопрос.. Могу ли я через J2ME сделать чтото типа стандартной проги работающей с камерой.
Если точнее, то нужно чтобы на экране отображалось всё что "видит" камера и была кнопка например "Начать запись". При нажатии на эту кнопку камера начинает записывать видео и затем помещает его в память телефона(или если не держит jsr-75, то не помещает smile ).
Возможно ли такое? Если возможно, то в какую сторону смотреть?
PM MAIL   Вверх
javaitek
Дата 1.8.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.5.2009

Репутация: нет
Всего: нет



Работать с камерой возможно при наличии в телефоне Mobile Media API (JSR-135).
В документации к WTK есть два примера:
В обоих примерах ставь Manager.createPlayer("capture://video");

Scenario 10: Capture and Recording
Код

    try {
        // Create a DataSource that captures live audio.
        Player p = Manager.createPlayer("capture://audio");
        p.realize();
        // Get the RecordControl, set the record location, and 
        // start the Player and record for 5 seconds.
        RecordControl rc = (RecordControl)p.getControl("RecordControl");
        rc.setRecordLocation("file:/tmp/audio.wav");
        rc.startRecord();
        p.start();
        Thread.currentThread().sleep(5000);
        p.stop();
        rc.stopRecord();
        rc.commit();
    } catch (IOException ioe) {
    } catch (MediaException me) {
    } catch (InterruptedException e) { }


Scenario 11: Camera
Код

    Player p;
    VideoControl vc;

    // initialize camera 
    try {
        p = Manager.createPlayer("capture://video");
        p.realize();

        // Grab the video control and set it to the current display.
        vc = (VideoControl)p.getControl("VideoControl");
        if (vc != null) {
            Form form = new Form("video");
            form.append((Item)vc.initDisplayMode(vc.USE_GUI_PRIMITIVE, null));
            Display.getDisplay(midlet).setCurrent(form);
        }

        p.start();

        byte[] image = vc.getSnapshot(null);

        // do something with the image ...

    } catch (IOException ioe) {
    } catch (MediaException me) { }


Это сообщение отредактировал(а) javaitek - 1.8.2009, 00:28
PM MAIL   Вверх
Brodyaga
Дата 1.8.2009, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: 2
Всего: 2



Цитата


Код

...
rc.setRecordLocation("file:/tmp/audio.wav");
...



Как я понял, это сохраняется в файловую систему телефона. А jsr-75 для этого не нужен?

PM MAIL   Вверх
javaitek
Дата 1.8.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.5.2009

Репутация: нет
Всего: нет



Цитата
Как я понял, это сохраняется в файловую систему телефона. А jsr-75 для этого не нужен?


jsr-75 обязательно нужен, без него нельзя записать в файловую систему. Однако, обычно, где есть камера (Mobile Media API), там есть и jsr-75.

Вот еще примерчик:

Код

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.List;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import javax.microedition.media.control.RecordControl;
import javax.microedition.media.control.VideoControl;
import javax.microedition.midlet.MIDlet;

/**
 * @author javaitek
 *
 */
public class VideoCam extends MIDlet implements CommandListener {

    Display display;
    Form form = new Form("Video");
    Command exit = new Command("Выход", Command.EXIT, 1);
    Command start = new Command("Начать", Command.ITEM, 1);
    Command stop = new Command("Остановить", Command.ITEM, 1);

    String url;
    Player player;
    VideoControl videoControl;
    Item videoItem;
    RecordControl recordControl;
    String contentType;
    ByteArrayOutputStream outputStream;

    public VideoCam() {
        display = Display.getDisplay(this);
        form.addCommand(exit);
        form.addCommand(start);
        form.setCommandListener(this);
        List list = new List("Тип записи", List.EXCLUSIVE);
        list.append("video", null);
        list.append("audio", null);
        list.addCommand(new Command("Выбрать", Command.ITEM, 1));
        list.setCommandListener(new CommandListener() {
            public void commandAction(Command c, Displayable d) {
                List list = (List) d;
                switch (list.getSelectedIndex()) {
                case 0:
                    url = "capture://video";
                    break;
                case 1:
                    url = "capture://audio";
                    break;
                default:
                    url = "capture://video";
                break;
                }
                form.append(url + "\n");
                display.setCurrent(form);
            }
        });
        display.setCurrent(list);
    }

    public void startApp() {}

    public void pauseApp() {}

    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }

    public void commandAction(Command c, Displayable d) {
        if (c == exit) {
            notifyDestroyed();
        }
        if (c == start) {
            new Thread() {
                public void run() {
                    try {
                        form.removeCommand(start);
                        form.addCommand(stop);
                        player = Manager.createPlayer(url);
                        player.realize();
                        contentType = player.getContentType();
                        form.append(contentType + "\n");
                        videoControl = (VideoControl) player.getControl("VideoControl");
                        if (videoControl != null) {
                            videoItem = (Item) videoControl.initDisplayMode(VideoControl.USE_GUI_PRIMITIVE, null);
                            form.append(videoItem);
                        } else {
                            form.append("No VideoControl" + "\n");
                        }
                        recordControl = (RecordControl) player.getControl("RecordControl");
                        if (recordControl != null) {
                            outputStream = new ByteArrayOutputStream();
                            recordControl.setRecordStream(outputStream);
                            recordControl.startRecord();
                            form.append("Recording..." + "\n");
                        } else {
                            form.append("No RecordControl" + "\n");
                        }
                        player.start();
                    } catch (Exception e) {
                        e.printStackTrace();
                        form.append(e.toString() + "\n");
                    }
                }
            }.start();
        }
        if (c == stop) {
            new Thread() {
                public void run() {
                    try {
                        form.removeCommand(stop);
                        player.stop();
                        if (recordControl != null) {
                            recordControl.stopRecord();
                            recordControl.commit();
                            form.append("Stopped" + "\n");
                        }
                        if (videoItem != null) {
                            for (int i = 0; i < form.size(); i++) {
                                Item item = form.get(i);
                                if (item == videoItem) {
                                    form.delete(i);
                                }
                            }
                        }
                        if (outputStream != null) {
                            InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
                            player = Manager.createPlayer(inputStream, contentType);
                            player.realize();
                            videoControl = (VideoControl) player.getControl("VideoControl");
                            if (videoControl != null) {
                                videoItem = (Item) videoControl.initDisplayMode(VideoControl.USE_GUI_PRIMITIVE, null);
                                form.append(videoItem);
                            }
                            player.start();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        form.append(e.toString() + "\n");
                    }
                }
            }.start();
        }
    }

}


В архиве исходник и готовая прога

Присоединённый файл ( Кол-во скачиваний: 118 )
Присоединённый файл  videocam.zip 7,15 Kb
PM MAIL   Вверх
Brodyaga
Дата 5.8.2009, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: 2
Всего: 2



Спасибо за примеры! буду разбираться...
PM MAIL   Вверх
404NotFound
Дата 29.8.2012, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блуждающий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.2.2010

Репутация: -1
Всего: -1



А подскажите, а возможно ли как то обратиться к вспышке телефона?
--------------------
У меня в кармане крыса,Я нашел ее в лесу!Она мокрая и лысая,Я домой ее несу!Зайдите на минутке
PM MAIL WWW ICQ   Вверх
tweener
Дата 11.9.2012, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.9.2012

Репутация: 1
Всего: 1



Цитата(404NotFound @ 29.8.2012,  12:00)
А подскажите, а возможно ли как то обратиться к вспышке телефона?

JSR-234 (Advanced Multimedia Supplements):

javax.microedition.amms.control.camera

Interface FlashControl

Цитата
FlashControl controls the flash of the camera device.

When the flash is on (mode is not OFF), the flash is used when the snapshots are taken. Setting up the flash usually takes some time so when the flash is used and a snapshot is taken either by VideoControl or SnapshotControl, the exact time when the snapshot will be taken depends on the flash device. If the flash device will not be able to flash, for instance, because the battery of the device cannot charge the flash, taking the snapshot will result in an error.

The default mode for flash is OFF. 

PM MAIL   Вверх
404NotFound
Дата 15.9.2012, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блуждающий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.2.2010

Репутация: -1
Всего: -1



Спасибо! Буду пробовать!
--------------------
У меня в кармане крыса,Я нашел ее в лесу!Она мокрая и лысая,Я домой ее несу!Зайдите на минутке
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0856 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.