逛逛UnsupportedFileException“从URL中的Java播放WAV文件时 [英] Getting 'UnsupportedFileException' when playing wav file from URL in Java

查看:279
本文介绍了逛逛UnsupportedFileException“从URL中的Java播放WAV文件时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不得不从URL,但得到 UnsupportedFileException 播放.wav文件

下面是code。

 公共类LoopSound {
    公共静态无效的主要(字串[] args)抛出异常{
        的HostnameVerifier HV =新的HostnameVerifier(){            @覆盖
            公共布尔验证(字符串urlHostName,会议的SSLSession){
                的System.out.println(警告:URL主机:+ urlHostName
                        +与+ session.getPeerHost());
                返回true;
            }
        };
        //现在你告诉JRE信任任何HTTPS服务器。
        //如果你知道你要连接到那么URL这应该
        //不会有问题
        尝试{
            trustAllHttpsCertificates();
        }赶上(例外五){
            的System.out.println(Trustall+ e.getStackTrace());
        }
        HttpsURLConnection.setDefaultHostnameVerifier(HV);
        StringWriter的SW =新的StringWriter();
        PrintWriter的PW =的新PrintWriter(SW);
        网址URL =新的URL(
          \"https://74.127.51.154/SiPbx/playback.php?access=subscriber&login=501%40mix&domain=mix.nms.mixnetworks.net&user=501&type=vmail&file=vm-20130109213353000125_netsapiens_com.wav&time=20130110170638&auth=de5dda39287604a88fc4b80c467e161d&submit=PLAY\");
        夹夹= AudioSystem.getClip();
        AIS的AudioInputStream = AudioSystem。
          getAudioInputStream(URL);
        clip.open(AIS);
        clip.loop(0);
        javax.swing.JOptionPane中。
          showMessageDialog(NULL,关闭退出!);
      }     私有静态无效trustAllHttpsCertificates()抛出异常{            //创建一个不验证证书链信任管理器:            javax.net.ssl​​.TrustManager [] = trustAllCerts            新javax.net.ssl​​.TrustManager [1];            javax.net.ssl​​.TrustManager TM =新TempTrustedManager();            trustAllCerts [0] = TM;            javax.net.ssl​​.SSLContext SC =            javax.net.ssl​​.SSLContext.getInstance(SSL);            sc.init(NULL,trustAllCerts,NULL);            javax.net.ssl​​.HttpsURLConnection.setDefaultSSLSocketFactory(            sc.getSocketFactory());        }
     公共静态类TempTrustedManager工具
        javax.net.ssl​​.TrustManager,javax.net.ssl​​.X509TrustManager {
    公共java.security.cert.X509Certificate [] getAcceptedIssuers()为{
        返回null;
    }    公共布尔isServerTrusted(
            java.security.cert.X509Certificate []证书){
        返回true;
    }    公共布尔isClientTrusted(
            java.security.cert.X509Certificate []证书){
        返回true;
    }    公共无效checkServerTrusted(
            java.security.cert.X509Certificate []证书,字符串的authType)
            抛出java.security.cert.CertificateException {
        返回;
    }    公共无效checkClientTrusted(
            java.security.cert.X509Certificate []证书,字符串的authType)
            抛出java.security.cert.CertificateException {
        返回;
    }
}

下面是例外越来越:

 异常线程mainjavax.sound.sampled.UnsupportedAudioFileException:无法从输入URL获得音频输入流
    在javax.sound.sampled.AudioSystem.getAudioInputStream(来源不明)
    在LoopSound.main(LoopSound.java:35)

当我把在浏览器的地址栏上面的URL中,我能够下载该文件,但我不能玩亲语法。我怎样才能解决这个问题?

修改

我改变了链接

<$p$p><$c$c>https://74.127.51.154/SiPbx/playback.php?access=subscriber&login=501%40mix&domain=mix.nms.mixnetworks.net&user=501&type=vmail&file=vm-20130109213353000125_netsapiens_com.wav&time=20130110170638&auth=de5dda39287604a88fc4b80c467e161d&submit=PLAY

现在上面的链接放置在其下载文件浏览器。

但是当我执行该程序现在得到新的异常。

 异常线程mainjavax.sound.sampled.LineUnavailableException:与格式ULAW 8000.0赫兹,8位,单声道,1个字节/帧线,不支持。
    在com.sun.media.sound.DirectAudioDevice $ DirectDL.implOpen(来源不明)
    在com.sun.media.sound.DirectAudioDevice $ DirectClip.implOpen(来源不明)
    在com.sun.media.sound.AbstractDataLine.open(来源不明)
    在com.sun.media.sound.DirectAudioDevice $ DirectClip.open(来源不明)
    在com.sun.media.sound.DirectAudioDevice $ DirectClip.open(来源不明)
    在LoopSound.main(LoopSound.java:36)

先谢谢了。


解决方案

以下链接帮助我和IAM现在能够播放WAV文件。

如何发挥与格式wav文件CCITT U-法

修改结果
按Millimoose评论IAM粘贴一些从上面的链接code让别人谁读的链接,了解

从IAM CCITT U-法改变wav文件的格式PCM_SIGNED 这是确切的wav格式

 网​​址URL =新的URL(
                          \"https://sssss/xxxxx/playback.php?access=subscriber&login=501%40mix&domain=mix.nms.mixnetworks.net&user=501&type=vmail&file=vm-20130109213243000082_mixnetworks_net.wav&time=20130110170638&auth=c43ff32546e126be9b895bbf225b2e75&submit=PLAY\");
                 FIS的AudioInputStream =
                  AudioSystem.getAudioInputStream(URL);
                 的System.out.println(文件AudioFormat的:+ fis.getFormat());
                 AIS的AudioInputStream = AudioSystem.getAudioInputStream(
                  AudioFormat.Encoding.PCM_SIGNED,FIS);
                 AudioFormat的AF = ais.getFormat();
                 的System.out.println(AudioFormat的:+ af.toString());                 INT帧率=(int)的af.getFrameRate();
                 的System.out.println(帧率:+帧率);
                 INT框架尺寸= af.getFrameSize();
                 的System.out.println(外形尺寸为:+框架尺寸);                 SourceDataLine的行= AudioSystem.getSourceDataLine(AF);
                 line.addLineListener(新MyLineListener());                 line.open(AF);
                 INT由bufSize = line.getBufferSize();
                 的System.out.println(缓冲大小:+由bufSize);                 line.start();                 字节[]数据=新的字节[由bufSize]
                 INT读取动作;                 而((读取动作= ais.read(数据,0,data.length))!= - 1)
                     line.write(数据,0,读取动作);                 line.drain();
                 line.stop();
                 line.close();

I have to play a .wav file from URL but getting UnsupportedFileException.

Below is the code.

public class LoopSound {
    public static void main(String[] args) throws Exception {
        HostnameVerifier hv = new HostnameVerifier() {

            @Override
            public boolean verify(String urlHostName, SSLSession session) {
                System.out.println("Warning: URL Host: " + urlHostName
                        + " vs. " + session.getPeerHost());
                return true;
            }
        };
        // Now you are telling the JRE to trust any https server.
        // If you know the URL that you are connecting to then this should
        // not be a problem
        try {
            trustAllHttpsCertificates();
        } catch (Exception e) {
            System.out.println("Trustall" + e.getStackTrace());
        }
        HttpsURLConnection.setDefaultHostnameVerifier(hv);
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        URL url = new URL(
          "https://74.127.51.154/SiPbx/playback.php?access=subscriber&login=501%40mix&domain=mix.nms.mixnetworks.net&user=501&type=vmail&file=vm-20130109213353000125_netsapiens_com.wav&time=20130110170638&auth=de5dda39287604a88fc4b80c467e161d&submit=PLAY");
        Clip clip = AudioSystem.getClip();
        AudioInputStream ais = AudioSystem.
          getAudioInputStream( url );
        clip.open(ais);
        clip.loop(0);
        javax.swing.JOptionPane.
          showMessageDialog(null, "Close to exit!");
      }

     private static void trustAllHttpsCertificates() throws Exception {

            // Create a trust manager that does not validate certificate chains:

            javax.net.ssl.TrustManager[] trustAllCerts =

            new javax.net.ssl.TrustManager[1];

            javax.net.ssl.TrustManager tm = new TempTrustedManager();

            trustAllCerts[0] = tm;

            javax.net.ssl.SSLContext sc =

            javax.net.ssl.SSLContext.getInstance("SSL");

            sc.init(null, trustAllCerts, null);

            javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(

            sc.getSocketFactory());

        }
     public static class TempTrustedManager implements
        javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
        return null;
    }

    public boolean isServerTrusted(
            java.security.cert.X509Certificate[] certs) {
        return true;
    }

    public boolean isClientTrusted(
            java.security.cert.X509Certificate[] certs) {
        return true;
    }

    public void checkServerTrusted(
            java.security.cert.X509Certificate[] certs, String authType)
            throws java.security.cert.CertificateException {
        return;
    }

    public void checkClientTrusted(
            java.security.cert.X509Certificate[] certs, String authType)
            throws java.security.cert.CertificateException {
        return;
    }
}

Below is the exception getting:

Exception in thread "main" javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input URL
    at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
    at LoopSound.main(LoopSound.java:35)

When I place the above URL in a browser's address bar, I'm able to download the file but I'm unable to play pro-grammatically. How can I solve this ?

EDIT

I changed the link to

https://74.127.51.154/SiPbx/playback.php?access=subscriber&login=501%40mix&domain=mix.nms.mixnetworks.net&user=501&type=vmail&file=vm-20130109213353000125_netsapiens_com.wav&time=20130110170638&auth=de5dda39287604a88fc4b80c467e161d&submit=PLAY

Now the above link is placed on the browser its downloading the file.

but when i execute the program getting new exception now.

Exception in thread "main" javax.sound.sampled.LineUnavailableException: line with format ULAW 8000.0 Hz, 8 bit, mono, 1 bytes/frame,  not supported.
    at com.sun.media.sound.DirectAudioDevice$DirectDL.implOpen(Unknown Source)
    at com.sun.media.sound.DirectAudioDevice$DirectClip.implOpen(Unknown Source)
    at com.sun.media.sound.AbstractDataLine.open(Unknown Source)
    at com.sun.media.sound.DirectAudioDevice$DirectClip.open(Unknown Source)
    at com.sun.media.sound.DirectAudioDevice$DirectClip.open(Unknown Source)
    at LoopSound.main(LoopSound.java:36)

Thanks in advance.

解决方案

below link helped me and iam able to play the wav file now.

how to play wav file with format CCITT u-Law

Edit
As per Millimoose comments iam pasting some of the code from the above link to make others who read the link to understand

iam changing format of the wav file from CCITT U-Law to PCM_SIGNED which is the exact wav format

URL url = new URL(
                          "https://sssss/xxxxx/playback.php?access=subscriber&login=501%40mix&domain=mix.nms.mixnetworks.net&user=501&type=vmail&file=vm-20130109213243000082_mixnetworks_net.wav&time=20130110170638&auth=c43ff32546e126be9b895bbf225b2e75&submit=PLAY");
                 AudioInputStream fis =
                  AudioSystem.getAudioInputStream(url);
                 System.out.println("File AudioFormat: " + fis.getFormat());
                 AudioInputStream ais = AudioSystem.getAudioInputStream(
                  AudioFormat.Encoding.PCM_SIGNED,fis);
                 AudioFormat af = ais.getFormat();
                 System.out.println("AudioFormat: " + af.toString());

                 int frameRate = (int)af.getFrameRate();
                 System.out.println("Frame Rate: " + frameRate);
                 int frameSize = af.getFrameSize();
                 System.out.println("Frame Size: " + frameSize);

                 SourceDataLine line = AudioSystem.getSourceDataLine(af);
                 line.addLineListener(new MyLineListener());

                 line.open(af);
                 int bufSize = line.getBufferSize();
                 System.out.println("Buffer Size: " + bufSize);

                 line.start();

                 byte[] data = new byte[bufSize];
                 int bytesRead;

                 while ((bytesRead = ais.read(data,0,data.length)) != -1)
                     line.write(data,0,bytesRead);

                 line.drain();
                 line.stop();
                 line.close();

这篇关于逛逛UnsupportedFileException“从URL中的Java播放WAV文件时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆