Pomoc s upravou kodu v jave (Gstreamer-java) – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Pomoc s upravou kodu v jave (Gstreamer-java) – Java – Fórum – Programujte.comPomoc s upravou kodu v jave (Gstreamer-java) – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
sleepy
~ Anonymní uživatel
422 příspěvků
21. 5. 2011   #1
-
0
-

Dobry den, mohli by ste mi pomoct s touto castou kodu:



class VideoPlayer{

private PlayBin player;
private Element videosink;
private Bus bus;

public VideoPlayer(final Canvas can){
Gst.init();

this.player = new PlayBin("Player",new File("/path/to/videofile.avi").toURI());
this.videosink = ElementFactory.make("xvimagesink", "dest");
this.player.setVideoSink(videosink);
this.bus = player.getBus();
//Sem este treba dopisat kod pre prehravanie v Canvase pod Win
bus.setSyncHandler(new BusSyncHandler() {
public BusSyncReply syncMessage(Message msg) {
Structure s = msg.getStructure();
if (s == null || !s.hasName("prepare-xwindow-id"))
return BusSyncReply.PASS;
XOverlay.wrap(videosink).setWindowID(can);
return BusSyncReply.DROP;
}
});
player.play();

}

}

class VideoFrameCatcher{

private BufferedImage currentImage = null;
private PlayBin2 player = null;
Semaphore sem;


public VideoFrameCatcher() {
Gst.init();
player = new PlayBin2("VideoFrameCatcher");

player.setAudioSink(null);
sem = new Semaphore(0);

RGBDataSink.Listener listener1 = new RGBDataSink.Listener() {
public void rgbFrame(int w, int h, IntBuffer rgbPixels) {

System.out.println(" -> Got a frame:");
currentImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_BGR);
currentImage.setRGB(0, 0, w, h, rgbPixels.array(), 0, w);
sem.release();


}
};

RGBDataSink videoSink = new RGBDataSink("rgb", listener1);
player.setVideoSink(videoSink);
}

public void setInputVideoFile(File inputVideoFile) {
player.setInputFile(inputVideoFile);
}

public BufferedImage CatchFrameAt(long time) throws InterruptedException{
player.pause();

player.getState();
player.seek(time, TimeUnit.MILLISECONDS);
player.play();
sem.acquire();
player.pause();
return this.currentImage;
}

}

class VideoController implements Runnable{
ImageStack imgS;
long step=60;
VideoFrameCatcher vidCatch;
private Thread vid;

public VideoController(ImageStack imgS){
this.vid = new Thread(this, "VideoThread");
this.imgS = imgS;
this.vid.start();
}

public VideoController(ImageStack imgS, long step){
this.vid = new Thread(this, "VideoThread");
this.imgS = imgS;
this.step = step;
this.vid.start();
}

public void run(){
this.vidCatch = new VideoFrameCatcher();
File videoFile = new File("/path/to/videofile.avi");
this.vidCatch.setInputVideoFile(videoFile);
int pos=0;
//Namiesto pos<12 tu bude nieco ako bin.EOS()
while(pos<12){
try {
imgS.putImageToArray(vidCatch.CatchFrameAt(pos*step), pos*step);
} catch (InterruptedException ex) {
Logger.getLogger(VideoController.class.getName()).log(Level.SEVERE, null, ex);
}
pos++;
}

}
}

Ako vidite moj kod je dost neohrabany. Potreboval by som ho zapisat trocha elegantnejsie. V tomto programe potrebujem aby mi bol schopny prehrat cele video v Canvase, co robi class VideoPlayer a aby mi dokazal zachytavat obrazky v urcitych casovych intervaloch toho isteho videa. Samozrejme nie sucasne s prehravanim videa, kazda cast bude cakat na Event ktory ju vyvola. Za Vase reakcie vopred dakujem.

Nahlásit jako SPAM
IP: 158.195.217.–
Reklama
Reklama
liborb
~ Redaktor
+18
Guru
25. 5. 2011   #2
-
0
-

Elegance je zajímá až ve chvíli, kdy dosáhneš funkčnosti ... takže ... co ti nefunguje?

Nahlásit jako SPAM
IP: 78.80.52.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
26. 5. 2011   #3
-
0
-

To liborb : Dobry den, no ono v podstate funguje vsetko ako ma, teda aspon zatial. Len ako ste si mohli vsimnut tak volam tri classy, kde vo dvoch z nich volam triedu PlayBin a do obi dvoch odosielam ten isty argument File. Tak by som chcel napr. namiesto troch classov vytvorit jeden a trocha to poupravovat nech to nie je take nepriehladne. Sice uz nieco mam ale stale to nie je ono.

Nahlásit jako SPAM
IP: 158.195.217.–
liborb
~ Redaktor
+18
Guru
27. 5. 2011   #4
-
0
-

Pokud to chceš udělat jako jednu třídu, tak to tak udělej. Tvůj kód jsem samozřejmě detailně nestudoval, tudíž mi nepřipadá nijak zvláštní.

Nahlásit jako SPAM
IP: 78.80.52.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 37 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý