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;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.servlet.ServletConfig;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
|
||||
|
|
@ -25,6 +27,8 @@ import com.xuggle.xuggler.ICodec;
|
|||
import com.xuggle.xuggler.IStreamCoder;
|
||||
import com.xuggle.xuggler.IVideoPicture;
|
||||
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.Video;
|
||||
|
|
@ -127,7 +131,7 @@ public class ZalleryTranscoder extends HttpServlet{
|
|||
///////////// Start Transcoding
|
||||
// create a media reader
|
||||
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));
|
||||
|
||||
VideoTranscoderListener converter = new VideoTranscoderListener(640, 360);
|
||||
|
|
@ -221,28 +225,22 @@ class VideoTranscoderListener extends MediaToolAdapter{
|
|||
private IVideoResampler videoResampler = null;
|
||||
private IAudioResampler audioResampler = null;
|
||||
|
||||
IMediaWriter writer;
|
||||
|
||||
@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) {
|
||||
//writer.addAudioStream(streamIndex, streamIndex, ICodec.ID.CODEC_ID_AAC, 2, 44100);
|
||||
streamCoder.setSampleRate( 44100 );
|
||||
/*
|
||||
streamCoder.setCodec( ICodec.ID.CODEC_ID_AAC );
|
||||
streamCoder.setBitRate( 128 );
|
||||
*/
|
||||
//streamCoder.setCodec( ICodec.ID.CODEC_ID_AAC );
|
||||
//streamCoder.setBitRate( 128 );
|
||||
}
|
||||
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.setHeight( height );
|
||||
|
||||
/*
|
||||
streamCoder.setCodec(ICodec.findEncodingCodec( ICodec.ID.CODEC_ID_H264 ));
|
||||
streamCoder.setBitRate( 500000 );
|
||||
|
||||
//streamCoder.setCodec(ICodec.findEncodingCodec( ICodec.ID.CODEC_ID_H264 ));
|
||||
//streamCoder.setBitRate( 800000 );
|
||||
/*
|
||||
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");
|
||||
|
|
@ -323,21 +321,38 @@ class ProgressListener extends MediaToolAdapter {
|
|||
class FrameGrabListener extends MediaToolAdapter {
|
||||
private long totalLength;
|
||||
private long grabAt;
|
||||
private File outputFile;
|
||||
|
||||
public FrameGrabListener(IMediaReader reader, double at) {
|
||||
public FrameGrabListener(IMediaReader reader, File outputFile, double at) {
|
||||
if( !reader.isOpen() )
|
||||
reader.open(); // read container
|
||||
this.totalLength = reader.getContainer().getDuration();
|
||||
this.outputFile = outputFile;
|
||||
setAtProgress(at);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoPicture(IVideoPictureEvent event) {
|
||||
long currentLength = event.getTimeStamp();
|
||||
|
||||
if( grabAt > 0 && currentLength > grabAt ){
|
||||
System.out.println("\nScreanshoot!!!");
|
||||
grabAt = -1;
|
||||
try{
|
||||
long currentLength = event.getTimeStamp();
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -346,3 +361,4 @@ class FrameGrabListener extends MediaToolAdapter {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue