Added frame grabber
This commit is contained in:
parent
b6adc5c402
commit
06861e1658
2 changed files with 171 additions and 104 deletions
|
|
@ -1,12 +1,14 @@
|
||||||
package zall;
|
package zall;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
import javax.servlet.ServletConfig;
|
import javax.servlet.ServletConfig;
|
||||||
import javax.servlet.http.HttpServlet;
|
import javax.servlet.http.HttpServlet;
|
||||||
|
|
||||||
|
|
@ -25,6 +27,8 @@ import com.xuggle.xuggler.ICodec;
|
||||||
import com.xuggle.xuggler.IStreamCoder;
|
import com.xuggle.xuggler.IStreamCoder;
|
||||||
import com.xuggle.xuggler.IVideoPicture;
|
import com.xuggle.xuggler.IVideoPicture;
|
||||||
import com.xuggle.xuggler.IVideoResampler;
|
import com.xuggle.xuggler.IVideoResampler;
|
||||||
|
import com.xuggle.xuggler.video.ConverterFactory;
|
||||||
|
import com.xuggle.xuggler.video.IConverter;
|
||||||
|
|
||||||
import zall.bean.Media.Size;
|
import zall.bean.Media.Size;
|
||||||
import zall.bean.Video;
|
import zall.bean.Video;
|
||||||
|
|
@ -127,7 +131,7 @@ public class ZalleryTranscoder extends HttpServlet{
|
||||||
///////////// Start Transcoding
|
///////////// Start Transcoding
|
||||||
// create a media reader
|
// create a media reader
|
||||||
IMediaReader reader = ToolFactory.makeReader( originalFile.getPath() );
|
IMediaReader reader = ToolFactory.makeReader( originalFile.getPath() );
|
||||||
reader.addListener(new FrameGrabListener(reader, 0.2));
|
reader.addListener(new FrameGrabListener(reader, smallFile, 0.2));
|
||||||
reader.addListener(new ProgressListener(reader));
|
reader.addListener(new ProgressListener(reader));
|
||||||
|
|
||||||
VideoTranscoderListener converter = new VideoTranscoderListener(640, 360);
|
VideoTranscoderListener converter = new VideoTranscoderListener(640, 360);
|
||||||
|
|
@ -221,28 +225,22 @@ class VideoTranscoderListener extends MediaToolAdapter{
|
||||||
private IVideoResampler videoResampler = null;
|
private IVideoResampler videoResampler = null;
|
||||||
private IAudioResampler audioResampler = null;
|
private IAudioResampler audioResampler = null;
|
||||||
|
|
||||||
IMediaWriter writer;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAddStream(IAddStreamEvent event) {
|
public void onAddStream(IAddStreamEvent event) {
|
||||||
int streamIndex = event.getStreamIndex();
|
int streamIndex = event.getStreamIndex();
|
||||||
IStreamCoder streamCoder = event.getSource().getContainer().getStream(streamIndex).getStreamCoder();
|
IStreamCoder streamCoder = event.getSource().getContainer().getStream(streamIndex).getStreamCoder();
|
||||||
if (streamCoder.getCodecType() == ICodec.Type.CODEC_TYPE_AUDIO) {
|
if (streamCoder.getCodecType() == ICodec.Type.CODEC_TYPE_AUDIO) {
|
||||||
//writer.addAudioStream(streamIndex, streamIndex, ICodec.ID.CODEC_ID_AAC, 2, 44100);
|
|
||||||
streamCoder.setSampleRate( 44100 );
|
streamCoder.setSampleRate( 44100 );
|
||||||
/*
|
//streamCoder.setCodec( ICodec.ID.CODEC_ID_AAC );
|
||||||
streamCoder.setCodec( ICodec.ID.CODEC_ID_AAC );
|
//streamCoder.setBitRate( 128 );
|
||||||
streamCoder.setBitRate( 128 );
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
else if (streamCoder.getCodecType() == ICodec.Type.CODEC_TYPE_VIDEO) {
|
else if (streamCoder.getCodecType() == ICodec.Type.CODEC_TYPE_VIDEO) {
|
||||||
//writer.addVideoStream(streamIndex, streamIndex, ICodec.ID.CODEC_ID_H264, VIDEO_WIDTH, VIDEO_HEIGHT);
|
|
||||||
streamCoder.setWidth( width );
|
streamCoder.setWidth( width );
|
||||||
streamCoder.setHeight( height );
|
streamCoder.setHeight( height );
|
||||||
|
|
||||||
/*
|
//streamCoder.setCodec(ICodec.findEncodingCodec( ICodec.ID.CODEC_ID_H264 ));
|
||||||
streamCoder.setCodec(ICodec.findEncodingCodec( ICodec.ID.CODEC_ID_H264 ));
|
//streamCoder.setBitRate( 800000 );
|
||||||
streamCoder.setBitRate( 500000 );
|
/*
|
||||||
int retval = Configuration.configure("/usr/local/xuggler/share/ffmpeg/libx264-superfast.ffpreset", streamCoder);
|
int retval = Configuration.configure("/usr/local/xuggler/share/ffmpeg/libx264-superfast.ffpreset", streamCoder);
|
||||||
if (retval<0)
|
if (retval<0)
|
||||||
throw new RuntimeException("cound not cofigure coder from preset file");
|
throw new RuntimeException("cound not cofigure coder from preset file");
|
||||||
|
|
@ -323,21 +321,38 @@ class ProgressListener extends MediaToolAdapter {
|
||||||
class FrameGrabListener extends MediaToolAdapter {
|
class FrameGrabListener extends MediaToolAdapter {
|
||||||
private long totalLength;
|
private long totalLength;
|
||||||
private long grabAt;
|
private long grabAt;
|
||||||
|
private File outputFile;
|
||||||
|
|
||||||
public FrameGrabListener(IMediaReader reader, double at) {
|
public FrameGrabListener(IMediaReader reader, File outputFile, double at) {
|
||||||
if( !reader.isOpen() )
|
if( !reader.isOpen() )
|
||||||
reader.open(); // read container
|
reader.open(); // read container
|
||||||
this.totalLength = reader.getContainer().getDuration();
|
this.totalLength = reader.getContainer().getDuration();
|
||||||
|
this.outputFile = outputFile;
|
||||||
setAtProgress(at);
|
setAtProgress(at);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onVideoPicture(IVideoPictureEvent event) {
|
public void onVideoPicture(IVideoPictureEvent event) {
|
||||||
long currentLength = event.getTimeStamp();
|
try{
|
||||||
|
long currentLength = event.getTimeStamp();
|
||||||
if( grabAt > 0 && currentLength > grabAt ){
|
|
||||||
System.out.println("\nScreanshoot!!!");
|
if( grabAt > 0 && currentLength > grabAt ){
|
||||||
grabAt = -1;
|
System.out.println("\nScreanshoot!!!");
|
||||||
|
|
||||||
|
ConverterFactory.Type mConverterType = ConverterFactory.findRegisteredConverter(
|
||||||
|
ConverterFactory.XUGGLER_BGR_24);
|
||||||
|
IConverter mVideoConverter = ConverterFactory.createConverter(
|
||||||
|
mConverterType.getDescriptor(),
|
||||||
|
event.getPicture());
|
||||||
|
|
||||||
|
ImageIO.write(
|
||||||
|
mVideoConverter.toImage(event.getPicture()),
|
||||||
|
"png",
|
||||||
|
outputFile);
|
||||||
|
grabAt = -1;
|
||||||
|
}
|
||||||
|
}catch(IOException e){
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -346,3 +361,4 @@ class FrameGrabListener extends MediaToolAdapter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,47 +1,62 @@
|
||||||
|
/*
|
||||||
|
javac -cp xuggle-xuggler-5.4.jar Transcoder.java
|
||||||
|
java -cp xuggle-xuggler-5.4.jar:./:slf4j-api-1.6.4.jar Transcoder
|
||||||
|
|
||||||
|
http://whaticode.com/2010/04/30/use-java-to-convert-any-media-type-to-flv-with-xuggler-part-2/
|
||||||
|
*/
|
||||||
package zall.util.test;
|
package zall.util.test;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
import com.xuggle.mediatool.IMediaReader;
|
import com.xuggle.mediatool.IMediaReader;
|
||||||
import com.xuggle.mediatool.IMediaWriter;
|
import com.xuggle.mediatool.IMediaWriter;
|
||||||
import com.xuggle.mediatool.MediaListenerAdapter;
|
|
||||||
import com.xuggle.mediatool.MediaToolAdapter;
|
import com.xuggle.mediatool.MediaToolAdapter;
|
||||||
import com.xuggle.mediatool.ToolFactory;
|
import com.xuggle.mediatool.ToolFactory;
|
||||||
import com.xuggle.mediatool.event.IAddStreamEvent;
|
import com.xuggle.mediatool.event.IAddStreamEvent;
|
||||||
|
import com.xuggle.mediatool.event.AudioSamplesEvent;
|
||||||
|
import com.xuggle.mediatool.event.IAudioSamplesEvent;
|
||||||
import com.xuggle.mediatool.event.IVideoPictureEvent;
|
import com.xuggle.mediatool.event.IVideoPictureEvent;
|
||||||
import com.xuggle.mediatool.event.VideoPictureEvent;
|
import com.xuggle.mediatool.event.VideoPictureEvent;
|
||||||
import com.xuggle.xuggler.Configuration;
|
|
||||||
import com.xuggle.xuggler.ICodec;
|
import com.xuggle.xuggler.ICodec;
|
||||||
import com.xuggle.xuggler.IContainer;
|
|
||||||
import com.xuggle.xuggler.IStream;
|
|
||||||
import com.xuggle.xuggler.IStreamCoder;
|
import com.xuggle.xuggler.IStreamCoder;
|
||||||
import com.xuggle.xuggler.IVideoPicture;
|
import com.xuggle.xuggler.IVideoPicture;
|
||||||
import com.xuggle.xuggler.IVideoResampler;
|
import com.xuggle.xuggler.IVideoResampler;
|
||||||
|
import com.xuggle.xuggler.IAudioSamples;
|
||||||
|
import com.xuggle.xuggler.IAudioResampler;
|
||||||
|
import com.xuggle.xuggler.video.IConverter;
|
||||||
|
import com.xuggle.xuggler.video.ConverterFactory;
|
||||||
|
|
||||||
|
|
||||||
public class Transcoder {
|
public class Transcoder {
|
||||||
public static void main(String[] args){
|
public static void main(String[] args){
|
||||||
File originalFile = new File( "C:\\Users\\Ziver\\Desktop\\Downloads\\test2.mp4" );
|
File originalFile = new File( "test2.mp4" );
|
||||||
File mediumFile = new File( "C:\\Users\\Ziver\\Desktop\\Downloads\\temp\\test2_medium.mp4" );
|
File mediumFile = new File( "test2_medium.mp4" );
|
||||||
File smallFile = new File( "C:\\Users\\Ziver\\Desktop\\Downloads\\temp\\test2_small.png" );
|
File smallFile = new File( "test2_small.png" );
|
||||||
|
|
||||||
|
//ConvertVideo tmp = new ConvertVideo(originalFile, mediumFile);
|
||||||
|
//tmp.run();
|
||||||
|
//return;
|
||||||
|
|
||||||
///////////// Start Transcoding
|
///////////// Start Transcoding
|
||||||
// create a media reader
|
// create a media reader
|
||||||
IMediaReader reader = ToolFactory.makeReader( originalFile.getPath() );
|
IMediaReader reader = ToolFactory.makeReader( originalFile.getPath() );
|
||||||
reader.open();
|
reader.addListener(new FrameGrabListener(reader, smallFile, 0.2));
|
||||||
|
reader.addListener(new ProgressListener(reader));
|
||||||
|
|
||||||
|
VideoTranscoderListener converter = new VideoTranscoderListener(480, 270);
|
||||||
|
reader.addListener(converter);
|
||||||
|
|
||||||
// create a media writer
|
// create a media writer
|
||||||
IMediaWriter mediaWriter = ToolFactory.makeWriter(mediumFile.getPath(), reader);
|
IMediaWriter writer = ToolFactory.makeWriter(mediumFile.getPath(), reader);
|
||||||
// add a writer to the reader, to create the output file
|
converter.addListener(writer);
|
||||||
reader.addListener(mediaWriter);
|
|
||||||
|
|
||||||
mediaWriter.addListener(new Resizer(450, 295));
|
|
||||||
mediaWriter.addListener(new CodecChanger());
|
|
||||||
mediaWriter.addListener(new ProgressListener(reader.getContainer()));
|
|
||||||
|
|
||||||
// create a media viewer with stats enabled for debugging
|
// create a media viewer with stats enabled for debugging
|
||||||
//IMediaViewer mediaViewer = ToolFactory.makeViewer(true);
|
|
||||||
// add a viewer to the reader, to see the decoded media
|
// add a viewer to the reader, to see the decoded media
|
||||||
|
//IMediaViewer mediaViewer = ToolFactory.makeViewer(true);
|
||||||
//reader.addListener(mediaViewer);
|
//reader.addListener(mediaViewer);
|
||||||
|
//writer.addListener(mediaViewer);
|
||||||
|
|
||||||
// read and decode packets from the source file and
|
// read and decode packets from the source file and
|
||||||
// and dispatch decoded audio and video to the writer
|
// and dispatch decoded audio and video to the writer
|
||||||
|
|
@ -54,29 +69,53 @@ public class Transcoder {
|
||||||
mediumFile.delete();
|
mediumFile.delete();
|
||||||
smallFile.delete();
|
smallFile.delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("Done!");
|
System.out.println("\n\nDone!");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class VideoTranscoderListener extends MediaToolAdapter{
|
||||||
|
private int width;
|
||||||
|
private int height;
|
||||||
|
|
||||||
class Resizer extends MediaToolAdapter {
|
public VideoTranscoderListener(int width, int height) {
|
||||||
private Integer width;
|
this.width = width;
|
||||||
private Integer height;
|
this.height = height;
|
||||||
|
}
|
||||||
|
|
||||||
private IVideoResampler videoResampler = null;
|
private IVideoResampler videoResampler = null;
|
||||||
|
private IAudioResampler audioResampler = null;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAddStream(IAddStreamEvent event) {
|
||||||
|
int streamIndex = event.getStreamIndex();
|
||||||
|
IStreamCoder streamCoder = event.getSource().getContainer().getStream(streamIndex).getStreamCoder();
|
||||||
|
if (streamCoder.getCodecType() == ICodec.Type.CODEC_TYPE_AUDIO) {
|
||||||
|
streamCoder.setSampleRate( 44100 );
|
||||||
|
//streamCoder.setCodec( ICodec.ID.CODEC_ID_AAC );
|
||||||
|
//streamCoder.setBitRate( 128 );
|
||||||
|
}
|
||||||
|
else if (streamCoder.getCodecType() == ICodec.Type.CODEC_TYPE_VIDEO) {
|
||||||
|
streamCoder.setWidth( width );
|
||||||
|
streamCoder.setHeight( height );
|
||||||
|
|
||||||
public Resizer(Integer aWidth, Integer aHeight) {
|
//streamCoder.setCodec(ICodec.findEncodingCodec( ICodec.ID.CODEC_ID_H264 ));
|
||||||
this.width = aWidth;
|
//streamCoder.setBitRate( 800000 );
|
||||||
this.height = aHeight;
|
/*
|
||||||
|
int retval = Configuration.configure("/usr/local/xuggler/share/ffmpeg/libx264-superfast.ffpreset", streamCoder);
|
||||||
|
if (retval<0)
|
||||||
|
throw new RuntimeException("cound not cofigure coder from preset file");
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
super.onAddStream(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onVideoPicture(IVideoPictureEvent event) {
|
public void onVideoPicture(IVideoPictureEvent event) {
|
||||||
IVideoPicture pic = event.getPicture();
|
IVideoPicture pic = event.getPicture();
|
||||||
if (videoResampler == null) {
|
if (videoResampler == null) {
|
||||||
videoResampler = IVideoResampler.make(width, height, pic.getPixelType(), pic.getWidth(), pic
|
videoResampler = IVideoResampler.make(width, height, pic.getPixelType(), pic.getWidth(), pic.getHeight(), pic.getPixelType());
|
||||||
.getHeight(), pic.getPixelType());
|
|
||||||
}
|
}
|
||||||
IVideoPicture out = IVideoPicture.make(pic.getPixelType(), width, height);
|
IVideoPicture out = IVideoPicture.make(pic.getPixelType(), width, height);
|
||||||
videoResampler.resample(out, pic);
|
videoResampler.resample(out, pic);
|
||||||
|
|
@ -85,20 +124,45 @@ class Resizer extends MediaToolAdapter {
|
||||||
super.onVideoPicture(asc);
|
super.onVideoPicture(asc);
|
||||||
out.delete();
|
out.delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAudioSamples(IAudioSamplesEvent event) {
|
||||||
|
IAudioSamples samples = event.getAudioSamples();
|
||||||
|
if (audioResampler == null) {
|
||||||
|
audioResampler = IAudioResampler.make(2, samples.getChannels(), 44100, samples.getSampleRate());
|
||||||
|
}
|
||||||
|
if (event.getAudioSamples().getNumSamples() > 0) {
|
||||||
|
IAudioSamples out = IAudioSamples.make(samples.getNumSamples(), samples.getChannels());
|
||||||
|
audioResampler.resample(out, samples, samples.getNumSamples());
|
||||||
|
|
||||||
|
AudioSamplesEvent asc = new AudioSamplesEvent(event.getSource(), out, event.getStreamIndex());
|
||||||
|
super.onAudioSamples(asc);
|
||||||
|
out.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class ProgressListener extends MediaToolAdapter {
|
class ProgressListener extends MediaToolAdapter {
|
||||||
private long currentLength;
|
private long currentLength;
|
||||||
private long totalLength;
|
private long totalLength;
|
||||||
|
private int progress = -1;
|
||||||
|
|
||||||
public ProgressListener(IContainer c) {
|
public ProgressListener(IMediaReader reader) {
|
||||||
this.totalLength = c.getDuration();
|
if( !reader.isOpen() )
|
||||||
|
reader.open(); // read container
|
||||||
|
this.totalLength = reader.getContainer().getDuration();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onVideoPicture(IVideoPictureEvent event) {
|
public void onVideoPicture(IVideoPictureEvent event) {
|
||||||
currentLength = event.getTimeStamp();
|
currentLength = event.getTimeStamp();
|
||||||
System.out.println(currentLength+" / "+totalLength+" - "+getProgress());
|
|
||||||
|
if( (int)(100*getProgress()) != progress ){
|
||||||
|
progress = (int)(100*getProgress());
|
||||||
|
System.out.print("\n"+(int)(100*getProgress())+"% ");
|
||||||
|
}
|
||||||
|
else System.out.print(".");
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getProcessedLength(){
|
public long getProcessedLength(){
|
||||||
|
|
@ -109,66 +173,53 @@ class ProgressListener extends MediaToolAdapter {
|
||||||
return totalLength;
|
return totalLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getProgress(){
|
public double getProgress(){
|
||||||
return (int)(((double)currentLength/totalLength)*100);
|
if(totalLength > 0)
|
||||||
|
return ((double)currentLength/totalLength);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class CodecChanger extends MediaListenerAdapter {
|
class FrameGrabListener extends MediaToolAdapter {
|
||||||
/*
|
private long totalLength;
|
||||||
* HTML5
|
private long grabAt;
|
||||||
* video codec - avc1.42E01E i.e. H.264/MPEG-4 AVC
|
private File outputFile;
|
||||||
* audio codec - mp4a.40.2 i.e. MPEG-4 AAC LC
|
|
||||||
*/
|
public FrameGrabListener(IMediaReader reader, File outputFile, double at) {
|
||||||
|
if( !reader.isOpen() )
|
||||||
|
reader.open(); // read container
|
||||||
public void onAddStream(IAddStreamEvent event) {
|
this.totalLength = reader.getContainer().getDuration();
|
||||||
// put your stream specific configuration code here
|
this.outputFile = outputFile;
|
||||||
// you can get the container from the writer and
|
setAtProgress(at);
|
||||||
// get the specific stream from the container using
|
|
||||||
// the stream index in the event
|
|
||||||
int streamIndex = event.getStreamIndex();
|
|
||||||
IStream stream = event.getSource().getContainer().getStream(streamIndex);
|
|
||||||
ICodec.Type codecType = stream.getStreamCoder().getCodecType();
|
|
||||||
|
|
||||||
if(codecType == ICodec.Type.CODEC_TYPE_AUDIO){
|
|
||||||
applyAudioSettings(stream);
|
|
||||||
} else {
|
|
||||||
applyVideoSettings(stream);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyVideoSettings(IStream stream) {
|
@Override
|
||||||
IStreamCoder coder = stream.getStreamCoder();
|
public void onVideoPicture(IVideoPictureEvent event) {
|
||||||
coder.setCodec(ICodec.ID.CODEC_ID_H264);
|
try{
|
||||||
coder.setBitRate( 500000 );
|
long currentLength = event.getTimeStamp();
|
||||||
|
|
||||||
//IVideoResampler.make(outWidth, outHeight, outContainer.getPixelType(), inContainer.getWidth(), inContainer.getHeight(), inContainer.getPixelType());
|
if( grabAt > 0 && currentLength > grabAt ){
|
||||||
|
System.out.println("\nScreanshoot!!!");
|
||||||
|
|
||||||
|
ConverterFactory.Type mConverterType = ConverterFactory.findRegisteredConverter(
|
||||||
|
ConverterFactory.XUGGLER_BGR_24);
|
||||||
|
IConverter mVideoConverter = ConverterFactory.createConverter(
|
||||||
|
mConverterType.getDescriptor(),
|
||||||
|
event.getPicture());
|
||||||
|
|
||||||
|
ImageIO.write(
|
||||||
|
mVideoConverter.toImage(event.getPicture()),
|
||||||
|
"png",
|
||||||
|
outputFile);
|
||||||
|
grabAt = -1;
|
||||||
|
}
|
||||||
|
}catch(IOException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyAudioSettings(IStream stream) {
|
public void setAtProgress(double procent){
|
||||||
IStreamCoder coder = stream.getStreamCoder();
|
grabAt = (long)(totalLength * procent);
|
||||||
// ICodec.ID.CODEC_ID_MP3
|
}
|
||||||
coder.setCodec( ICodec.ID.CODEC_ID_AAC );
|
}
|
||||||
//coder.setSampleRate( 44000 );
|
|
||||||
coder.setBitRate( 128 );
|
|
||||||
|
|
||||||
//IAudioResampler.make(out.getChannels(), in.getChannels(), out.getSampleRate(), in.getSampleRate());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class SetVideoTranscodeListener extends MediaToolAdapter {
|
|
||||||
@Override
|
|
||||||
public void onAddStream(IAddStreamEvent event) {
|
|
||||||
int streamIndex = event.getStreamIndex();
|
|
||||||
IStreamCoder streamCoder = event.getSource().getContainer().getStream(streamIndex).getStreamCoder();
|
|
||||||
|
|
||||||
if (streamCoder.getCodecType() == ICodec.Type.CODEC_TYPE_VIDEO) {
|
|
||||||
streamCoder.setCodec(ICodec.findEncodingCodec(ICodec.ID.CODEC_ID_H264));
|
|
||||||
int retval = Configuration.configure("/usr/local/xuggler/share/ffmpeg/libx264-superfast.ffpreset", streamCoder);
|
|
||||||
if (retval<0)
|
|
||||||
throw new RuntimeException("cound not cofigure coder from preset file");
|
|
||||||
}
|
|
||||||
super.onAddStream(event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue