精华内容
下载资源
问答
  • android 6.0 版本播放本地与网络音频 还有一些实用的base类中的方法
  • 主要介绍了Android的MediaPlayer播放网络音频的实现方法,很实用的功能,需要的朋友可以参考下
  • android播放网络音频

    千次阅读 2016-05-09 18:13:27
    android播放网络音频,很简单的技术,但是可以学习下很简单的一个获取网络音频播放器,有进度条,播放,暂停,停止,重新播放,支持缓存,以下是源码,希望可以帮到大家布局文件很简单,就几个按钮,TextView,和...

    android播放网络音频,很简单的技术,但是可以学习下

    很简单的一个获取网络音频播放器,有进度条,播放,暂停,停止,重新播放,支持缓存,以下是源码,希望可以帮到大家

    这里写图片描述

    布局文件很简单,就几个按钮,TextView,和SeekBar。
    activity_audio_palyer.xml

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/tips"
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:text="文件地址" />
    
            <EditText
                android:id="@+id/file_name"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="http://sc1.111ttt.com/2016/1/02/23/195231349486.mp3" />
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="4.0dip"
                android:orientation="horizontal" >
    
                <Button
                    android:id="@+id/btnPlayUrl"
                    android:layout_width="80dip"
                    android:layout_height="wrap_content"
                    android:text="播放" >
                </Button>
    
                <Button
                    android:id="@+id/btnPause"
                    android:layout_width="80dip"
                    android:layout_height="wrap_content"
                    android:text="暂停" >
                </Button>
    
                <Button
                    android:id="@+id/btnStop"
                    android:layout_width="80dip"
                    android:layout_height="wrap_content"
                    android:text="停止" >
                </Button>
    
                <Button
                    android:id="@+id/btnReplay"
                    android:layout_width="80dip"
                    android:layout_height="wrap_content"
                    android:text="重播" >
                </Button>
            </LinearLayout>
    
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="20dip"
                android:orientation="horizontal" >
    
                <SeekBar
                    android:id="@+id/skbProgress"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:layout_weight="1.0"
                    android:max="100"
                    android:paddingLeft="10dip"
                    android:paddingRight="10dip" >
                </SeekBar>
            </LinearLayout>
        </LinearLayout>
    
    </FrameLayout>

    Player.java文件

    public class Player implements OnBufferingUpdateListener, OnCompletionListener,
            MediaPlayer.OnPreparedListener {
        public MediaPlayer mediaPlayer;
        private SeekBar skbProgress;
        private Timer mTimer = new Timer();
        private String videoUrl;
        private boolean pause;
        private int playPosition;
    
        public Player(String videoUrl, SeekBar skbProgress) {
            this.skbProgress = skbProgress;
            this.videoUrl = videoUrl;
            try {
                mediaPlayer = new MediaPlayer();
                mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mediaPlayer.setOnBufferingUpdateListener(this);
                mediaPlayer.setOnPreparedListener(this);
            } catch (Exception e) {
                Log.e("mediaPlayer", "error", e);
            }
    
            mTimer.schedule(mTimerTask, 0, 1000);
        }
    
        /*******************************************************
         * 通过定时器和Handler来更新进度条
         ******************************************************/
        TimerTask mTimerTask = new TimerTask() {
            @Override
            public void run() {
                if (mediaPlayer == null)
                    return;
                if (mediaPlayer.isPlaying() && skbProgress.isPressed() == false) {
                    handleProgress.sendEmptyMessage(0);
                }
            }
        };
    
        Handler handleProgress = new Handler() {
            public void handleMessage(Message msg) {
                int position = mediaPlayer.getCurrentPosition();
                int duration = mediaPlayer.getDuration();
                if (duration > 0) {
                    long pos = skbProgress.getMax() * position / duration;
                    skbProgress.setProgress((int) pos);
                }
            };
        };
    
        /**
         * 来电话了
         */
        public void callIsComing() {
            if (mediaPlayer.isPlaying()) {
                playPosition = mediaPlayer.getCurrentPosition();// 获得当前播放位置
                mediaPlayer.stop();
            }
        }
    
        /**
         * 通话结束
         */
        public void callIsDown() {
            if (playPosition > 0) {
                playNet(playPosition);
                playPosition = 0;
            }
        }
    
        /**
         * 播放
         */
        public void play() {
            playNet(0);
        }
    
        /**
         * 重播
         */
        public void replay() {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.seekTo(0);// 从开始位置开始播放音乐
            } else {
                playNet(0);
            }
        }
    
        /**
         * 暂停
         */
        public boolean pause() {
            if (mediaPlayer.isPlaying()) {// 如果正在播放
                mediaPlayer.pause();// 暂停
                pause = true;
            } else {
                if (pause) {// 如果处于暂停状态
                    mediaPlayer.start();// 继续播放
                    pause = false;
                }
            }
            return pause;
        }
    
        /**
         * 停止
         */
        public void stop() {
            if (mediaPlayer != null && mediaPlayer.isPlaying()) {
                mediaPlayer.stop();
            }
        }
    
        @Override
        /**  
         * 通过onPrepared播放  
         */
        public void onPrepared(MediaPlayer arg0) {
            arg0.start();
            Log.e("mediaPlayer", "onPrepared");
        }
    
        @Override
        public void onCompletion(MediaPlayer arg0) {
            Log.e("mediaPlayer", "onCompletion");
        }
    
        @Override
        public void onBufferingUpdate(MediaPlayer arg0, int bufferingProgress) {
            skbProgress.setSecondaryProgress(bufferingProgress);
            int currentProgress = skbProgress.getMax()
                    * mediaPlayer.getCurrentPosition() / mediaPlayer.getDuration();
            Log.e(currentProgress + "% play", bufferingProgress + "% buffer");
        }
    
        /**
         * 播放音乐
         * 
         * @param playPosition
         */
        private void playNet(int playPosition) {
            try {
                mediaPlayer.reset();// 把各项参数恢复到初始状态
                mediaPlayer.setDataSource(videoUrl);
                mediaPlayer.prepare();// 进行缓冲
                mediaPlayer.setOnPreparedListener(new MyPreparedListener(
                        playPosition));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private final class MyPreparedListener implements
                android.media.MediaPlayer.OnPreparedListener {
            private int playPosition;
    
            public MyPreparedListener(int playPosition) {
                this.playPosition = playPosition;
            }
    
            @Override
            public void onPrepared(MediaPlayer mp) {
                mediaPlayer.start();// 开始播放
                if (playPosition > 0) {
                    mediaPlayer.seekTo(playPosition);
                }
            }
        }
    }

    MainActivity.java文件

    public class MainActivity extends Activity {
    
        private Button btnPause, btnPlayUrl, btnStop,btnReplay;
        private SeekBar skbProgress;
        private Player player;
        private EditText file_name_text;
        private TextView tipsView;
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_audio_palyer);
    
            this.setTitle("在线音乐播放---ouyangpeng编写");  
    
            btnPlayUrl = (Button) this.findViewById(R.id.btnPlayUrl);  
            btnPlayUrl.setOnClickListener(new ClickEvent());  
    
            btnPause = (Button) this.findViewById(R.id.btnPause);  
            btnPause.setOnClickListener(new ClickEvent());  
    
            btnStop = (Button) this.findViewById(R.id.btnStop);  
            btnStop.setOnClickListener(new ClickEvent());  
    
            btnReplay = (Button) this.findViewById(R.id.btnReplay);  
            btnReplay.setOnClickListener(new ClickEvent());  
    
            file_name_text=(EditText) this.findViewById(R.id.file_name);
            tipsView=(TextView) this.findViewById(R.id.tips);
    
            skbProgress = (SeekBar) this.findViewById(R.id.skbProgress);  
            skbProgress.setOnSeekBarChangeListener(new SeekBarChangeEvent());  
    
            String url=file_name_text.getText().toString();
            player = new Player(url,skbProgress);  
    
            TelephonyManager telephonyManager=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
            telephonyManager.listen(new MyPhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);
        }
    
        /**
         * 只有电话来了之后才暂停音乐的播放
         */
        private final class MyPhoneListener extends android.telephony.PhoneStateListener{
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                switch (state) {
                case TelephonyManager.CALL_STATE_RINGING://电话来了
                    player.callIsComing();
                    break;
                case TelephonyManager.CALL_STATE_IDLE: //通话结束
                    player.callIsDown();
                    break;
                }
            }
        }
    
        class ClickEvent implements OnClickListener {  
            @Override  
            public void onClick(View arg0) {  
                if (arg0 == btnPause) {  
                    boolean pause=player.pause();  
                    if (pause) {
                        btnPause.setText("继续");
                        tipsView.setText("暂停播放...");  
                    }else{
                        btnPause.setText("暂停");
                        tipsView.setText("继续播放...");  
                    }
                } else if (arg0 == btnPlayUrl) {  
                    player.play();
                    tipsView.setText("开始播放...");
                } else if (arg0 == btnStop) {  
                    player.stop();  
                    tipsView.setText("停止播放...");  
                } else if (arg0==btnReplay) {
                    player.replay();
                    tipsView.setText("重新播放...");  
                }
            }  
        }  
    
        class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener {  
            int progress;  
            @Override  
            public void onProgressChanged(SeekBar seekBar, int progress,  
                    boolean fromUser) {  
                // 原本是(progress/seekBar.getMax())*player.mediaPlayer.getDuration()  
                this.progress = progress * player.mediaPlayer.getDuration()  
                        / seekBar.getMax();  
            }  
    
            @Override  
            public void onStartTrackingTouch(SeekBar seekBar) {  
    
            }  
    
            @Override  
            public void onStopTrackingTouch(SeekBar seekBar) {  
                // seekTo()的参数是相对与影片时间的数字,而不是与seekBar.getMax()相对的数字  
                player.mediaPlayer.seekTo(progress);  
            }  
        }  
    }

    OK,在项目文件AndroidManifest.xml里面添加权限

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.netmusic"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="18" />
        <uses-permission android:name="android.permission.INTERNET" />
        <!-- 注意:这里要加入一个监听电话的权限 -->
        <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.example.netmusic.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    

    这样做出来的就很原始了,1毛钱特效都没有的那种。
    这里写图片描述
    按钮这些可以自己定义背景,有专门的媒体按钮,去http://www.iconfont.cn/上找,很多的。
    最主要的是咱们的进度条SeekBar,,原始是不是太丑了?来,我们加个样式吧。
    在style文件里面:

     </style>
        <style name="Widget.SeekBar.Normal" parent="@android:style/Widget.SeekBar">  
            <item name="android:maxHeight">8.0dip</item>  
            <item name="android:indeterminateOnly">false</item>  
            <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>  
            <item name="android:progressDrawable">@drawable/seekbar_horizontal</item>  
            <item name="android:minHeight">8.0dip</item>  
            <item name="android:thumb">@drawable/seek_thumb</item>  
            <item name="android:thumbOffset">10.0dip</item>  
        </style> 

    新建seekbar_horizontal.xml,drawable里面的

    <?xml version="1.0" encoding="UTF-8"?>  
    <layer-list
      xmlns:android="http://schemas.android.com/apk/res/android">  
        <item android:id="@android:id/background" android:drawable="@drawable/seek_bkg" />  
        <item android:id="@android:id/secondaryProgress">  
            <clip>  
                <shape>  
                    <corners android:radius="2.0dip" />  
                    <gradient android:startColor="#80ffd300" android:endColor="#a0ffcb00" android:angle="270.0" android:centerY="0.75" android:centerColor="#80ffb600" />  
                </shape>  
            </clip>
        </item>  
        <item android:id="@android:id/progress">  
            <clip android:drawable="@drawable/seek" />  
        </item>  
    </layer-list> 

    ok,还有几个图片素材
    seek.9.png seek.9.png

    这里写图片描述 seek_bkg.9.png

    这里写图片描述 seek_thumb.png

    代码里面引用:

                <SeekBar
                    android:id="@+id/skbProgress"
                    style="@style/Widget.SeekBar.Normal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:layout_weight="1.0"
                    android:max="100"
                    android:paddingLeft="10dip"
                    android:paddingRight="10dip" >
                </SeekBar>

    这样就可以了,看下效果:
    这里写图片描述
    比原来的是不是好看很多?
    希望可以帮到大家
    有什么问题可以加我QQ问我:1453022932

    展开全文
  • 打开后台调试,依次点击network 和 xhr,然后刷新页面,出现第三个红框里面的内容,点击,出现右侧数据,最下面红框里就是这个音频真实的外链地址了 代码 &amp;lt;audio id=&quot;bgMusic&quot; ...

    先来一个醒目的大标题,入了一下午的坑,总算找到了;

    首先,是我最喜欢的网易云音乐

    1. 第一步,百度找到您想要的音乐
      这里写图片描述
    2. 打开后台调试,依次点击network 和 xhr,然后刷新页面,出现第三个红框里面的内容,点击,出现右侧数据,最下面红框里就是这个音频真实的外链地址了
      这里写图片描述
    3. 代码
        <audio  id="bgMusic" loop="loop" preload="preload" autoplay="autoplay">
            <source src="http://m10.music.126.net/20180809173001/070d716213a3cf7cb910b5b88b638eb8/ymusic/687c/a444/e9e3/66452e1efb0e3f108d6b899010c13ba8.mp3" type="audio/mp3">
        </audio>

    第二个,是酷我音乐mp3外链地址

    1. 第一步:找到酷我音乐网站上的您需要的音频页面
      这里写图片描述
    2. 可以看到地址栏里面的最后一串数字,这是当前这首歌的id,然后将该数字串拼接到
      http://player.kuwo.cn/webmusic/st/getNewMuiseByRid?rid=MUSIC_后面,即
      http://player.kuwo.cn/webmusic/st/getNewMuiseByRid?rid=MUSIC_24165853
    3. 出现的是该音频的xml信息
      这里写图片描述
      找到mp3path(音频尾部地址)和mp3dl(音频头部地址)
    4. 打开新组建的网址,http://+音频头部地址+/resource/+音频尾部地址,如下:
      http://other.web.ri01.sycdn.kuwo.cn/resource/n2/96/19/2142954236.mp3
      这里写图片描述
    5. 这就是该音频的真实外链地址喽

    哈哈,学会了吗?其实我又发现了一个网址,点开直接搜索你想要打的音频,就可以获得你想要的网址,都是专业的音乐平台的地址哦,放心用;传送门http://music.liuzhijin.cn/点我

    感谢刘志进实验室,应该不算侵权吧

    展开全文
  • http://www.cnblogs.com/VweiweiyixiaoV/p/8425972.html
    http://www.cnblogs.com/VweiweiyixiaoV/p/8425972.html 
    展开全文
  • 音视频测试地址

    千次阅读 2020-01-20 13:41:34
    在线视频地址 https://media.w3.org/2010/05/sintel/trailer.mp4 http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4 http://vjs.zencdn.net/v/oceans.mp4 https://media.w3.org/2010/05/sintel/trailer.mp4 ...

    在线视频地址

    https://media.w3.org/2010/05/sintel/trailer.mp4

    http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4

    http://vjs.zencdn.net/v/oceans.mp4

    https://media.w3.org/2010/05/sintel/trailer.mp4

    http://mirror.aarnet.edu.au/pub/TED-talks/911Mothers_2010W-480p.mp4

    其他各种格式,MP4, flv, mkv, 3gp 视频下载

    https://www.sample-videos.com/index.php#sample-mp4-video

    在线音频地址

    http://win.web.ra01.sycdn.kuwo.cn/f05a603ca612771d9c48b9cd8fb4f3ef/5cfdb556/resource/n2/2009/07/24/2707183870.mp3

     

    根据音乐名搜地址

    https://music.liuzhijin.cn/

    展开全文
  • 测试音视频地址

    千次阅读 2019-06-10 09:12:53
    在线视频地址 https://media.w3.org/2010/05/sintel/trailer.mp4 http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4 http://vjs.zencdn.net/v/oceans.mp4 https://media.w3.org/2010/05/sintel/trailer.mp4 ...
  • audio音频播放及网络音频文件播放

    千次阅读 2018-05-30 22:15:44
    Audio模块用于提供音频的录制和播放功能,可调用系统的麦克风设备进行录音操作,也可调用系统的扬声器设备播放音频文件。通过plus.audio获取音频管理对象。 ROUTE_SPEAKER:设备的扬声器音频输出线路 plus....
  • 电子可以一边玩,一边研究,网络音频这个课题特别适合电子爱好者。几方面的挑战如下,单片机实现对接以太网、实时对音频流解码播放,上位机配合单片机做音频流传输控制,音频信号的对接放大处理。在这里分享下资料,...
  • 音频资源地址

    千次阅读 2016-09-14 14:50:06
    http://samples.mplayerhq.hu/A-codecs/WMA/
  • Android-MediaPlayer播放网络音频

    万次阅读 热门讨论 2019-01-29 15:40:08
    * 该Demo是演示MediaPlayer播放网络音频 */ public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button start; private Button pause; private MediaPlayer ...
  • 网络广播电台的流媒体地址,含:mms/mmst/mmsh,通过网络(IP)进行广播电台的播放
  • Android 使用MediaPlayer播放网络音频

    万次阅读 多人点赞 2018-06-14 14:30:02
    现在写一个支持本地缓存的网络音频播放器,并添加了唤醒锁、WiFi锁和音频焦点等功能。 1、自定义MediaPlayer 直接通过MediaPlayer获取播放状态有时不够准确,所以自定义ManagedMediaPlayer继承MediaPlayer,...
  • 其中AVFoundation框架中的AVAudioPlayer主要用于播放本地音频,也可以播放网络音频,但是需要先将网络数据转化为data数据,用户体验较差,所有苹果公司提供了功能强大的AVPlayer用于播放网络音频(既流媒体),效果和可控性...
  • 首先检测网络环境搭建是否完成 1、找到Tomcat的位置中bin目录中的startup.bat,之后在网址上输入...3、打开cmd,打出ipconfig,得到图下的IP地址,然后再把localhost换成你自己的IP地址后面再加上你放的音频的名字,例
  • 网络音频项目 网络音频实验(目前为止的教学示例) 在本地运行网络音频: 这是一个可以从命令行运行的简单 Python Web 服务器: python -m SimpleHTTPServer 8000 如果你从 web-audio-projects 文件夹运行它,...
  • 基于三层网络音频传输技术

    千次阅读 2015-07-17 22:21:59
    由于每个网络音频接口的都是将本地时钟频率同步到了基准绝对时间,所以它们的数据包在打包和解包的过程中产生的数据量是完全相同的,这就不会因为缓存数据过载(或太少的数据引起的缓存旁路)引起同步损失而丢失音频...
  • 测试音频MP3、视频MP4在线地址

    千次阅读 2020-06-30 11:45:09
    http://downsc.chinaz.net/Files/DownLoad/sound1/201906/11582.mp3 http://downsc.chinaz.net/files/download/sound1/201206/1638.mp3 http://downsc.chinaz.net/Files/DownLoad/sound1/201906/11582.mp3
  • 既然我们是要播放网络音乐,那就要先检测网络环境搭建好了没有。 步骤是: 1、找到Tomcat的位置中bin目录中的startup.bat,之后在网址上输入地址:localhost:7788,(我的是7788,官方默认是8080,出现网页不对的...
  • * 建立音频下载请求 */ -(void)HTTPDownLoadReaquest { NSURL *url=[NSURL URLWithString:self.URL]; //创建一个请求 NSURLRequest *request = [NSURLRequest requestWithURL:url]; self.Connection = [...
  • 该源码文章地址:https://www.cnblogs.com/lifexy/p/13648442.html,介绍:使用ffmpeg+QAudioOutput实现的一个音频播放器,支持播放、暂停、恢复、换歌、播放进度调节,并且支持播放视频文件中的音频部分,下载下来就可以...
  • 简单的网络爬虫-喜马拉雅音频爬虫

    千次阅读 2018-08-13 10:58:07
    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。...
  • ESS与AVB音频视频桥网络系统

    千次阅读 2013-12-09 13:30:12
    基于以太网的数字音频传输技术  基于以太网的数字音频传输技术是专业音频行业的一个技术焦点,以其不依赖于控制系统而独立存在的特性,广泛的应用到很多项目中。不仅解决了多线路问题,还解决了远距离传输、数据...
  • 【项目介绍】 基于梅尔频谱图的音频信号分类识别(Pytorch)项目源码,本项目将使用Pytorch...【博客地址】 《基于梅尔频谱图的音频信号分类识别(Pytorch)》https://panjinquan.blog.csdn.net/article/details/120601437
  • /存储  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  NSString *ad_voice =@"http://fdfs.xmcdn.com/group11/M00/AD/5F/wKgDa1ZfFi-gRNYMABuxsyS4ea4688.mp
  • 第三方分享 微信好友 朋友圈 新浪微博 链接 图片 音频地址 分享 以及成功与失败回调 使用起来及其便捷
  • 本文将一步步向你展示,如何建立一个能识别10个不同词语的基本语音识别网络。 你需要知道,真正的语音与音频识别系统要复杂的多,但就像图像识别领域的MNIST,它将让你对所涉及的技术有个基本了解。 完成...
  • (1)延迟:发送时延,传播时延,排队时延,处理时延(路由的路径选择),不过对于非交互式的音频视频的影响会小一些。 (2)带宽不稳定。需要在接收端设置缓存(看电影时可以弥补数据包没按顺序接收到的问题)。
  • 利用jquery进行音频文件播放

    热门讨论 2013-05-20 17:02:47
    利用jquery进行音频文件播放
  • 作者丨武广学校丨合肥工业大学硕士生研究方向丨图像生成谈到数据的生成,很多人都会想到利用生成对抗网络(GAN)去实现,这对于图像和视频这种较易于编码表示的数据是合适的。然而...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,695
精华内容 25,478
关键字:

网络音频地址