java最简分数pat,gb28181简单解包rtp ps流,推出rtmp(java版基于springboot):六、解包rtp ps流,推出rtmp…

  • Post author:
  • Post category:java


package com.fengyulei.fylsipserver.media.push;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_CAP_EXPERIMENTAL;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_FLAG_GLOBAL_HEADER;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_FLAG_QSCALE;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_AAC;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_FFV1;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_FLV1;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_H263;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_H264;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_HUFFYUV;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_JPEGLS;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_MJPEG;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_MJPEGB;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_MPEG1VIDEO;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_MPEG2VIDEO;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_MPEG4;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_NONE;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_PCM_S16BE;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_PCM_S16LE;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_PCM_U16BE;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_PCM_U16LE;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_PNG;

import static org.bytedeco.javacpp.avcodec.AV_CODEC_ID_RAWVIDEO;

import static org.bytedeco.javacpp.avcodec.AV_INPUT_BUFFER_MIN_SIZE;

import static org.bytedeco.javacpp.avcodec.AV_PKT_FLAG_KEY;

import static org.bytedeco.javacpp.avcodec.av_init_packet;

import static org.bytedeco.javacpp.avcodec.av_jni_set_java_vm;

import static org.bytedeco.javacpp.avcodec.av_packet_unref;

import static org.bytedeco.javacpp.avcodec.avcodec_alloc_context3;

import static org.bytedeco.javacpp.avcodec.avcodec_copy_context;

import static org.bytedeco.javacpp.avcodec.avcodec_encode_audio2;

import static org.bytedeco.javacpp.avcodec.avcodec_encode_video2;

import static org.bytedeco.javacpp.avcodec.avcodec_fill_audio_frame;

import static org.bytedeco.javacpp.avcodec.avcodec_find_encoder;

import static org.bytedeco.javacpp.avcodec.avcodec_find_encoder_by_name;

import static org.bytedeco.javacpp.avcodec.avcodec_free_context;

import static org.bytedeco.javacpp.avcodec.avcodec_open2;

import static org.bytedeco.javacpp.avcodec.avcodec_parameters_from_context;

import static org.bytedeco.javacpp.avcodec.avcodec_register_all;

import static org.bytedeco.javacpp.avdevice.avdevice_register_all;

import static org.bytedeco.javacpp.avformat.AVFMT_GLOBALHEADER;

import static org.bytedeco.javacpp.avformat.AVFMT_NOFILE;

import static org.bytedeco.javacpp.avformat.AVIO_FLAG_WRITE;

import static org.bytedeco.javacpp.avformat.av_dump_format;

import static org.bytedeco.javacpp.avformat.av_guess_format;

import static org.bytedeco.javacpp.avformat.av_interleaved_write_frame;

import static org.bytedeco.javacpp.avformat.av_register_all;

import static org.bytedeco.javacpp.avformat.av_write_frame;

import static org.bytedeco.javacpp.avformat.av_write_trailer;

import static org.bytedeco.javacpp.avformat.avformat_alloc_output_context2;

import static org.bytedeco.javacpp.avformat.avformat_network_init;

import static org.bytedeco.javacpp.avformat.avformat_new_stream;

import static org.bytedeco.javacpp.avformat.avformat_write_header;

import static org.bytedeco.javacpp.avformat.avio_alloc_context;

import static org.bytedeco.javacpp.avformat.avio_close;

import static org.bytedeco.javacpp.avformat.avio_open2;

import static org.bytedeco.javacpp.avutil.*;

import static org.bytedeco.javacpp.swresample.swr_alloc_set_opts;

import static org.bytedeco.javacpp.swresample.swr_convert;

import static org.bytedeco.javacpp.swresample.swr_free;

import static org.bytedeco.javacpp.swresample.swr_init;

import static org.bytedeco.javacpp.swscale.SWS_BILINEAR;

import static org.bytedeco.javacpp.swscale.sws_freeContext;

import static org.bytedeco.javacpp.swscale.sws_getCachedContext;

import static org.bytedeco.javacpp.swscale.sws_scale;

import java.io.File;

import java.io.IOException;

import java.io.OutputStream;

import java.nio.Buffer;

import java.nio.ByteBuffer;

import java.nio.ByteOrder;

import java.nio.DoubleBuffer;

import java.nio.FloatBuffer;

import java.nio.IntBuffer;

import java.nio.ShortBuffer;

import java.util.Collections;

import java.util.HashMap;

import java.util.Map;

import java.util.Map.Entry;

import org.bytedeco.javacpp.BytePointer;

import org.bytedeco.javacpp.DoublePointer;

import org.bytedeco.javacpp.FloatPointer;

import org.bytedeco.javacpp.IntPointer;

import org.bytedeco.javacpp.Loader;

import org.bytedeco.javacpp.Pointer;

import org.bytedeco.javacpp.PointerPointer;

import org.bytedeco.javacpp.PointerScope;

import org.bytedeco.javacpp.ShortPointer;

import org.bytedeco.javacpp.avcodec.AVCodec;

import org.bytedeco.javacpp.avcodec.AVCodecContext;

import org.bytedeco.javacpp.avcodec.AVPacket;

import org.bytedeco.javacpp.avformat.AVFormatContext;

import org.bytedeco.javacpp.avformat.AVIOContext;

import org.bytedeco.javacpp.avformat.AVOutputFormat;

import org.bytedeco.javacpp.avformat.AVStream;

import org.bytedeco.javacpp.avformat.Write_packet_Pointer_BytePointer_int;

import org.bytedeco.javacpp.avutil.AVDictionary;

import org.bytedeco.javacpp.avutil.AVFrame;

import org.bytedeco.javacpp.avutil.AVRational;

import org.bytedeco.javacpp.swresample.SwrContext;

import org.bytedeco.javacpp.swscale.SwsContext;

import org.bytedeco.javacv.FFmpegFrameRecorder;

import org.bytedeco.javacv.FFmpegLockCallback;

import org.bytedeco.javacv.Frame;

import org.bytedeco.javacv.FrameRecorder;

@SuppressWarnings(“all”)

public class CustomFFmpegFrameRecorder extends FrameRecorder {

public static CustomFFmpegFrameRecorder createDefault(File f, int w, int h) throws Exception { return new CustomFFmpegFrameRecorder(f, w, h); }

public static CustomFFmpegFrameRecorder createDefault(String f, int w, int h) throws Exception { return new CustomFFmpegFrameRecorder(f, w, h); }

private static Exception loadingException = null;

public static void tryLoad() throws Exception {

if (loadingException != null) {

throw loadingException;

} else {

try {

Loader.load(org.bytedeco.javacpp.avutil.class);

Loader.load(org.bytedeco.javacpp.swresample.class);

Loader.load(org.bytedeco.javacpp.avcodec.class);

Loader.load(org.bytedeco.javacpp.avformat.class);

Loader.load(org.bytedeco.javacpp.swscale.class);

/* initialize libavcodec, and register all codecs and formats */

av_jni_set_java_vm(Loader.getJavaVM(), null);

avcodec_register_all();

av_register_all();

avformat_network_init();

Loader.load(org.bytedeco.javacpp.avdevice.class);

avdevice_register_all();

} catch (Throwable t) {

if (t instanceof Exception) {

throw loadingException = (Exception)t;

} else {

throw loadingException = new Exception(“Failed to load ” + FFmpegFrameRecorder.class, t);

}

}

}

}

static {

try {

tryLoad();

FFmpegLockCallback.init();

} catch (Exception ex) { }

}

public CustomFFmpegFrameRecorder(File file, int audioChannels) {

this(file, 0, 0, audioChannels);

}

public CustomFFmpegFrameRecorder(String filename, int audioChannels) {

this(filename, 0, 0, audioChannels);

}

public CustomFFmpegFrameRecorder(File file, int imageWidth, int imageHeight) {

this(file, imageWidth, imageHeight, 0);

}

public CustomFFmpegFrameRecorder(String filename, int imageWidth, int imageHeight) {

this(filename, imageWidth, imageHeight, 0);

}

public CustomFFmpegFrameRecorder(File file, int imageWidth, int imageHeight, int audioChannels) {

this(file.getAbsolutePath(), imageWidth, imageHeight, audioChannels);

}

public CustomFFmpegFrameRecorder(String filename, int imageWidth, int imageHeight, int audioChannels) {

this.filename = filename;

this.imageWidth = imageWidth;

this.imageHeight = imageHeight;

this.audioChannels = audioChannels;

this.pixelFormat = AV_PIX_FMT_NONE;

this.videoCodec = AV_CODEC_ID_NONE;

this.videoBitrate = 400000;

this.frameRate = 30;

this.sampleFormat = AV_SAMPLE_FMT_NONE;

this.audioCodec = AV_CODEC_ID_NONE;

this.audioBitrate = 64000;

this.sampleRate = 44100;

this.interleaved = true;

this.video_pkt = new AVPacket();

this.audio_pkt = new AVPacket();

}

public CustomFFmpegFrameRecorder(OutputStream outputStream, int audioChannels) {

this(outputStream.toString(), audioChannels);

this.outputStream = outputStream;

}

public CustomFFmpegFrameRecorder(OutputStream outputStream, int imageWidth, int imageHeight) {

this(outputStream.toString(), imageWidth, imageHeight);

this.outputStream = outputStream;

}

public CustomFFmpegFrameRecorder(OutputStream outputStream, int imageWidth, int imageHeight, int audioChannels) {

this(outputStream.toString(), imageWidth, imageHeight, audioChannels);

this.outputStream = outputStream;

}

public void release() throws Exception {

// synchronized (org.bytedeco.javacpp.avcodec.class) {

releaseUnsafe();

// }

}

void releaseUnsafe() throws Exception {

/* close each codec */

if (video_c != null) {

avcodec_free_context(video_c);

video_c = null;

}

if (audio_c != null) {

avcodec_free_context(audio_c);

audio_c = null;

}

if (picture_buf != null) {

av_free(picture_buf);

picture_buf = null;

}

if (picture != null) {

av_frame_free(picture);

picture = null;

}

if (tmp_picture != null) {

av_frame_free(tmp_picture);

tmp_picture = null;

}

if (video_outbuf != null) {

av_free(video_outbuf);

video_outbuf = null;

}

if (frame != null) {

av_frame_free(frame);

frame = null;

}

if (samples_out != null) {

for (int i = 0; i < samples_out.length; i++) {

av_free(samples_out[i].position(0));

}

samples_out = null;

}

if (audio_outbuf != null) {

av_free(audio_outbuf);

audio_outbuf = null;

}

if (video_st != null && video_st.metadata() != null) {

av_dict_free(v