如何使用 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-player 从流中听到音频,没有任何问题。

有人可以建议我做错什么吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)