Web Services 通过Web服务暂停流式广播

nxowjjhe  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(172)

我有一个问题,一旦我开始播放收音机th暂停功能不工作,这是我的代码

public class player
{
   Stream ms = new MemoryStream ( );
   WaveStream blockAlignedStream;
   IWavePlayer waveOut = new WaveOut ( WaveCallbackInfo . FunctionCallback ( ) );`

   public void play ( string url )
    {

       new Thread ( delegate ( object o )
       {
           // http://www.samisite.com/sound/cropShadesofGrayMonkees.mp3
           var response = WebRequest . Create ( url ) . GetResponse ( );
           using ( var stream = response . GetResponseStream ( ) )
           {
              byte[] buffer = new byte [ 65536 ]; // 64KB chunks
              int read;
              while ( ( read = stream . Read ( buffer , 0 , buffer . Length ) ) > 0 )
                {
                   var pos = ms . Position;
                   ms . Position = ms . Length;
                   ms . Write ( buffer , 0 , read );
                   ms . Position = pos;
                }
            }
    } ) . Start ( );

    // Pre-buffering some data to allow NAudio to start playing
    while ( ms . Length < 65536 * 5 )  // *10
        Thread . Sleep ( 1000 );

    ms . Position = 0;

    blockAlignedStream = new BlockAlignReductionStream ( WaveFormatConversionStream . CreatePcmStream ( new Mp3FileReader ( ms ) ) ); 
    this.waveOut . Init ( blockAlignedStream );
    this.waveOut . Play ( );
    while ( waveOut . PlaybackState == PlaybackState . Playing )
        {
        System . Threading . Thread . Sleep ( 100 );
        }
    } 
public void stop ( ) 
  {
   this.waveOut . Stop ( );
   this.waveOut . Dispose ( );
   this.waveOut = null;  
   }

然后调用它来实现这样的Web方法

player mp3=new player ( );
[WebMethod]
 // http://streaming.radio.funradio.fr/fun-1-44-128

public void play(string url)
{
   mp3.play ( url );
}
[WebMethod]
public void pause (  )
{
   mp3 .pause();
}

有时,屏幕消息会显示此错误:“WaveOut设备未在WaveOut关闭。Finalize()”
我发现了这个问题,当我启动暂停功能时,它使用了参数“waveOut”,因为它没有在播放功能中修改,我需要找到一种方法来获得它们之间的联系。任何想法!!!

dgsult0t

dgsult0t1#

这不是我推荐的播放MP3流文件的方法。我很惊讶它能起作用,因为NAudio中的MP3文件读取器试图建立一个目录,而你试图在两个不同的线程上读写内存流。
NAudio演示应用程序展示了我的建议。您可以在接收到MP3帧时解析和解码它们,并将它们放入一个BufferedWaveProvider中,用于从播放。或者,如果没有足够的缓冲音频,您可以暂停播放。源代码可从naudio.codeplex.com获得

相关问题