微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何使用 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 举报,一经查实,本站将立刻删除。