亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? a2dpd.py

?? 藍牙通訊協議中A2DVP應用的程序
?? PY
字號:
#! /usr/bin/env python"""Simple multi-client A2DP  server*  Copyright (C) 2006  Sergei Krivov <krivov@yahoo.com>**  This program is free software; you can redistribute it and/or modify*  it under the terms of the GNU General Public License as published by*  the Free Software Foundation; either version 2 of the License, or*  (at your option) any later version.**  This program is distributed in the hope that it will be useful,*  but WITHOUT ANY WARRANTY; without even the implied warranty of*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the*  GNU General Public License for more details.**  You should have received a copy of the GNU General Public License*  along with this program; if not, write to the Free Software*  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.""""""be sure to have installed:libsbc (http://sbc.sf.net); check for /usr/lib/libsbc.so.pybluez (http://org.csail.mit.edu/pybluez/)put this in your .asoundrc filepcm.a2dpcopy {            type plug            slave {                  pcm "tee:default,'/tmp/a2dpipe', raw"                  rate 48000                  channels 2             }}pcm.a2dp {            type plug            slave {                  pcm "file:'/tmp/a2dpipe', raw"                  rate 48000                  channels 2             }}make pipe by: mkfifo /tmp/a2dpipestart by python a2dpd.pystop by killing the processselect alsa output pcm device a2dpcopyfor mplayer: -ao alsa:device=a2dpcopyIn such setup the sound will be present in the alsa default deviceand be copied to the headphones. The sound timing is driven by alsa,if headphones are disconnected or out of reach the server will justdrop packets, and alsa device will notice nothing. The sound betweenalsa device and the headphones is out of sync by constant delayof about 800 ms.To send sound just to headphones select alsa output pcm device a2dpand set ismaster=1 close to the end of this file.If the server uses alsa timing (i.e., ismaster==0), some dropoutscan be experienced due to (if) the timing differencesin alsa and headphones.A2DP server works with many ACP (headphones) simultaneously if thedefault link policy is set up as master, i.e., setlm master in /etc/bluetooth/hcid.conf To initiate connection with the server press PLAY button on headphones.To stop connection just switch off the headphones."""import structimport ctypesimport timeimport threadingimport avdtpimport bluetoothimport arrayimport gcimport osimport avrcp_lircdimport pyDaemonimport ConfigParser##### useful functions ################################################################################class timer:  def __init__(self):    self.time=time.time()    self.tsend=0  def dt(self):    return (time.time()-self.time)*1000000  def start(self):    self.time=time.time()    def time_to_wait(self,dt):    tc=time.time()*1000000    if self.tsend<tc+2000: # time has come, 2000 to be in the middle of 4 ms resolution      self.tsend+=dt      if tc>self.tsend+dt*20:# current time > time to send next packet        print "OUT OF SYNC tc-tsend=%g>0" %(tc-self.tsend)        self.tsend=tc+dt      return 0# time has come, nothing to wait    else: return self.tsend-tc   ### A2DP server code ###############################pipeclosed=0class reading_thread ( threading.Thread ):  def __init__ ( self, pipename, ldata):    self.pipename=pipename     self.ldata=ldata     threading.Thread.__init__ ( self )  def run (self):    global ldata_lock    global ismaster    mdata=10    mread=4096    pipe=open(self.pipename,'rb',0)    pipeclosed=0    while True:      data=pipe.read(mread)      if len(data)==0:        self.ldata.append(data) # to indicate the end of stream        if deb: print "closed pipe"        pipe.close()        pipe=open(self.pipename,'rb',0)        if deb: print "opened pipe"        pipeclosed=0      while ismaster and len(self.ldata)>mdata:time.sleep(0.0001)      if len(self.ldata)<=mdata:        ldata_lock.acquire()        self.ldata.append(data)        ldata_lock.release()        def update_minmax(var,val):  if var==None:return val,val  else: return min(var[0],val),max(var[1],val)class encoding_thread( threading.Thread ):  def __init__ ( self, ldata, lpackets,codec,commands=[]):    self.ldata=ldata     self.lpackets=lpackets    self.codec=codec    self.commands=commands    threading.Thread.__init__ ( self )      def run (self):    global ldata_lock    global lpackets_lock    packet_header_size=13    min_encoding_size=512    mtu=672    mpackets=5    seq_number=0    frame_count=0    timestamp=0    buf=(ctypes.c_ubyte*mtu)()    lenbuf=0    data=""    elapsedtime=0    mmdata=None    mmpackets=None    timer1=timer()    igc=0    gc.disable()    pipeclosed=0    while True:      igc+=1      if (igc>100 and len(lpackets)==0) or igc>150:        gc.collect()        igc=0      time.sleep(0.00001) # some sleep      if 'quit' in commands: break      mmdata=update_minmax(mmdata,len(ldata))      mmpackets=update_minmax(mmpackets,len(lpackets))      if len(ldata)>0 and len(lpackets)<mpackets:        ldata_lock.acquire()        rdata=ldata[0]        del ldata[0]        ldata_lock.release()        if len(rdata)==0:pipeclosed=1        adata=array.array('H')#change endiannes        adata.fromstring(rdata)        adata.byteswap()        rdata=adata.tostring()        data+=rdata#      while len(data)>=min_encoding_size: #encode      dry=pipeclosed and len(data)==0      while len(data)>0 or dry: #encode        dry=pipeclosed and len(data)==0 and lenbuf>0        l,pendata,lendata,duration=self.codec.encode(data)        data=data[l:]        if lenbuf+lendata+packet_header_size>mtu or dry: #enough for packet          packetdata=(ctypes.c_ubyte*lenbuf)()          ctypes.memmove(packetdata,buf,lenbuf)          packet=avdtp.media_packet(packetdata,int(timestamp),frame_count,seq_number)          par=self.codec.par          duration2=1000000.*par.subbands*par.block_length/par.frequency          duration2=duration2*frame_count          lpackets_lock.acquire()          self.lpackets.append((duration2,packet))          lpackets_lock.release()          timestamp=elapsedtime # for the following packet          seq_number=(seq_number+1) & 0xffff          lenbuf=0          frame_count=0          if seq_number%1024==0:            if deb: print "%i packets,dt per packet=%g<>%g ms,ldata=[%i:%i],lpackets=[%i:%i]"\              %(1024,timer1.dt()/1024,duration2,mmdata[0],mmdata[1],mmpackets[0],mmpackets[1])            timer1.start()            mmdata=None            mmpackets=None        ctypes.memmove(ctypes.addressof(buf)+lenbuf,pendata,lendata)        lenbuf+=lendata        frame_count+=1        elapsedtime+=duration        if dry and len(data)==0 and lenbuf==0:pipeclosed=0class sending_thread(threading.Thread):  def __init__ ( self, lpackets,lacp,commands=[]):    self.lpackets=lpackets    self.lacp=lacp    self.commands=commands    threading.Thread.__init__ ( self )  def run (self):    global lpackets_lock    timer0=timer()    while True:      while len(self.lpackets)==0 or len(self.lacp)==0: time.sleep(0.0001)      lpackets_lock.acquire()      dt,packet=self.lpackets[0]      del self.lpackets[0]      lpackets_lock.release()      while timer0.time_to_wait(dt):time.sleep(0.001)      for acp in self.lacp:          try:            avdtp.send_packet(acp.stream,packet)          except bluetooth.BluetoothError: # close and remove dead ACP            if deb: print "stream error ",acp.addr            acp.stream.close()            acp.sock.close()            if deb: print "close stream ",acp.addr            try: lacp.remove(acp)            except: pass            if deb: print "remove stream, number of ACP ",len(lacp) class acp_listen_thread(threading.Thread):  def __init__ ( self, acp):    self.acp=acp    threading.Thread.__init__ ( self )  def run(self):    while True:      try:        resp=avdtp.receive_response(self.acp.sock,avdtp.message_single)        if resp.header.signal_id==avdtp.AVDTP_CLOSE:          if deb:            print "received AVDTP_CLOSE ", self.acp.addr             break        avdtp.print_fields(resp)      except bluetooth.BluetoothError: # close and remove dead ACP        break    if deb: print "removing ACP ", self.acp.addr     self.acp.stream.close()    self.acp.sock.close()    try: self.acp.lacp.remove(self.acp)    except: pass    if deb:print 'number of ACP', len(lacp)  class acp: # container class to keep information about ACP  def __init__(self,addr,codecs,lacp):    self.addr=addr    self.lacp=lacp    self.stream,self.sock,self.seid,self.codec=connect(addr,codecs)    self.listen_thread=acp_listen_thread(self)      self.listen_thread.start()        def connect(addr,codecs):  """connects to a2dp sink on address addr """  sock=avdtp.avdtp_connect(addr,25) # connect to the ACP side  lsep=avdtp.avdtp_discover(sock) # discover set of codecs on ACP side  seid,codec=avdtp.avdtp_set_configuration(sock,lsep,codecs) # select and set codec parameters  stream=avdtp.avdtp_open(addr,sock,seid) # open audio stream  avdtp.avdtp_start(sock,seid) #start audio stream  return stream,sock,seid,codecdef avdtp_discover_abort(sock):  cmd=avdtp.receive_response(sock,avdtp.message_single)  cmd.header.message_type=avdtp.MESSAGE_TYPE_COMMAND  cmd.header.signal_id=avdtp.AVDTP_ABORT  avdtp.send_packet(sock,cmd)def advertise_a2dp():  """advertise a2dp source"""  server_sock=bluetooth.BluetoothSocket( bluetooth.L2CAP )  port=25  server_sock.bind(("",port))  server_sock.listen(1)  if deb:print "listening on port %d" % port  uuid = "110a"  profile=[bluetooth.ADVANCED_AUDIO_PROFILE]  classes=[bluetooth.AUDIO_SOURCE_CLASS,]  bluetooth.advertise_service( server_sock, "Audio Source", service_id = "", service_classes = [], \        profiles = [], provider = "", description = "")  client_sock,(address,port) = server_sock.accept()  if deb: print "Accepted connection from ",address  return client_sock,address,portdef set_realtime():  libc=ctypes.CDLL('libc.so.6')  SCHED_FIFO=1  schp=ctypes.c_int(libc.sched_get_priority_max(SCHED_FIFO))  if libc.sched_setscheduler(0,SCHED_FIFO,ctypes.byref(schp)):    print "can not set realtime privs, do you have root privs?"    return 0  else:    print "successfully set realtime privs"    return 1    if __name__=="__main__":  pyDaemon.createDaemon()  cfg=ConfigParser.ConfigParser()  cfg.read('/etc/a2dpd.conf')  def getval(var,default):    if cfg.has_option('a2dpd',var): return eval(cfg.get('a2dpd',var))    else: return default  ismaster=getval('ismaster',0)  deb=getval('deb',0)  bitpool=getval('bitpool',32)  freq=getval('freq',48000)  myaddr=getval('myaddr',[])  RT=set_realtime()  avdtp.deb=deb  lacp=[]  commands=[]  ldata=[]  lpackets=[]  ldata_lock=threading.Lock()  lpackets_lock=threading.Lock()  sbc_codec=avdtp.sbc(freq,2,bitpool=bitpool) # initialize sbc codec  codecs={avdtp.SBC_MEDIA_CODEC_TYPE:sbc_codec} # list the available codecs  avrcp_lircd.deb=deb  lircd=avrcp_lircd.lircd_emu()  avrcp=avrcp_lircd.avrcp_server(lircd.send)  avrcp.start()      reader=reading_thread('/tmp/a2dpipe',ldata)  reader.start()  encoder=encoding_thread(ldata,lpackets,sbc_codec,commands)  encoder.start()  for addr in myaddr:    try: lacp.append(acp(addr,codecs,lacp))     except bluetooth.BluetoothError,what:      if deb:print 'BluetoothError: %s '  %(what)        sender=sending_thread(lpackets,lacp,commands)  sender.start()  while True: #  dynamically manages new ACP#  to initiate connection press PLAY button on the headphones    sock2,addr,port=advertise_a2dp()    avdtp_discover_abort(sock2)      sock2.close()    try:      lacp.append(acp(addr,codecs,lacp))    except bluetooth.BluetoothError,what:      if deb: print 'BluetoothError: %s, try again', what      if deb: print 'number of ACP', len(lacp)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区观看| ...中文天堂在线一区| 依依成人综合视频| 欧美亚洲综合网| 一区二区三区四区在线播放| 欧美日韩一区二区三区不卡| 激情综合五月婷婷| 国产精品伦理一区二区| 在线日韩一区二区| 精品一区二区免费视频| 久99久精品视频免费观看| 久久国产精品99精品国产 | 暴力调教一区二区三区| 日韩美女视频一区二区 | 色综合天天综合在线视频| 亚洲国产精品视频| 久久一二三国产| 欧美色图激情小说| 日韩一区二区中文字幕| 91麻豆自制传媒国产之光| 精品一区二区综合| 粉嫩欧美一区二区三区高清影视| 亚洲国产乱码最新视频 | 国产亚洲va综合人人澡精品 | 国产不卡视频在线播放| 99天天综合性| 欧美群妇大交群中文字幕| 成人性生交大合| 国产一区二区三区精品欧美日韩一区二区三区 | 久久久久久久综合色一本| 欧美日本高清视频在线观看| 精品国产乱码久久久久久久久| 在线观看免费成人| 精品少妇一区二区三区在线播放| 欧美亚洲国产一区二区三区| 欧美本精品男人aⅴ天堂| 国产精品乱码一区二三区小蝌蚪| 香蕉av福利精品导航| 一区二区三区四区亚洲| 久久精品国产亚洲一区二区三区| 91猫先生在线| 亚洲国产精品国自产拍av| 久久久三级国产网站| 亚洲精品视频一区| 粉嫩欧美一区二区三区高清影视| 欧美久久久久久久久| 欧美专区日韩专区| 欧美—级在线免费片| 日本免费新一区视频| 日精品一区二区| 理论电影国产精品| 欧美影院精品一区| 亚洲人123区| 亚洲一二三专区| 偷拍与自拍一区| 日韩精品成人一区二区三区| 99国内精品久久| 欧美日韩激情一区二区三区| 国产精品欧美一区二区三区| 麻豆成人91精品二区三区| 国产馆精品极品| 日本久久电影网| 日韩一区国产二区欧美三区| 亚洲成人免费在线观看| 色嗨嗨av一区二区三区| 亚洲欧美一区二区三区孕妇| eeuss鲁片一区二区三区在线看| 国产亚洲视频系列| 国产福利一区二区| 久久女同精品一区二区| 美女免费视频一区| 日韩视频在线一区二区| 久久成人av少妇免费| 日韩一区二区三区免费看| 日本sm残虐另类| 99久久综合精品| 中文字幕一区日韩精品欧美| 99r国产精品| 夜夜嗨av一区二区三区四季av| 一本到不卡精品视频在线观看| 欧美一区国产二区| 国产精品超碰97尤物18| 男人的j进女人的j一区| 欧美大黄免费观看| 一区二区三区四区精品在线视频| 色综合中文字幕国产 | 暴力调教一区二区三区| 综合精品久久久| 在线视频一区二区三区| 视频一区二区不卡| 精品国产乱码久久久久久1区2区| 国产精品自拍一区| 欧美日韩精品一区视频| 日本在线不卡一区| 久久午夜羞羞影院免费观看| 从欧美一区二区三区| 亚洲色图色小说| 日韩一区二区三区电影在线观看| 精品一区二区三区久久| 1区2区3区精品视频| 欧美午夜在线观看| 九九久久精品视频| 国产精品久久久99| 欧美性受xxxx黑人xyx性爽| 蜜臀久久99精品久久久久宅男| 久久久天堂av| 欧美视频一区二区三区四区| 极品少妇一区二区三区精品视频| 国产精品丝袜91| 91精品婷婷国产综合久久性色| 亚洲猫色日本管| 欧美成人精品二区三区99精品| 成人97人人超碰人人99| 欧美国产成人在线| 91麻豆精品久久久久蜜臀| 成人黄色软件下载| 美日韩一级片在线观看| 亚洲黄一区二区三区| 国产亚洲欧美色| 欧美男同性恋视频网站| 成人禁用看黄a在线| 麻豆91在线观看| 亚洲成人一区二区| 亚洲男人天堂av| 国产清纯白嫩初高生在线观看91 | 黄网站免费久久| 久久久亚洲综合| 欧美一区二区三区的| 91福利在线播放| 91日韩在线专区| 丰满放荡岳乱妇91ww| 久草这里只有精品视频| 日本不卡一区二区| 亚洲综合在线第一页| 国产精品久久久久婷婷二区次| 日韩精品在线一区二区| 欧美乱妇一区二区三区不卡视频| 91啪九色porn原创视频在线观看| 国产在线精品不卡| 久久黄色级2电影| 天天做天天摸天天爽国产一区| 亚洲人123区| 亚洲女同一区二区| 亚洲激情欧美激情| 亚洲综合偷拍欧美一区色| 亚洲欧美另类在线| 自拍视频在线观看一区二区| √…a在线天堂一区| 中文字幕欧美一| 亚洲免费观看高清完整版在线| 日韩一区在线免费观看| 亚洲免费伊人电影| 一区二区三区视频在线观看| 一区二区三区日韩| 婷婷成人激情在线网| 青椒成人免费视频| 久久99热99| 高清不卡一二三区| 成人美女视频在线观看18| 成人国产免费视频| 色哟哟精品一区| 欧美色精品天天在线观看视频| 欧美日韩色一区| 在线播放视频一区| 26uuu欧美| 国产女同互慰高潮91漫画| 日韩美女视频19| 亚洲第一二三四区| 久久精品国产**网站演员| 国产高清不卡二三区| 不卡的av网站| 欧美日韩精品电影| 精品国产乱码久久久久久久久| 国产精品视频看| 夜色激情一区二区| 狠狠色丁香婷婷综合久久片| 成人午夜视频在线观看| 在线观看欧美精品| 精品国产百合女同互慰| 亚洲天堂成人在线观看| 视频在线观看91| 国产成都精品91一区二区三| 欧美一a一片一级一片| 精品1区2区在线观看| 亚洲欧美视频一区| 黄色资源网久久资源365| 色素色在线综合| 精品国产一二三区| 亚洲激情图片一区| 国产一区二区调教| 欧美性三三影院| 欧美国产日产图区| 日韩电影在线免费看| 99久久精品免费看| 久久久久综合网| 亚洲成人av一区| 91视频精品在这里| 久久久久久夜精品精品免费| 日韩精品乱码免费| 在线中文字幕不卡|