Ejemplo n.º 1
0
def aplayer(name):
    import pymedia.muxer as muxer, pymedia.audio.acodec as acodec, pymedia.audio.sound as sound
    import time
    dm = muxer.Demuxer(str.split(name, '.')[-1].lower())
    f = open(name, 'rb')
    f.seek(0, 2)
    size = f.tell()
    f.seek(0, 0)
    snd = resampler = dec = None
    s = f.read(32000)
    t = time.time()
    while len(s):
        frames = dm.parse(s)
        if frames:
            for fr in frames:
                # Assume for now only audio streams
                if dec == None:
                    print dm.getInfo(), dm.streams
                    dec = acodec.Decoder(dm.streams[fr[0]])

                r = dec.decode(fr[1])
        if time.time() - t > SEEK_INTERVAL:
            newPos = random.randint(0, size / 2)
            print 'Seek to', newPos
            dec.reset()
            dm.reset()
            f.seek(newPos, 0)
            t = time.time()

        s = f.read(512)
Ejemplo n.º 2
0
def play(file_path):

    #file_path = "test.mp3"
    root, ext = path.splitext(file_path)
    demuxer = muxer.Demuxer(ext[1:].lower())
    decoder = None
    output = None

    file = open(file_path, 'rb')
    data = ' '
    while data:
        data = file.read(90000)
        if len(data):
            frames = demuxer.parse(data)
            for frame in frames:
                if decoder == None:
                    decoder = acodec.Decoder(demuxer.streams[0])

                audio_frame = decoder.decode(frame[1])
                if audio_frame and audio_frame.data:
                    if output == None:
                        output = sound.Output(audio_frame.sample_rate,
                                              audio_frame.channels,
                                              sound.AFMT_S16_LE)

                    #while self.stop:
                    #time.sleep(1)

                    output.play(audio_frame.data)

            while output.isPlaying():
                time.sleep(0.05)
Ejemplo n.º 3
0
    def decompressWAV(fname):
        snd = None
        fname1 = str.split(fname, '.')
        fname2 = string.join(fname1[:len(fname1) - 1])
        # Open demuxer first

        dm = muxer.Demuxer(fname1[-1].lower())
        dec = None
        f = open(fname, 'rb')
        s = " "
        while len(s):
            s = f.read(20000)
            if len(s):
                frames = dm.parse(s)
                for fr in frames:
                    if dec == None:
                        # Open decoder

                        dec = acodec.Decoder(dm.streams[0])
                    r = dec.decode(fr[1])
                    if r and r.data:
                        if snd == None:
                            snd = wave.open(fname2 + '.wav', 'wb')
                            snd.setparams(
                                (r.channels, 2, r.sample_rate, 0, 'NONE', ''))

                        snd.writeframes(r.data)
        return snd
Ejemplo n.º 4
0
  def _getStreamLength( self, format, dm, f, fr ):
    # Get file size if possible
    pos= f.tell()
    f.seek( 0, 2 )
    self.fileSize= f.tell()
    f.seek( pos, 0 )
  
    # Demux frames from the beginning and from the end and get the PTS diff
    if not dm.hasHeader():
      startPTS= -1
      for d in fr:
        if d[ 3 ]> 0:
          startPTS= d[ 3 ] / 90
          break

      # Seek to the end and get the PTS from the end of the file
      if startPTS> 0:
        pos= f.tell()
        f.seek( 0, 0 )
        dm1= muxer.Demuxer( format )
        s= f.read( FILE_CHUNK )
        r= dm1.parse( s )
        endPTS= startPTS
        for d in fr:
          if d[ 3 ]> 0:
            endPTS= d[ 3 ] / 90

        f.seek( pos, 0 )
        self.length= endPTS- startPTS
    else:
      lStreams= filter( lambda x: x and ( x[ 'length' ]> 0 ), dm.streams )
      if len( lStreams ):
        self.length= max( [ x[ 'length' ] for x in lStreams ] )
      else:
        self.length= -1
def playAudio(filename):
    import pymedia.audio.acodec as acodec
    import pymedia.muxer as muxer
    import pymedia.audio.sound as sound
    import time

    name1 = str.split(filename, '.')
    # Open demuxer first
    dm = muxer.Demuxer(name1[-1].lower())
    dec = None
    snd = None
    s = " "
    f = open(filename, 'rb')

    while len(s):
        s = f.read(20000)
        if len(s):
            # 解析出最初的几帧音频数据
            frames = dm.parse(s)
            for fr in frames:
                if dec == None:
                    # Open decoder
                    dec = acodec.Decoder(dm.streams[0])
                #音频数据在 frame 数组的第二个元素中
                r = dec.decode(fr[1])
                if r and r.data:
                    if snd == None:
                        snd = sound.Output(r.sample_rate, r.channels,
                                           sound.AFMT_S16_LE)
                    snd.play(r.data)
    #8.延时,直到播放完毕
    while snd.isPlaying():
        time.sleep(0.5)
def get_audio_analysis(audio):
    dm = muxer.Demuxer('ogg')
    frames = dm.parse(audio)
    print len(frames)
    #return dm
    #get_audio_decoder
    dec = acodec.Decoder(dm.streams[0])
Ejemplo n.º 7
0
def aplayer( name, card, rate, tt ):
  import pymedia.muxer as muxer
  import pymedia.audio.acodec as acodec
  #import pymedia.audio.sound as sound
  import time
  dm= muxer.Demuxer( str.split( name, '.' )[ -1 ].lower() )
  
  f= open( name, 'rb' )
  #snd= resampler= dec= None
  dec=None
  s= f.read( 32000 )
  t= 0
  while len( s ):
    frames= dm.parse( s )
    if frames:
      for fr in frames:
        # Assume for now only audio streams
        if dec== None:
          print dm.getInfo(), dm.streams
          dec= acodec.Decoder( dm.streams[ fr[ 0 ] ] )
        
        r= dec.decode( fr[ 1 ] )
        if r:
            pass
            #print repr(r)
    
    s= f.read( 512 )
Ejemplo n.º 8
0
 def run(self):
     dm = muxer.Demuxer(str.split(self.mfile, '.')[-1].lower())
     self.snd = dec = None
     s = self.getbuff()
     while len(s) and not self.stop:
         frames = dm.parse(s)
         if frames:
             for fr in frames:
                 if dec == None:
                     dec = acodec.Decoder(dm.streams[fr[0]])
                 r = dec.decode(fr[1])
                 if r and r.data:
                     if self.snd == None:
                         self.snd = sound.Output(int(r.sample_rate),
                                                 r.channels,
                                                 sound.AFMT_S16_LE)
                     data = r.data
                     self.snd.play(data)
         s = self.getbuff()
     # 淡出
     fade_out(self.snd)
     # 停止
     self.snd.stop()
     # 设置音量正常
     self.snd.setVolume(65535)
Ejemplo n.º 9
0
def demuxVideo( inFile, ftype ):
  if nodecode==0:
    import pymedia.video.vcodec as vcodec
    import pygame
    YV12= pygame.YV12_OVERLAY
    pygame.init()
  r=""
  filmlen=0
  reqpos=0
  pos=0
  print '*****************************************************************************'
  print "%s" % inFile,
  print "file type %s" % ftype
  print '*****************************************************************************'
  try:
   dm= muxer.Demuxer(ftype)
  except:
   print "Unsupported fyle type:%s" % ftype
   return
  f= open( inFile, 'rb' )
  while not dm.hasHeader():
   s= f.read( BufferSize)	 
   try:
    r= dm.parse( s ,pos)
    pos=pos+BufferSize
   except muxer.SeekRequired, reqpos:
    print "seek to %d" % reqpos[0]
    if dm.hasHeader() and reqpos[0]!=0:
                  r=dm.ReadyData()
    f.seek( reqpos[0])
    pos=reqpos[0]
Ejemplo n.º 10
0
def dumpPCM(name):
    import pymedia.audio.acodec as acodec
    import pymedia.muxer as muxer
    import time, wave, string, os
    name1 = str.split(name, '.')
    name2 = string.join(name1[:len(name1) - 1])
    # Open demuxer first
    dm = muxer.Demuxer(name1[-1].lower())
    dec = None
    f = open(name, 'rb')
    snd = None
    s = " "
    while len(s):
        s = f.read(20000)
        if len(s):
            frames = dm.parse(s)
            for fr in frames:
                if dec == None:
                    # Open decoder
                    dec = acodec.Decoder(dm.streams[0])
                r = dec.decode(fr[1])
                if r and r.data:
                    if snd == None:
                        snd = open(name2 + '.pcm', 'wb')

                    snd.write(r.data)
Ejemplo n.º 11
0
def dumpWAV(name):
    import pymedia.audio.acodec as acodec
    import pymedia.muxer as muxer
    import time, wave, string, os
    name1 = str.split(name, '.')
    name2 = string.join(name1[:len(name1) - 1])
    # Open demuxer first
    dm = muxer.Demuxer(name1[-1].lower())
    dec = None
    f = open(name, 'rb')
    snd = None
    s = " "
    while len(s):
        s = f.read(20000)
        if len(s):
            frames = dm.parse(s)
            for fr in frames:
                if dec == None:
                    # Open decoder
                    dec = acodec.Decoder(dm.streams[0])
                r = dec.decode(fr[1])
                if r and r.data:
                    if snd == None:
                        snd = wave.open(name2 + '.wav', 'wb')
                        snd.setparams(
                            (r.channels, 2, r.sample_rate, 0, 'NONE', ''))

                    snd.writeframes(r.data)
Ejemplo n.º 12
0
 def __init__(self, file_name):
     super(audio_decoder, self).__init__()
     self.file_name = file_name
     ext = file_name.strip().split('.')[-1].lower()
     dm = muxer.Demuxer(ext)
     fin = open(file_name, 'rb')
     if not fin:
         raise "cannot find file %s" % file_name
     s = fin.read(3000000)
     r = dm.parse(s)
     
     print dm.streams
     self.decoder = None
     for aindex in xrange( len( dm.streams )):
       if dm.streams[ aindex ] and dm.streams[ aindex ][ 'type' ]== muxer.CODEC_TYPE_AUDIO:
         self.decoder = acodec.Decoder( dm.streams[ aindex ] )
         self.aindex = aindex
         break
     if not self.decoder:
         raise "no audio track found in given media file!"
     
     self.resampler = sound.Resampler( (dm.streams[ aindex ][ 'sample_rate' ], dm.streams[ aindex ][ 'channels' ]), 
                                       (constants.AUDIO_SAMPLE_RATE , 1) )
     self.ostream = data_stream(constants.AUDIO_SAMPLE_RATE, data_format = {'dtype':np.int16})
     self.odtype = np.int16
     self.demuxer = dm
     self.frames = r
     self.fin = fin
Ejemplo n.º 13
0
    def play(self):
        self.stopFlag = True
        self.mp3 = []
        self.i = 0
        #dm = muxer.Demuxer(str.split(self.file_name, '.')[-1].lower())
        dm = muxer.Demuxer('mp3')
        #f = open(self.file_name, 'rb')
        snd = dec = None
        header = {
            #'Referer': 'http://www.xiami.com/',
            'User-Agent':
            'User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36',
        }
        request = urllib2.Request(self.file_name, headers=header)
        self.f = urllib2.urlopen(request)

        print 'Player Init Time:%s' % (time.time() - TIME)
        #s = self.f.read(32000)
        s = self.f.read(10000)
        #thread.start_new_thread(self.download,())

        self.tcpFlag = True

        #self.TcpThread = tcpThread(self)
        #self.TcpThread.start()

        #self.downloadthread = downloadThread(self.f, self.mp3)
        #self.downloadthread.start()

        while self.stopFlag:
            pass

        print 'first read long:%s' % (len(s))
        while len(s) and self.tcpFlag:
            frames = dm.parse(s)
            if frames:
                for fr in frames:
                    if dec == None:
                        dec = acodec.Decoder(dm.streams[fr[0]])

                    r = dec.decode(fr[1])
                    if r and r.data:
                        if snd == None:
                            snd = sound.Output(int(r.sample_rate), r.channels,
                                               sound.AFMT_S16_LE)
                        data = r.data
                        try:
                            snd.play(data)
                        except Exception, e:
                            print e
                            #sys.exit(0)
            '''
            if self.i<len(self.mp3):
                s = self.mp3[self.i]
            else:
                s = []
            self.i = self.i + 1
            '''
            s = self.f.read(2000)
Ejemplo n.º 14
0
def recodeAudio(fName, fOutput, type, bitrate=None):
    # ------------------------------------
    import pymedia.audio.acodec as acodec
    import pymedia.muxer as muxer
    # Open demuxer
    dm = muxer.Demuxer(fName.split('.')[-1].lower())
    f = open(fName, 'rb')
    s = f.read(90000)
    dec = enc = mx = None
    print 'Recoding %s into %s' % (fName, fOutput)
    while len(s):
        frames = dm.parse(s)
        if frames:
            for fr in frames:
                # Assume for now only audio streams
                if dec == None:
                    # Open decoder
                    dec = acodec.Decoder(dm.streams[fr[0]])
                    print 'Decoder params:', dm.streams[fr[0]]

                # Decode audio frame
                r = dec.decode(fr[1])
                if r:
                    if bitrate == None:
                        bitrate = r.bitrate

                    # Open muxer and encoder
                    if enc == None:
                        params = {
                            'id': acodec.getCodecID(type),
                            'bitrate': bitrate,
                            'sample_rate': r.sample_rate,
                            'channels': r.channels
                        }
                        print 'Encoder params:', params
                        mx = muxer.Muxer(type)
                        stId = mx.addStream(muxer.CODEC_TYPE_AUDIO, params)
                        enc = acodec.Encoder(params)
                        fw = open(fOutput, 'wb')
                        ss = mx.start()
                        fw.write(ss)

                    enc_frames = enc.encode(r.data)
                    if enc_frames:
                        for efr in enc_frames:
                            ss = mx.write(stId, efr)
                            if ss:
                                fw.write(ss)

        s = f.read(100000)

    f.close()

    if fw:
        if mx:
            ss = mx.end()
            if ss:
                fw.write(ss)
        fw.close()
Ejemplo n.º 15
0
def aplayer(name, card, rate, tt):
    import pymedia.muxer as muxer, pymedia.audio.acodec as acodec, pymedia.audio.sound as sound
    import time
    dm = muxer.Demuxer(str.split(name, '.')[-1].lower())
    snds = sound.getODevices()
    if card not in range(len(snds)):
        raise 'Cannot play sound to non existent device %d out of %d' % (
            card + 1, len(snds))
    f = open(name, 'rb')
    snd = resampler = dec = None
    s = f.read(32000)
    t = 0
    while len(s):
        frames = dm.parse(s)
        if frames:
            for fr in frames:
                # Assume for now only audio streams

                if dec == None:
                    print dm.getInfo(), dm.streams
                    dec = acodec.Decoder(dm.streams[fr[0]])

                r = dec.decode(fr[1])
                if r and r.data:
                    if snd == None:
                        print 'Opening sound with %d channels -> %s' % (
                            r.channels, snds[card]['name'])
                        snd = sound.Output(int(r.sample_rate * rate),
                                           r.channels, sound.AFMT_S16_LE, card)
                        if rate < 1 or rate > 1:
                            resampler = sound.Resampler(
                                (r.sample_rate, r.channels),
                                (int(r.sample_rate / rate), r.channels))
                            print 'Sound resampling %d->%d' % (
                                r.sample_rate, r.sample_rate / rate)

                    data = r.data
                    if resampler:
                        data = resampler.resample(data)
                    if EMULATE:
                        # Calc delay we should wait to emulate snd.play()

                        d = len(data) / float(r.sample_rate * r.channels * 2)
                        time.sleep(d)
                        if int(t + d) != int(t):
                            print 'playing: %d sec\r' % (t + d),
                        t += d
                    else:
                        snd.play(data)
        if tt > 0:
            if snd and snd.getPosition() > tt:
                break

        s = f.read(512)

    while snd.isPlaying():
        time.sleep(.05)
Ejemplo n.º 16
0
def demuxVideo( inFile ):
	dm= muxer.Demuxer( inFile.split( '.' )[ -1 ].lower() )
	f= open( inFile, 'rb' )
	s= f.read( 400000 )
	r= dm.parse( s )
	while len( s )> 0:
		print len( r ),
		s= f.read( 40000 )
		r= dm.parse( s )
Ejemplo n.º 17
0
    def run(self):
        logging.info('play started on ' + self.filename)
        dm = muxer.Demuxer(str.split(self.filename, '.')[-1].lower())
        snds = sound.getODevices()
        if 0 not in range(len(snds)):
            print 'Cannot play sound to non existent device %d out of %d' % (
                1, len(snds))
            self.endfunc()
            return
        f = open(self.filename, 'rb')
        snd = resampler = dec = None
        s = f.read(32000)
        t = 0
        while len(s):
            frames = dm.parse(s)
            if frames:
                for fr in frames:
                    # Assume for now only audio streams

                    if dec == None:
                        print dm.getInfo(), dm.streams
                        dec = acodec.Decoder(dm.streams[fr[0]])

                    r = dec.decode(fr[1])
                    if r and r.data:
                        if snd == None:
                            print 'Opening sound with %d channels -> %s' % (
                                r.channels, snds[0]['name'])
                            snd = sound.Output(int(r.sample_rate), r.channels,
                                               sound.AFMT_S16_LE, 0)

                        data = r.data
                        while (self.state == PAUSE):
                            time.sleep(.05)
                        if (self.state == STOP):
                            self.endfunc()
                            return
                        snd.play(data)

            s = f.read(BUFFER_SIZE)

        count = 0
        while snd.isPlaying():
            count = count + 1
            print "playing: ", str(count)
            time.sleep(.05)
            while (self.state == PAUSE):
                time.sleep(.05)
            if (self.state == STOP):
                self.endfunc()
                return

        self.endfunc()
Ejemplo n.º 18
0
def videoDecodeBenchmark( inFile, opt ):
  dm= muxer.Demuxer( inFile.split( '.' )[ -1 ] )
  f= open( inFile, 'rb' )
  s= f.read( 400000 )
  r= dm.parse( s )
  v= filter( lambda x: x[ 'type' ]== muxer.CODEC_TYPE_VIDEO, dm.streams )
  if len( v )== 0:
    raise 'There is no video stream in a file %s' % inFile
  
  v_id= v[ 0 ][ 'index' ]
  print 'Assume video stream at %d index: ' % v_id
  
  a= filter( lambda x: x[ 'type' ]== muxer.CODEC_TYPE_AUDIO, dm.streams )
  if len( a )== 0:
    print 'There is no audio stream in a file %s. Ignoring audio.' % inFile
    opt= 'noaudio'
  else:
    a_id= a[ 0 ][ 'index' ]
  
  t= time.time()
  
  vc= vcodec.Decoder( dm.streams[ v_id ] )
  print dm.streams[ v_id ]
  if opt!= 'noaudio':
    import pymedia.audio.acodec as acodec
    import pymedia.audio.sound as sound
    ac= acodec.Decoder( dm.streams[ a_id ] )
  resampler= None
  frames= 0
  while len( s )> 0:
    for fr in r:
      if fr[ 0 ]== v_id:
        d= vc.decode( fr[ 1 ] )
        if fr[ 3 ]> 0:
          print 'Video PTS', fr[ 3 ]
        if d and d.data:
          frames+= 1
          #ff= open( 'c:\\test', 'wb' )
          #ff.write( d.data[ 0 ] )
          #ff.close()
      elif opt!= 'noaudio' and fr[ 0 ]== a_id:
        d= ac.decode( fr[ 1 ] )
        if resampler== None:
          if d and d.channels> 2:
            resampler= sound.Resampler( (d.sample_rate,d.channels), (d.sample_rate,2) )
        else:
          data= resampler.resample( d.data )

    s= f.read( 400000 )
    r= dm.parse( s )
    
    tt= time.time()- t
    print '%d frames in %d secs( %.02f fps )' % ( frames, tt, float(frames)/tt )
Ejemplo n.º 19
0
    def initVideo(self):
        dm = muxer.Demuxer(self.format)

        #try to get multiple streams of a multiplexed file
        junk = dm.parse(self.rawData[30000])
        if len(dm.streams) == 0:
            #set bitrate
            if self.codec == 'mpeg1video':
                bitrate = 2700000
            else:
                bitrate = 9800000
            self.params= { \
                'type': 0,
                'gop_size': 12,
                'frame_rate_base': 125,
                'max_b_frames': 0,
                'width': 800,
                'height': 600,
                'frame_rate': 3125,
                'deinterlace': 0,
                'bitrate': bitrate,
                'id': vcodec.getCodecID( self.codec )
                }
        elif len(dm.streams) == 1:
            self.params = dm.streams[0]
        else:
            #loop through to find the first video stream in the file
            for vindex in xrange(len(dm.streams)):
                if dm.streams[vindex]['type'] == muxer.CODEC_TYPE_VIDEO:
                    self.params = dm.streams[vindex]
                    break

        print self.params

        try:
            # Set the initial sound delay to 0 for now

            # It defines initial offset from video in the beginning of the stream

            self.initADelta = -1
            self.seekADelta = 0
            # Setting up the HW video codec

            self.vc = ext_codecs.Decoder(self.params)
        except:
            self.vc = vcodec.Decoder(self.params)
            try:
                # Fall back to SW video codec

                self.vc = vcodec.Decoder(self.params)
            except:
                traceback.print_exc()
                self.err.append(sys.exc_info()[1])
Ejemplo n.º 20
0
def demuxer_test(name):
    import pymedia.muxer as muxer
    try:
        dm = muxer.Demuxer(str.split(name, '.')[-1].lower())
        f = open(name, 'rb')
        s = f.read(300000)
        r = dm.parse(s)
        print dm.streams
        if dm.hasHeader():
            print dm.getInfo()
        print 'Passed'
    except:
        traceback.print_exc()
        print '!!!!!!!!!!!!!!!!!!!!!Failed'
Ejemplo n.º 21
0
def play_by_pymedia(sound_file):
    file_type = str.split( sound_file, '.' )[ -1 ].lower()
    #1.二进制方法读取前 10000 个字节,保证能读到第一帧音频数据
    f = open( sound_file, 'rb' )
    data= f.read(4096)
    #data= f.read()

    #2.创建合成器对象,解析出最初的几帧音频数据
    import pymedia.muxer as muxer
    dm = muxer.Demuxer(file_type)
    frames = dm.parse( data )
    #print len(frames)

    #3.根据解析出来的 Mp3 编码信息,创建解码器对象
    import pymedia.audio.acodec as acodec
    #dec = acodec.Decoder( dm.streams[ 0 ] )
    #像下面这样也行
    params = {'id': acodec.getCodecID(file_type), 'bitrate': 128000, 'sample_rate': 44100, 'ext': 'mp3', 'channels': 2}
    dec= acodec.Decoder(params)

    if len(frames) > 1:
        #4.解码第一帧音频数据
        frame = frames[0]
        #音频数据在 frame 数组的第二个元素中
        r= dec.decode( frame[ 1 ] )
        print "sample_rate:%s , channels:%s " % (r.sample_rate,r.channels)
        #注意:这一步可以直接解码 r=dec.decode( data),而不用读出第一帧音频数据
        #但是开始会有一下噪音,如果是网络流纯音频数据,不包含标签信息,则不会出现杂音
    else:
        r=dec.decode(data)

    #5.创建音频输出对象
    import pymedia.audio.sound as sound
    snd = sound.Output( r.sample_rate, r.channels, sound.AFMT_S16_LE )

    #6.播放
    if r: snd.play_all(r.data)

    #7.继续读取、解码、播放
    while True:
        data = f.read(512)
        if len(data)>0:
            r = dec.decode( data )
            if r: snd.play_all(r.data)
        else:
            break

    #8.延时,直到播放完毕
    import time
    while snd.isPlaying(): time.sleep( .5 )
Ejemplo n.º 22
0
def demuxBench( inFile ):
	dm= muxer.Demuxer( inFile.split( '.' )[ -1 ].lower() )
	f= open( inFile, 'rb' )
	s= f.read( 400000 )
	i= len( s )
	t= 0
	r= dm.parse( s )
	while len( s )> 0:
		s= f.read( 400000 )
		tt= time.time()
		r= dm.parse( s )
		t+= time.time()- tt
		i+= len( s )
	
	print 'File %s ( %d bytes ) was demuxed in %2f secs' % ( inFile, i, t )
Ejemplo n.º 23
0
    def main(self):

        dm = muxer.Demuxer(self.extension)

        shutdown = False
        decoder = None
        while self.anyReady() or not shutdown:
            while self.dataReady("inbox"):
                data = self.recv("inbox")

                frames = dm.parse(data)

                for frame in frames:

                    if not decoder:
                        # first time we get data from the demuxer
                        # we create the decoder
                        stream_index = frame[0]
                        decoder = acodec.Decoder(dm.streams[stream_index])

                        # decode our first frame
                        decoded = decoder.decode(frame[1])
                        # output the format of the audio
                        format = {
                            'channels': decoded.channels,
                            'sample_rate': decoded.sample_rate,
                            'format': pyMediaFormat2format[sound.AFMT_S16_LE],
                        }
                        self.send(format, "format")
                    else:
                        # otherwise we just decode a frame
                        decoded = decoder.decode(frame[1])

                    self.send(str(decoded.data), "outbox")

            self.send(4096, "needData")

            while self.dataReady("control"):
                msg = self.recv("control")
                if isinstance(msg, (producerFinished, shutdownMicroprocess)):
                    shutdown = True
                self.send(msg, "signal")

            if not shutdown:
                self.pause()
            yield 1
Ejemplo n.º 24
0
def aplayer( name ):
	import pymedia.audio.acodec as acodec
	import pymedia.audio.sound as sound
        import pymedia.muxer as muxer
	import time
        dm= muxer.Demuxer( name.split( '.' )[ -1 ].lower() )
	f= open( name, 'rb' )
        s= f.read( 90000 )
        frames= dm.parse( s )
        dec= acodec.Decoder( dm.streams[ frames[ 0 ] [ 0 ] ] )
	# dec= acodec.Decoder( str.split( name, '.' )[ -1 ].lower() )
	br= None
	snd= None
	f.seek(0)
	s= f.read( 50000 )
	while len( s ):
		r= dec.decode( s )
		if snd== None:
			print 'Opening sound with %d channels( %d bitrate )' % ( r.channels, r.bitrate )
			snd= sound.Output( r.sample_rate, r.channels, sound.AFMT_S16_LE )
			br= r.bitrate
		if r:
			snd.play( r.data )
		ev= pygame.event.get() 
		s= f.read( 512 )
		for e in ev:
			if e.type== pygame.KEYDOWN: 
				if e.key== pygame.K_RIGHT:
					# Seek forward
					f.seek( SEEK_SEC* br/ 8, 1 )
					dec.reset()
				if e.key== pygame.K_LEFT:
					# Seek forward
					if f.tell()> SEEK_SEC* br/ 8: 
						f.seek( -SEEK_SEC* br/ 8, 1 )
					dec.reset()
				
				if e.key== pygame.K_ESCAPE:
					s= ''
					break
	
	while snd.isPlaying():
	  time.sleep( .05 )
Ejemplo n.º 25
0
def demuxVideo(inFile, outFile):
    dm = muxer.Demuxer(inFile.split('.')[-1].lower())
    f = open(inFile, 'rb')
    fw = open(outFile, 'wb')
    s = f.read(400000)
    r = dm.parse(s)
    v = filter(lambda x: x['type'] == muxer.CODEC_TYPE_AUDIO, dm.streams)
    if len(v) == 0:
        raise 'There is no audio stream in a file %s' % inFile

    a_id = v[0]['index']
    print 'Assume audio stream at %d index: ' % a_id
    while len(s) > 0:
        for fr in r:
            if fr[0] == a_id:
                fw.write(fr[1])

        s = f.read(400000)
        r = dm.parse(s)
Ejemplo n.º 26
0
 def playCash(self, temp):
     try:
         d = None
         dns = 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=ikmdb;Data Source=%s;Persist Security Info=False;Jet OLEDB:System database=%s' % (self._insiderdb, self._sysdb)
         sql = 'SELECT TOP 1 iif ( IsNull(SCardType), "", SCardType ) AS SCardType, iif ( IsNull(InsiderMoney), "", InsiderMoney ) AS InsiderMoney FROM [InsiderInfo] WHERE InsiderNumber = "%s"' % temp['InsiderNumber']
         conn = win32com.client.Dispatch(r'ADODB.Connection')
         conn.Open(dns)
         rs = win32com.client.Dispatch('ADODB.Recordset')
         rs.Open(sql, conn, 1, 3)
         while not rs.EOF:
             d = { }
             d['InsiderMoney'] = string.atof(str(rs('InsiderMoney')).strip())
             d['SCardType'] = string.atoi(str(rs('SCardType')).strip())
             rs.MoveNext()
         rs.Close()
         conn.Close()
         if d:
             d['type'] = 'cash'
             d['level'] = config.memtype[d['SCardType']] + 'CASH'
             temp = d
         else:
             return None
         tt = []
         if self.queue.qsize() == 0:
             tt.append(temp['level'])
         if int(temp['InsiderMoney']) > config.switch_money:
             tt.append(str(int(temp['InsiderMoney'])))
         suffix = '.mp3'
         prefix = config.src
         for tem in tt:
             f = open((prefix + tem + suffix).encode('gbk'), 'rb')
             data = f.read()
             dm = muxer.Demuxer('mp3')
             frames = dm.parse(data)
             dec = acodec.Decoder(dm.streams[0])
             r = dec.decode(data)
             snd = sound.Output(r.sample_rate, r.channels, 32, config.cashSpeaker)
             snd.play(r.data)
             while snd.isPlaying():
                 time.sleep(0.1)
     except BaseException:
         config.logger.error(traceback.format_exc())
Ejemplo n.º 27
0
def dumpVideo(inFile, outFilePattern, fmt):
    dm = muxer.Demuxer(inFile.split('.')[-1])
    i = 1
    f = open(inFile, 'rb')
    s = f.read(400000)
    r = dm.parse(s)
    v = filter(lambda x: x['type'] == muxer.CODEC_TYPE_VIDEO, dm.streams)
    if len(v) == 0:
        raise 'There is no video stream in a file %s' % inFile

    v_id = v[0]['index']
    print 'Assume video stream at %d index: ' % v_id, dm.streams[v_id]
    c = vcodec.Decoder(dm.streams[v_id])
    print 'Decoder created'
    t = time.time()
    while len(s) > 0:
        for fr in r:
            if (i % 100) == 0:
                print '%d frames in %.2f secs (%.2f fps)' % (i, time.time() -
                                                             t, i /
                                                             (time.time() - t))
            if fr[0] == v_id:
                d = c.decode(fr[1])
                # Save file as RGB BMP or YUV
                if d and d.data:
                    if fmt == 2:
                        dd = d.convert(fmt)
                        img = pygame.image.fromstring(dd.data, dd.size, "RGB")
                        pygame.image.save(img, outFilePattern % i)
                    elif fmt == 0:
                        f = open(outFilePattern % i, 'wb')
                        f.write(d.data[0])
                        f.write(d.data[1])
                        f.write(d.data[2])
                        f.close()

                    i += 1

        s = f.read(400000)
        r = dm.parse(s)

    print 'Saved %d frames' % (i - 1)
Ejemplo n.º 28
0
 def run(self):
     f = open(self.addr, 'rb')
     data = f.read(10000)
     dm = muxer.Demuxer(self.codec)
     frames = dm.parse(data)
     print len(frames)
     dec = acodec.Decoder(dm.streams[0])
     frame = frames[0]
     r = dec.decode(frame[1])  #音频数据在 frame 数组的第二个元素中
     print "sample_rate:%s , channels:%s " % (r.sample_rate, r.channels)
     snd = sound.Output(r.sample_rate, r.channels, sound.AFMT_S16_LE)
     if r: snd.play(r.data)
     while True:
         if not self.playing: break
         data = f.read(512)
         if len(data) > 0:
             r = dec.decode(data)
             if r: snd.play(r.data)
         else:
             while snd.isPlaying():
                 time.sleep(.5)
             break
Ejemplo n.º 29
0
    def main(self):

        dm = muxer.Demuxer(self.extension)

        shutdown = False
        decoder = None
        while self.anyReady() or not shutdown:
            while self.dataReady("inbox"):
                data = self.recv("inbox")

                frames = dm.parse(data)

                for frame in frames:

                    if not decoder:
                        stream_index = frame[0]
                        decoder = acodec.Decoder(dm.streams[stream_index])

                    raw = decoder.decode(frame[1])

                    data = {}
                    data['type'] = 'audio'
                    data['audio'] = str(raw.data)
                    data['channels'] = raw.channels
                    data['sample_rate'] = raw.sample_rate
                    data['format'] = mapping_format_from_pymedia[
                        sound.AFMT_S16_LE]
                    self.send(data, "outbox")

            while self.dataReady("control"):
                msg = self.recv("control")
                if isinstance(msg, (producerFinished, shutdownMicroprocess)):
                    shutdown = True
                self.send(msg, "signal")

            if not shutdown:
                self.pause()
            yield 1
def recodeVideo( inFile, outFile, outCodec ):
	dm= muxer.Demuxer( inFile.split( '.' )[ -1 ] )
	f= open( inFile, 'rb' )
	fw= open( outFile, 'wb' )
	s= f.read( 400000 )
	r= dm.parse( s )
	v= filter( lambda x: x[ 'type' ]== muxer.CODEC_TYPE_VIDEO, dm.streams )
	if len( v )== 0:
		raise 'There is no video stream in a file %s' % inFile
	
	v_id= v[ 0 ][ 'index' ]
	print 'Assume video stream at %d index: ' % v_id
	c= vcodec.Decoder( dm.streams[ v_id ] )
	e= None
	while len( s )> 0:
		for fr in r:
			if fr[ 0 ]== v_id:
				d= c.decode( fr[ 1 ] )
				if e== None and d:
					params= c.getParams()
					params[ 'id' ]= vcodec.getCodecID( outCodec )
					# Just try to achive max quality( 2.7 MB/sec mpeg1 and 9.8 for mpeg2 )
					if outCodec== 'mpeg1video':
						params[ 'bitrate' ]= 2700000
					else:
						params[ 'bitrate' ]= 9800000
					# It should be some logic to work with frame rates and such.
					# I'm not aware of what it would be...
					print 'Setting codec to ', params
					e= vcodec.Encoder( params )
				if e and d:
					dw= e.encode( d )
					#print 'Frame size ', len( dw )
					fw.write( dw )
		
		s= f.read( 400000 )
		r= dm.parse( s )