有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用JAVACV播放视频和音频

我想用JavaCV制作一个视频播放器。 在获得图像后,我现在正在尝试获取音频

以下是我目前的代码:

package robomow;  

import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.AudioFormat;
import javax.swing.JOptionPane;
import java.nio.ShortBuffer;
import java.nio.ByteBuffer;
import org.bytedeco.javacv.FrameGrabber.Exception;
import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.ffmpeg.global.avutil;
import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;

public class client {

    public static void main(String[] args)  {
    
        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("rtsp://192.168.101.22:554/stream0?username=UUUUU&password=PPPPP");
        grabber.setImageWidth(960);
        grabber.setImageHeight(540);
        grabber.setFrameRate(25);
        grabber.setOption("rtsp_transport", "tcp");
        grabber.setOption("flags", "nobuffer");
        grabber.setOption("flags", "low_delay");
        grabber.setAudioOption("crf", "0");
        grabber.setAudioBitrate(64000);
        grabber.setSampleRate(8000);
        grabber.setAudioChannels(1);
        grabber.setAudioCodec(avcodec.AV_CODEC_ID_PCM_MULAW);
        
        try {
            grabber.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        final CanvasFrame cFrame = new CanvasFrame("Camera Preview", CanvasFrame.getDefaultGamma() / grabber.getGamma());
        Frame capturedFrame = null;
        
        final AudioFormat audioFormat = new AudioFormat(grabber.getSampleRate(), 16, grabber.getAudioChannels(), true, true);
        final DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
        SourceDataLine soundLine;
        try {
            soundLine = (SourceDataLine) AudioSystem.getLine(info);
            soundLine.open(audioFormat);
            soundLine.start();
        } catch (LineUnavailableException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }
        
        try {
            while ((capturedFrame = grabber.grab()) != null)
            {
                if (cFrame.isVisible())
                {
                    cFrame.showImage(capturedFrame);
                }
            }
            } catch (org.bytedeco.javacv.FFmpegFrameGrabber.Exception e1) {
            e1.printStackTrace();
            } 

        cFrame.dispose();
                
        try {
            //soundLine.stop();
            grabber.stop();
            } catch (org.bytedeco.javacv.FFmpegFrameGrabber.Exception e) {
            e.printStackTrace();
            } 
        }
}

问题是没有播放音频。 我可以使用vlc播放器从流中听到音频,没有任何问题

有谁能就我做错了什么给出建议吗


共 (0) 个答案