gpt4 book ai didi

android - 使用 JavaCV 和 FFmpeg 播放视频

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:35 27 4
gpt4 key购买 nike

因此,我正在为 Android 开发自定义视频播放器,但我需要播放的不仅仅是 android 支持的视频文件(mp4、3gp ...),例如 wmv、avi、flv。

此时我已经将任何视频类型转换为 .mp4 并且可以在重新编码后播放它们,但我不知道如何播放那些 wmvavi 文件而不将它们重新编码为 mp4 视频格式。

有什么方法可以在不重新编码的情况下在 Android 上播放任何视频?JavaCV + FFmpeg 库已经在工作,只是不知道该怎么做。

顺便说一句,这是我用来重新编码视频的代码:

public static void convert(File file) {

FFmpegFrameGrabber frameGrabber =
new FFmpegFrameGrabber(file.getAbsolutePath());

IplImage captured_frame = null;

FrameRecorder recorder = null;
recorder = new FFmpegFrameRecorder("/mnt/sdcard/external_sd/videosteste/primeiroteste.mp4", 300, 300);
recorder.setVideoCodec(13);
recorder.setFrameRate(30);
recorder.setFormat("mp4");
try {
recorder.start();
frameGrabber.start();
while (true) {
try {
captured_frame = frameGrabber.grab();

if (captured_frame == null) {
System.out.println("!!! Failed cvQueryFrame");
break;
}
recorder.record(captured_frame);
} catch (Exception e) {
}
}
recorder.stop();
recorder.release();
} catch (Exception e) {
e.printStackTrace();
}
}

最佳答案

首先创建 CanvasFrame,然后使用“canvas.showImage(captured_frame);”而不是“recorder.record(captured_frame);”

代码如下:

public class GrabberShow implements Runnable 
{
final static int INTERVAL=40;///you may use interval
IplImage image;
static CanvasFrame canvas = new CanvasFrame("JavaCV player");


public GrabberShow()
{
canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
}


public static void convert(File file)
{

FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(file.getAbsolutePath());

IplImage captured_frame = null;

FrameRecorder recorder = null;
//recorder = new FFmpegFrameRecorder("/mnt/sdcard/external_sd/videosteste/primeiroteste.mp4", 300, 300);
recorder = new FFmpegFrameRecorder("D://temp.mp4", 300, 300);
recorder.setVideoCodec(13);
recorder.setFrameRate(30);
recorder.setFormat("mp4");
try {
recorder.start();
frameGrabber.start();
while (true) {
try {
captured_frame = frameGrabber.grab();

if (captured_frame == null) {
System.out.println("!!! Failed cvQueryFrame");
break;
}
//recorder.record(captured_frame);
canvas.showImage(captured_frame);
Thread.sleep(INTERVAL);
} catch (Exception e) {
}
}
recorder.stop();
recorder.release();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run()
{
convert(new File("D://aes.mp4"));
}

public static void main(String[] args) {
GrabberShow gs = new GrabberShow();
Thread th = new Thread(gs);
th.start();
}
}

关于android - 使用 JavaCV 和 FFmpeg 播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770376/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com