import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.OpenCVFrameConverter;
引入這些開發包實作轉碼跟推流服務
static boolean exit = false;
public static void main(String[] args) throws Exception {
System.out.println("start...");
String rtmpPath = "rtmp://111.230.***.***:1936/hls/YFZX2";
String rtspPath = "rtsp://admin:[email protected]:554/h264/ch34/sub/av_stream";
int audioRecord =0; // 0 = 不錄制,1=錄制
boolean saveVideo = false;
push(rtmpPath,rtspPath,audioRecord,saveVideo);
System.out.println("end...");
}
public static void push(String rtmpPath,String rtspPath,int audioRecord,boolean saveVideo ) throws Exception {
// 使用rtsp的時候需要使用 FFmpegFrameGrabber,不能再用 FrameGrabber
int width = 640,height = 480;
FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(rtspPath);
grabber.setOption("rtsp_transport", "tcp"); // 使用tcp的方式,不然會丟包很嚴重
grabber.setImageWidth(width);
grabber.setImageHeight(height);
System.out.println("grabber start");
grabber.start();
// 流媒體輸出地址,解析度(長,高),是否錄制音頻(0:不錄制/1:錄制)
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(rtmpPath,width,height, audioRecord);
recorder.setInterleaved(true);
//recorder.setVideoOption("crf","28");
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); // 28
recorder.setFormat("flv"); // rtmp的型別
recorder.setFrameRate(25);
recorder.setImageWidth(width);recorder.setImageHeight(height);
recorder.setPixelFormat(0); // yuv420p
System.out.println("recorder start");
recorder.start();
//
OpenCVFrameConverter.ToIplImage conveter = new OpenCVFrameConverter.ToIplImage();
System.out.println("all start!!");
int count = 0;
while(!exit){
count++;
Frame frame = grabber.grabImage();
if(frame == null){
continue;
}
if(count % 100 == 0){
System.out.println("count="+count);
}
recorder.record(frame);
}
grabber.stop();
grabber.release();
recorder.stop();
recorder.release();
}
視頻流是正常推出去了,但是有警告資訊
[swscaler @ 0x7fd84fd04c00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd84fd04c00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd84fd04c00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd8500cfa00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd84fd04c00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd850c3ba00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd850c3ba00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd850c3ba00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd8500cfa00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd851513600] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd84fd04c00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd84fd04c00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd84fd04c00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd851513600] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd84fd04c00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd851513600] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd8500cfa00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fd851513600] deprecated pixel format used, make sure you did set range correctly
uj5u.com熱心網友回復:
你用的像素格式是flv不支持的,需要重新指定格式recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);
uj5u.com熱心網友回復:
可以參考:https://jingyan.baidu.com/article/6dad5075d8885fe022e36e38.html
uj5u.com熱心網友回復:
我在回呼函式里能取到視頻流,就是不知道咋利用javaCV轉發到rtmpuj5u.com熱心網友回復:
實在沒辦法解決了.我選擇無視它
//過濾掉warn 日志
avutil.av_log_set_level(avutil.AV_LOG_ERROR);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/36040.html
標籤:Java EE
上一篇:sql模糊搜索
