forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Программирование (http://forum.boolean.name/forumdisplay.php?f=54)
-   -   Воспроизведение видео? (http://forum.boolean.name/showthread.php?t=1440)

@lex 05.09.2006 19:32

Воспроизведение видео?
 
Привет всем!
Хотел спросить по поводу воспроизведения видео...

Сам проект пишу на MIDlet pascal, на Java написан только класс использования плэера, вот его основная функция:
Код:

public static int open_url(String url) {
int res = 1;
try {
close_player();
play = (Player) Manager.createPlayer(url);
play.realize();
vc = (VolumeControl) play.getControl("VolumeControl");
vid = null;
vid = (VideoControl) play.getControl("VideoControl");
if (vid != null) {
        res = 2;
        vid.initDisplayMode(vid.USE_GUI_PRIMITIVE, null);
        }
if (play.getState() != play.REALIZED) {res = 0;}
play.prefetch();
vc.setLevel(50);
if (play.getState() != play.PREFETCHED) {res = 0;}
} catch (Exception e) {res = 0;}
return res;
}

Аудио воспроизводится номально, а из видео играет только звук. Если использовать режим воспроизведения USE_DIRECT_VIDEO с
Canvas`ом (как это описано в документации), то функция возвращает ноль :(
Так вот, что нужно дописать/переписать в районе строки "vid.initDisplayMode(vid.USE_GUI_PRIMITIVE, null);", чтобы можно было
видеть изображение и как его можно скрыть и заново показать?

Заранее благодарен.

P.S.: Проект для телефонов Siemens х75

Piligrim 06.09.2006 01:47

Re: Воспроизведение видео?
 
Не нашел у себя такой доки. Но я не вижу где плэеру показывается куда выводить видео. Или он использует текущий Displayable?

@lex 06.09.2006 15:23

Re: Воспроизведение видео?
 
Ну, вобщем-то да.
Просто я вобще не понял, как это указать, поэтому вот и спрашиваю.
В любом случае телефон видимо не поддерживает USE_DIRECT_VIDEO, а с использованием GUI PRIMITIVE как нибудь можно вывести изображение без использования форм, а просто в заданном месте?

Piligrim 07.09.2006 11:22

Re: Воспроизведение видео?
 
сбрось доку класса, что-ли. я же говорю слабо понимаю суть. у меня нет таких классов.

@lex 07.09.2006 17:33

Re: Воспроизведение видео?
 
В примере простого плэера описано что-то вобще не понятное, оно у меня так и не скомпилилось:
Код:

try {
    Player p = Manager.createPlayer("http://abc.mpg");
    p.realize();
    VideoControl vc;
    if ((vc = (VideoControl)p.getControl("VideoControl")) != null)
        add((Component)vc.initDisplayMode(vc.USE_GUI_PRIMITIVE, null));
    p.start();
 } catch (MediaException pe) {
 } catch (IOException ioe) {
 }

В описаниях GUIControl описан метод использования формы, что меня не устраивает:
Код:

try {
      Player p = Manager.createPlayer("http://abc.mpg");
      p.realize();
      GUIControl gc;
      if ((gc = (GUIControl)p.getControl("GUIControl")) != null) {
          Form form = new Form("My GUI");
          form.append((Item)gc.initDisplayMode(GUIControl.USE_GUI_PRIMITIVE, null));
          Display.getDisplay(midlet).setCurrent(form);
      }
      p.start();
  } catch (MediaException pe) {
  } catch (IOException ioe) {
  }

В описании VideoControl описан метод с использованием Canvas, с ним вроде как всё ясно, но телефон не захотел играть вообще :(
Код:

javax.microedition.lcdui.Canvas canvas;
      :
  try {
      Player p = Manager.createPlayer("http://abc.mpg");
      p.realize();
      VideoControl vc;
      if ((vc = (VideoControl)p.getControl("VideoControl")) != null)
          vc.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, canvas));
      vc.setVisible(true);
      p.start();
  } catch (MediaException pe) {
  } catch (IOException ioe) {
  }

Попытался сделать всё также , только прописать Use_GUI_PRIMITIVE - изображения нет.

Вот полный исходник библиотеки:
Код:

import javax.microedition.media.*;
import javax.microedition.media.control.*;

public class Lib_xplay {

  private static Player play;
  private static VolumeControl vc;
  private static VideoControl vid;

public static int open_url(String url) {
int res = 1;
try {
close_player();
play = (Player) Manager.createPlayer(url);
play.realize();
vc = (VolumeControl) play.getControl("VolumeControl");
vid = null;
vid = (VideoControl) play.getControl("VideoControl");
if (vid != null) {
        res = 2;
        vid.initDisplayMode(vid.USE_GUI_PRIMITIVE, null);
        }
if (play.getState() != play.REALIZED) {res = 0;}
play.prefetch();
vc.setLevel(50);
if (play.getState() != play.PREFETCHED) {res = 0;}
} catch (Exception e) {res = 0;}
return res;
}

public static void setvolume (int vol) {
if(vc != null) {vc.setLevel(vol);}}


public static int start_play() {
try {play.start(); return 1;} catch (MediaException e) {return 0;}}

public static int stop_play()
{ try { if(play != null && play.getState() == play.STARTED) {
play.stop(); return 1;} else return 0; } catch (MediaException e) {return 0;}}


public static void close_player() {
try {
if (play != null) {
        if(play.getState() == play.STARTED) {
            play.stop();
        }
        if(play.getState() == play.PREFETCHED) {
            play.deallocate();
        }
        if(play.getState() == play.REALIZED ||
          play.getState() == play.UNREALIZED) {
            play.close();
        }
      } } catch (Exception e) {}
      play = null; }

public static int is_playing()
{ if(play != null && play.getState() == play.STARTED) {return 1;} else return 0; }

public static void vis_video(int bl) {
if (bl != 0) { vid.setVisible(true); } else { vid.setVisible(false); } }

}

Но в нём явно не хватает определения метода вывода изображения.

Piligrim 08.09.2006 01:26

Re: Воспроизведение видео?
 
уже лучше. а под какие тела API?

@lex 08.09.2006 09:44

Re: Воспроизведение видео?
 
Вложений: 2
Под тела, в смысле девайсы? Под Siemens. Но тут дело наверное не этом. Я хочу понять, можно ли как-нибудь использовать USE_GUI_PRIMITIVE без формы и не в полноэкранном режиме.
Вложил mmapi-документацию по J2ME WTK, все примеры взяты из неё

@lex 12.09.2006 10:36

Re: Воспроизведение видео?
 
Чем больше пытаюсь разобраться, тем больше убеждаюсь, что MP - полное не очень :)
В итоге начал перенос кодов на J2ME WTK...

...Несколько вопросов полностью не соответствуют заголовку темы, но не хочется по пустякам штамповать новые:

1. Как в Java заставить находить переменные и функции, определённые в других файлах проекта, не приписывая каждый раз так: <имя_файла>.<переменная> ?

2. Как можно импортировать в проект библиотеки для MIDlet pascal :) ?


Часовой пояс GMT +4, время: 12:45.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot