2017-09-30 3 views
0

Java Gstreamer 바인딩 1을 사용하여 디스크에서 오디오 파일을 읽고이 파일의 세그먼트를 디스크에 다시 기록하려고합니다. 이를 위해 "filesrc"요소를 사용할 수 없지만 대신 Gnonlin 플러그인의 "gnlurisource"요소를 사용할 수 있음을 알게되었습니다. 2.Java Gstreamer Gnonlin 소스 세그먼트 화

저는 Gstreamer Java 바인딩을 사용했고 로컬로 컴파일하여 프로젝트에 추가 한 jar 파일을 가져 왔습니다. 또한 다음 명령을 사용하여 우분투에있는 GStreamer를 설치 :

sudo apt-get install libgstreamer1.0-dev 
sudo apt-get install gstreamer1.0-gnonlin 

이 프로그램은 오류없이 컴파일하지만 붙어 남아 있고 아무것도하지 않습니다. 내 프로그램 코드를 첨부 아래 :

import java.util.concurrent.TimeUnit; 
import org.freedesktop.gstreamer.Element; 
import org.freedesktop.gstreamer.ElementFactory; 
import org.freedesktop.gstreamer.Gst; 
import org.freedesktop.gstreamer.Pipeline; 
import org.freedesktop.gstreamer.State; 


public class AudioSegmentation { 

public static void main(String[] args) { 

    Pipeline pipe; 
    Element asr; 
    Element composition; 
    Element gnlsource; 
    Element convert; 
    Element filesink; 

    Gst.init(); 

    pipe = new Pipeline("SimplePipeline"); 
    composition = ElementFactory.make("gnlcomposition", "comp"); 
    gnlsource = ElementFactory.make("gnlurisource", "gnlsource"); 

    convert = ElementFactory.make("audioconvert", "compconvert"); 
    filesink = ElementFactory.make("filesink", "filesink"); 

    gnlsource.set("uri", "file:///home/user/Desktop/file-source.wav"); 
    gnlsource.set("start", TimeUnit.SECONDS.toNanos(5)); 
    gnlsource.set("duration", TimeUnit.SECONDS.toNanos(2)); 

    filesink.set("location", "/home/user/Desktop/file-destination.wav"); 

    composition.link(gnlsource); 
    pipe.addMany(composition, convert, filesink); 
    Element.linkMany(composition, convert, filesink); 

    pipe.setState(State.PLAYING); 
    Gst.main(); 
    Gst.quit(); 

} 

}

내가있는 GStreamer 너무 많은 경험이 없어, 당신은 나에게 무슨 문제에 대한 힌트를 줄 수 있습니까?

감사합니다.

답변

0

업데이트 : 명령 줄에서 gstreamer를 사용하여 오디오 파일에서 세그먼트를 선택할 수있었습니다. "gnlurisource"요소에는 세그먼트 시작 시간을 설정하는 "inpoint"매개 변수와 세그먼트 지속 시간을 지정하는 "duration"이 있습니다. 난 아직도 자바에서이 파이프 라인을 구현하기 위해 노력하고있어

gst-launch-1.0 gnlurisource uri=file:///home/user/Desktop/file-source.wav inpoint=2000000000 duration=1500000000 ! audioconvert ! wavenc ! filesink location=/home/user/Desktop/file-destination.wav 

: 다음은 명령입니다. 나는 그와 비슷한 것을 시도했지만 작동하지 않는다 :

import java.util.concurrent.TimeUnit; 
import org.freedesktop.gstreamer.Element; 
import org.freedesktop.gstreamer.ElementFactory; 
import org.freedesktop.gstreamer.Gst; 
import org.freedesktop.gstreamer.Pipeline; 
import org.freedesktop.gstreamer.State; 


public class AudioSegmentation { 

public static void main(String[] args) { 

    Pipeline pipe; 
    Element gnlsource; 
    Element audioconvert; 
    Element wavenc; 
    Element filesink; 

    Gst.init(); 

    pipe = new Pipeline("SimplePipeline"); 
    gnlurisource = ElementFactory.make("gnlurisource", "gnlurisource"); 
    audioconvert = ElementFactory.make("audioconvert", "audioconvert"); 
    wavenc = ElementFactory.make("wavenc", "wavenc"); 
    filesink = ElementFactory.make("filesink", "filesink"); 

    gnlurisource.set("uri", "file:///home/user/Desktop/file-source.wav"); 
    gnlurisource.set("inpoint", TimeUnit.SECONDS.toNanos(2)); 
    gnlurisource.set("duration", TimeUnit.SECONDS.toNanos(3)); 

    filesink.set("location", "/home/user/Desktop/file-destination.wav"); 

    pipe.addMany(gnlurisource, audioconvert, wavenc, filesink); 
    Element.linkMany(gnlurisource, audioconvert, wavenc, filesink); 

    pipe.setState(State.PLAYING); 
    Gst.main(); 
    Gst.quit(); 

}