Actionscript 3 Red5服务器中AS3中的视频录制问题

Actionscript 3 Red5服务器中AS3中的视频录制问题,actionscript-3,video-recording,Actionscript 3,Video Recording,我使用动作脚本作为客户端,拥有Red5媒体服务器。我的视频有两个问题: 视频录制不正确,播放不顺畅 有时视频从15-20秒开始,而不是从0秒开始 我编写了以下代码: private function onStart():void { mic = Microphone.getMicrophone(); cam = Camera.getCamera(); if(cam!=null) { cam.addEventListener(StatusEvent.STATU

我使用动作脚本作为客户端,拥有Red5媒体服务器。我的视频有两个问题:

  • 视频录制不正确,播放不顺畅
  • 有时视频从15-20秒开始,而不是从0秒开始
  • 我编写了以下代码:

       private function onStart():void
     {  
    
      mic = Microphone.getMicrophone();
      cam = Camera.getCamera();
    
      if(cam!=null)
      {
       cam.addEventListener(StatusEvent.STATUS, onDivStatus);
       ns.attachCamera(cam)
       cam.setQuality( 0, 100 );;
    
    
      }
      else
      {
       trace("you need to check webcam setting:");
    
      }
      if(mic != null)
      {
       mic.setUseEchoSuppression(true);
       mic.setSilenceLevel(5, 1000);
       mic.addEventListener(StatusEvent.STATUS, onDivStatus);
       ns.attachAudio(mic);
      }
      else
      {
       trace("you need to check Microphone setting:");
      }
    
    
      webCamRecording.video1.attachCamera(cam);
      webCamRecording.video1.smoothing = true;
    
    }
     var timer:Timer;
     public function startRecording():void
     {
      ns.publish(webCamRecording.userName,"record"); 
      webCamRecording.stopBtn.visible = true;
      webCamRecording.stopBtn.addEventListener(MouseEvent.CLICK,stopRecording)
      timer = new Timer(1000,10*60);
      timer.addEventListener(TimerEvent.TIMER, onTimer);
      timer.addEventListener(TimerEvent.TIMER_COMPLETE, onComplete);
      timer.start(); 
     }
    
     private function stopRecording(evt:MouseEvent):void
     {
      trace("call external function::::::::::::::D>>>>>> ");
      timer.stop();
      webCamRecording.video1.clear();
         ns = null
         webCamRecording.video1.visible = false;
    
      }
    
    我检查了日志,发现以下错误:

    java.lang.IllegalArgumentException
            at java.nio.Buffer.position(Buffer.java:236)
            at sun.nio.ch.IOUtil.write(IOUtil.java:68)
            at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:205)
            at org.red5.io.flv.impl.FLVWriter.writeTag(FLVWriter.java:254)
            at org.red5.io.flv.impl.FLVWriter.writeMetadataTag(FLVWriter.java:371)
            at org.red5.io.flv.impl.FLVWriter.writeTag(FLVWriter.java:226)
            at org.red5.server.stream.consumer.FileConsumer.write(FileConsumer.java:333)
            at org.red5.server.stream.consumer.FileConsumer.doWrites(FileConsumer.java:292)
            at org.red5.server.stream.consumer.FileConsumer$1.run(FileConsumer.java:180)
    Exception in thread "Thread-12" java.lang.IllegalArgumentException
            at java.nio.Buffer.position(Buffer.java:236)
            at sun.nio.ch.IOUtil.write(IOUtil.java:68)
            at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:205)
            at org.red5.io.flv.impl.FLVWriter.writeTag(FLVWriter.java:254)
            at org.red5.server.stream.consumer.FileConsumer.write(FileConsumer.java:333)
            at org.red5.server.stream.consumer.FileConsumer.doWrites(FileConsumer.java:292)
            at org.red5.server.stream.consumer.FileConsumer$1.run(FileConsumer.java:180)
    Exception in thread "Thread-15" java.nio.BufferOverflowException
            at java.nio.Buffer.nextPutIndex(Buffer.java:519)
            at java.nio.HeapByteBuffer.putInt(HeapByteBuffer.java:366)
            at org.apache.mina.core.buffer.AbstractIoBuffer.putInt(AbstractIoBuffer.java:743)
            at org.red5.io.flv.impl.FLVWriter.writeTag(FLVWriter.java:251)
            at org.red5.server.stream.consumer.FileConsumer.write(FileConsumer.java:333)
            at org.red5.server.stream.consumer.FileConsumer.doWrites(FileConsumer.java:292)
            at org.red5.server.stream.consumer.FileConsumer$1.run(FileConsumer.java:180)
    Exception in thread "Thread-18" java.nio.BufferOverflowException
            at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:357)
            at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:336)
            at sun.nio.ch.IOUtil.write(IOUtil.java:60)
            at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:205)
            at org.red5.io.flv.impl.FLVWriter.writeTag(FLVWriter.java:254)
            at org.red5.server.stream.consumer.FileConsumer.write(FileConsumer.java:333)
            at org.red5.server.stream.consumer.FileConsumer.doWrites(FileConsumer.java:292)
            at org.red5.server.stream.consumer.FileConsumer$1.run(FileConsumer.java:180)
    Exception in thread "Thread-20" java.lang.IllegalArgumentException
            at java.nio.Buffer.position(Buffer.java:236)
            at sun.nio.ch.IOUtil.write(IOUtil.java:68)
            at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:205)
            at org.red5.io.flv.impl.FLVWriter.writeTag(FLVWriter.java:254)
            at org.red5.server.stream.consumer.FileConsumer.write(FileConsumer.java:333)
            at org.red5.server.stream.consumer.FileConsumer.doWrites(FileConsumer.java:292)
            at org.red5.server.stream.consumer.FileConsumer$1.run(FileConsumer.java:180)
    Exception in thread "Thread-34" java.lang.IllegalArgumentException
            at java.nio.Buffer.position(Buffer.java:236)
            at sun.nio.ch.IOUtil.write(IOUtil.java:68)
            at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:205)
            at org.red5.io.flv.impl.FLVWriter.writeTag(FLVWriter.java:278)
            at org.red5.server.stream.consumer.FileConsumer.write(FileConsumer.java:333)
            at org.red5.server.stream.consumer.FileConsumer.doWrites(FileConsumer.java:292)
            at org.red5.server.stream.consumer.FileConsumer$1.run(FileConsumer.java:180)
    Exception in thread "Thread-43" java.lang.IllegalArgumentException
            at java.nio.Buffer.position(Buffer.java:236)
            at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:337)
            at sun.nio.ch.IOUtil.write(IOUtil.java:60)
            at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:205)
            at org.red5.io.flv.impl.FLVWriter.writeTag(FLVWriter.java:278)
            at org.red5.server.stream.consumer.FileConsumer.write(FileConsumer.java:333)
            at org.red5.server.stream.consumer.FileConsumer.doWrites(FileConsumer.java:292)
            at org.red5.server.stream.consumer.FileConsumer$1.run(FileConsumer.java:180)
    Exception in thread "Thread-44" java.lang.IllegalArgumentException
            at java.nio.Buffer.position(Buffer.java:236)
            at sun.nio.ch.IOUtil.write(IOUtil.java:68)
            at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:205)
            at org.red5.io.flv.impl.FLVWriter.writeTag(FLVWriter.java:278)
            at org.red5.server.stream.consumer.FileConsumer.write(FileConsumer.java:333)
            at org.red5.server.stream.consumer.FileConsumer.doWrites(FileConsumer.java:292)
            at org.red5.server.stream.consumer.FileConsumer$1.run(FileConsumer.java:180)
    Exception in thread "Thread-48" java.lang.IllegalArgumentException
            at java.nio.Buffer.position(Buffer.java:236)
            at sun.nio.ch.IOUtil.write(IOUtil.java:68)
            at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:205)
            at org.red5.io.flv.impl.FLVWriter.writeTag(FLVWriter.java:278)
            at org.red5.server.stream.consumer.FileConsumer.write(FileConsumer.java:333)
            at org.red5.server.stream.consumer.FileConsumer.doWrites(FileConsumer.java:292)
            at org.red5.server.stream.consumer.FileConsumer$1.run(FileConsumer.java:180)
    Exception in thread "Thread-65" java.nio.BufferOverflowException
            at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:357)
            at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:336)
            at sun.nio.ch.IOUtil.write(IOUtil.java:60)
            at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:205)
            at org.red5.io.flv.impl.FLVWriter.writeTag(FLVWriter.java:254)
            at org.red5.server.stream.consumer.FileConsumer.write(FileConsumer.java:333)
            at org.red5.server.stream.consumer.FileConsumer.doWrites(FileConsumer.java:292)
            at org.red5.server.stream.consumer.FileConsumer$1.run(FileConsumer.java:180)
    Exception in thread "Thread-68" java.lang.IllegalArgumentException
            at java.nio.Buffer.position(Buffer.java:236)
            at sun.nio.ch.IOUtil.write(IOUtil.java:68)
            at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:205)
            at org.red5.io.flv.impl.FLVWriter.writeTag(FLVWriter.java:278)
            at org.red5.server.stream.consumer.FileConsumer.write(FileConsumer.java:333)
            at org.red5.server.stream.consumer.FileConsumer.doWrites(FileConsumer.java:292)
            at org.red5.server.stream.consumer.FileConsumer$1.run(FileConsumer.java:180)
    Exception in thread "Thread-71" java.nio.BufferOverflowException
            at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:357)
            at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:336)
            at sun.nio.ch.IOUtil.write(IOUtil.java:60)
            at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:205)
            at org.red5.io.flv.impl.FLVWriter.writeTag(FLVWriter.java:254)
            at org.red5.server.stream.consumer.FileConsumer.write(FileConsumer.java:333)
            at org.red5.server.stream.consumer.FileConsumer.doWrites(FileConsumer.java:292)
            at org.red5.server.stream.consumer.FileConsumer$1.run(FileConsumer.java:180)
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Close
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider disconnect
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider disconnect
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider disconnect
    

    如果有人有解决办法,请帮帮我。谢谢。

    根据个人经验,Red5不能产生好的录音效果

    使用相同的flash客户端尝试其他服务器,如Wowza Developer server,看看是否可以获得更好的结果。如果您这样做了,那么这是一个Red5问题,并且更容易切换服务器


    您可以通过增加缓冲区并等待缓冲区上载来尝试一些优化

    Red5 0.9的录制过程完全中断

    Red5 0.8做得相当不错,但无法解释Flash Player在慢速连接上进行流媒体/录制时,音频优先于视频数据。因此,当通过慢速连接录制高质量视频时,最终文件中的音频和视频将不同步

    Red5 1.0 RC1引入了一种几乎可以正常工作的延迟写入机制

    Red5 1.0 final、1.0.1和1.0.2的延迟写入机制存在完全缺陷,导致flv文件具有1个视频关键帧,在通过慢速连接录制时,其余仅为音频

    录制的最佳Red5版本是修补版Red5 1.0.2,可在以下博客文章中找到:

    它也将在下一个正式版本(1.0.3)中提供


    我是该补丁的作者,我做了它来一次性修复Red5录音。它工作得很好。

    您使用的是哪个版本的RED5?我们使用的是0.9版本。我在v0.9中遇到过此类问题。更改为v0.8以使其正常工作。您可以尝试使用v0.8。检查他们建议使用v0.8,[]链接3]()的链接我同意,我们花了大量时间试图修复Red5下的录制后,不得不转移到wowza。