Объявление

Свернуть
Пока нет объявлений.

Enigma2 IPcam- Plugin (своими руками: ipcam - сам)

Свернуть
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Enigma2 IPcam- Plugin (своими руками: ipcam - сам)



    --------

    делаю миниплаг для показа фотки с иптв камеры


    Код:
    from Screens.Screen import Screen
    from Components.ActionMap import NumberActionMap
    from Components.Pixmap import Pixmap
    from Plugins.Plugin import PluginDescriptor
    import os
    from Tools.LoadPixmap import LoadPixmap
    
    class IPcam(Screen):
    	skin = """
    		<screen position="100,100" size="640,520" title="IPcam" >
    		<widget name="webpic" position="0,20" size="640,480" /> 
    		<!-- <ePixmap position="0,20" size="640,480" pixmap="/tmp/webcam.jpg" zPosition="1" transparent="1" alphatest="blend" /> -->
    		</screen>"""
    	def __init__(self, session, args = None):  
     
    		self.skin = IPcam.skin  
     	
    		Screen.__init__(self, session) 
    		
    		self["webpic"] = Pixmap() 
    		
    		self["actions"] = NumberActionMap(["WizardActions", "InputActions"],
    		{
    		"ok": self.ok,
    		"back": self.back  
    		}, -1)
    
     	 
    
    	def ok(self): 
    		cmd = "wget http://192.168.178.38/img/snapshot.c...&quality=1 -O /tmp/webcam.jpg" 
    		self.setTitle("ok")
    		os.system(cmd) 
    		#pngs only self["webpic"].instance.setPixmapFromFile("/tmp/webcam.jpg") 
    		self["webpic"].instance.LoadPixmap("/tmp/webcam.jpg") 
    		self.setTitle("showwww")
    
    		 	
      
      
    			
    	def back(self): 
    		self.setTitle(_("back"))
    		self.close()		  
    		
    
    def main(session, **kwargs):
    	session.open(IPcam)
    
    def Plugins(**kwargs):
    	return [ PluginDescriptor(name="IPcam", description="plugin to watch ipcam image", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main, icon="plugin.png")]
    .instance.setPixmapFromFile пашет без проблем с пнг файлом, с jpg не идет


    ---------


    http://www.linksysbycisco.com/DE/de/support/WVC54GCA
    Обсуждение всех нюансов развода в Германии. www.razvod.net

  • #2
    Re: Не могу показать в плагине .JPG фотку

    вроде как получилось с косяками, но показывает

    Код:
    from Screens.Screen import Screen
    from Components.ActionMap import NumberActionMap
    from Components.Pixmap import Pixmap
    from Plugins.Plugin import PluginDescriptor
    import os
    from enigma import ePicLoad
    from Components.AVSwitch import AVSwitch
    
    
    
    class IPcam(Screen):
    	skin = """
    		<screen position="100,100" size="640,520" title="IPcam" >
    		<widget name="webpic" position="0,20" size="640,480" /> 
    		<!-- <ePixmap position="0,20" size="640,480" pixmap="/tmp/webcam.jpg" zPosition="1" transparent="1" alphatest="blend" /> -->
    		</screen>"""
    	def __init__(self, session, args = None):   
      
    		self.skin = IPcam.skin   
     	
    		Screen.__init__(self, session) 
    		
    		self["webpic"] = Pixmap() 
    		self.picload = ePicLoad() 
    
    		
    		self["actions"] = NumberActionMap(["WizardActions", "InputActions"],
    		{
    		"ok": self.ok,
    		"back": self.back   
    		}, -1)
    
     	 
    
    	def ok(self): 
    		cmd = "wget http://192.168.178.38/img/snapshot.c...&quality=1 -O /tmp/webcam.jpg"  
    		self.setTitle("ok")
    		os.system(cmd)   
    		picture = "/tmp/webcam.jpg"
    		picload = self.picload
    		sc = AVSwitch().getFramebufferScale()
    		picload.setPara((640, 480, sc[0], sc[1], 0, 0, '#ff000000'))
    		picload.startDecode(picture)	
    		ptr = self.picload.getData()
    		if ptr:
    		  self["webpic"].instance.setPixmap(ptr.__deref__())
    
    			
    	def back(self): 
    		self.setTitle(_("back"))
    		self.close()		  
    		
    
    def main(session, **kwargs):
    	session.open(IPcam)
    
    def Plugins(**kwargs):
    	return [ PluginDescriptor(name="IPcam", description="plugin to watch ipcam image", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main, icon="plugin.png")]
    Обсуждение всех нюансов развода в Германии. www.razvod.net

    Комментарий


    • #3
      Re: IPCAM - Plugin (Не могу показать в плагине .JPG фотку)

      попытаюсь сегодня разобраться с зеленкой, которая выскакивает про многократном нажатии кнопки ок (обновление картинки)
      может стоит грузить картинку без wget...

      приделать старт видео
      Код:
         test = "rtsp://192.168.178.38/img/video.sav"
         self.session.nav.stopService()
         self.setTitle(test) 
         sref = eServiceReference(4097, 0, test) 
         self.session.nav.playService(sref)
      во время решения проблемы с jpeg я подглядывал сюда
      Обсуждение всех нюансов развода в Германии. www.razvod.net

      Комментарий


      • #4
        Re: Enigma2 IPCAM - Plugin (своими руками)

        если кому охото поиграться, то вот вам преальфа

        распаковываем, закисываем папку ipcam в
        /usr/lib/enigma2/python/Plugins/Extensions

        даем права 755 (каким именно файлам я не знаю, поэтому я даю всем)

        Код:
        root@vusolo:~# chmod 755 /usr/lib/enigma2/python/Plugins/Extensions/*
        вставляем в файле plugin.py
        stream_url = "rtsp://192.168.178.38/img/video.sav"
        в кавычки свой стрим
        перегружаем оболочку

        Код:
        root@VU+DUO:~# init 4 
        root@VU+DUO:~# init 3
        идем в плагины



        и проверяем, жрет ли ваш стрим внутренний плеер энигмы.

        стрим стартует автоматом, работает только кнопка выход.


        удачи
        Вложения
        Обсуждение всех нюансов развода в Германии. www.razvod.net

        Комментарий


        • #5
          Re: Enigma2 IPCAM - Plugin (своими руками)

          Capturing frames from a webcam on Linux

          вот переделал скрипт под себя,
          типо бесконечный скрипт, который качает картинку с моей камеры и конвертирует её в пнг формат.
          это не обязательно, можно и размер уменьшить, но я получаю ео уже в формате 160х120, что вполне приемлимо

          Код:
          import urllib2
          import sys
          from StringIO import StringIO
          
          
          try:
           from PIL import Image
          except Exception,e:
           print "Python Image Libary not installed!",e
           sys.exit()
          
          
          def convertimage():    
          	folder = 'images/'
          	imagefile ="http://xxxxxxxxxxxx/img/snapshot.cgi...uality=3"
          	print imagefile
          	while True:
          		try:
          			content = urllib2.urlopen(imagefile)
          			im = Image.open(StringIO(content.read()))			
          			#im.thumbnail([160,120])
          			im = im.convert(mode="P",colors=8)
          			new_imagename = 'cam.png'
          			im.save(folder+new_imagename,"PNG")
          		except IOError,e:
          			print "Error while converting:",e
          			return False 		
          
          
          			
          if __name__ == '__main__':
          	convertimage()
          проверял пока только на компе
          Обсуждение всех нюансов развода в Германии. www.razvod.net

          Комментарий


          • #6
            Re: Enigma2 IPCAM - Plugin (своими руками)

            Код:
            from Screens.Screen import Screen
            from Components.ActionMap import NumberActionMap
            from Plugins.Plugin import PluginDescriptor
            from enigma import eServiceReference 
            import urllib 
            import os 
            
            
            
            	
            def autostart(reason, **kwargs):
              global session
              if reason == 0 and kwargs.has_key("session"):
                session = kwargs["session"]
                session.open(ipcam_startup)
            
            def ipcam_startup(Screen):
            	while True:
            		try:
            			#print 'ok'  
            			ipcam_image ='http://192.168.178.38/img/snapshot.c...uality=3'    
            			ipcam_file = urllib.urlopen(ipcam_image)
            			raw = ipcam_file.read()
            			temp_file = open("/tmp/ipcam.jpg", "wb")
            			temp_file.write(raw)
            			temp_file.close()
            		except IOError,e:
            			print "Error while loading:",e
            			break
            вот кусочек автостарта идет бесконечный процесс по загрузке картинки с моей камеры.
            всё вроде как идет по плану. следующий шаг это вызов плага с пульта в любом меню/состоянии
            Обсуждение всех нюансов развода в Германии. www.razvod.net

            Комментарий


            • #7
              Re: Enigma2 IPCAM - Plugin (своими руками)

              уже и этот первый шаг обосрался.
              когда фотка качается в автостарте бесконечно, то не грузитсй дальше сама энигма
              Обсуждение всех нюансов развода в Германии. www.razvod.net

              Комментарий


              • #8
                Re: Enigma2 IPCAM - Plugin (своими руками)

                шаг вперед и два назад

                сейчас имею слдующее:

                стартую плаг
                получаю в окошке старую картинку
                при нажатии ок идет видео

                не знаю пока, как сделать так, чтобы в окошке оновлялась картинка

                Код:
                from Screens.Screen import Screen
                from Components.ActionMap import NumberActionMap
                from Plugins.Plugin import PluginDescriptor
                from enigma import eServiceReference 
                import urllib 
                import os 
                
                
                
                def autostart(reason, **kwargs):
                  global session
                  if reason == 0 and kwargs.has_key("session"):
                    session = kwargs["session"]
                    ipcam_startup()
                
                def ipcam_startup():
                	print '---------------------------------------- make snapshot ----------------------------------------------'  
                	ipcam_image ='http://192.168.178.38/img/snapshot.c...quality=3'    
                	ipcam_file = urllib.urlopen(ipcam_image)
                	raw = ipcam_file.read()
                	temp_file = open("/tmp/ipcam.jpg", "wb")
                	temp_file.write(raw)
                	temp_file.close()
                
                
                class IPcam(Screen):
                		
                	skin = """
                	<screen position="90,90" size="150,110" title="IPcam">
                	<ePixmap position="0,0" size="160,120" pixmap="/tmp/ipcam.jpg" zPosition="1" transparent="1" alphatest="blend" />
                	</screen>""" 
                	
                	def __init__(self, session, args = None): 
                
                		self.skin = IPcam.skin
                
                		Screen.__init__(self, session) 
                
                		self["actions"] = NumberActionMap(["WizardActions", "InputActions"],
                		{
                		"ok": self.playstream, 
                		"back": self.back,
                		"right" : self.make_image
                		}, -1)  
                
                	def make_image(self):
                		print 'make_image ok'  
                		ipcam_image ='http://192.168.178.38/img/snapshot.c...quality=3'    
                		ipcam_file = urllib.urlopen(ipcam_image)
                		raw = ipcam_file.read()
                		temp_file = open("/tmp/ipcam.jpg", "wb")
                		temp_file.write(raw)
                		temp_file.close() 
                		self.skin = IPcam.skin
                		
                	
                	def playstream(self):    
                		#H.264 
                		stream_url = "rtsp://192.168.178.38/img/video.sav" 
                		self.session.nav.stopService() 
                		sref = eServiceReference(4097, 0, stream_url) 
                		self.session.nav.playService(sref) 
                
                	def back(self):  
                		self.session.nav.stopService()
                		self.close()		  
                
                def main(session, **kwargs):
                	session.open(IPcam)
                
                def Plugins(**kwargs):
                	#return [ PluginDescriptor(name="IPcam", description="plugin to watch ipcam stream", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main, icon="plugin.png")]
                	list = [PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, fnc = autostart)]	
                	list.append(PluginDescriptor(name="IPcam", description=_("plugin to watch ipcam stream"), where = [PluginDescriptor.WHERE_PLUGINMENU], fnc=main, icon="plugin.png"))
                	return list
                нажал на право, вышел из плага, захожу в плаг, есть новая картинка.
                буду искать решение для обновления картинки не выходя из плага



                Обсуждение всех нюансов развода в Германии. www.razvod.net

                Комментарий


                • #9
                  Re: Enigma2 IPcam- Plugin (своими руками: ipcam - сам)

                  не понимаю косяк с обновлением

                  Код:
                  	def make_image(self):
                  		print 'make_image 1'
                  		self.setTitle('new image')
                  		ipcam_image ='http://192.168.178.38/img/snapshot.c...uality=3'   
                  		ipcam_file = urllib.urlopen(ipcam_image)
                  		raw = ipcam_file.read()
                  		temp_file = open('/tmp/ipcam.jpg', "wb")
                  		temp_file.write(raw)
                  		temp_file.close()
                  
                  		try:			 
                  			picture = "/tmp/ipcam.jpg"
                  			picload = self.picload
                  			sc = AVSwitch().getFramebufferScale()
                  			#0=Width 1=Height 2=Aspect 3=use_cache 4=resize_type 5=Background(#AARRGGBB)
                  			picload.setPara((160, 120, sc[0], sc[1], 0, 0, '#ff000000'))
                  			picload.startDecode(picture)
                  				
                  			ptr = self.picload.getData() 
                  			if ptr:
                  		 		self["snapshot"].instance.setPixmap(ptr.__deref__()) 
                  			self["snapshot"].show()
                  картинка появляется только после повторного нажатия кнопки
                  при первом нажатие заговок обновляется, но нет картинки.

                  action -> WizardActions right
                  make_image 1
                  [Picload] setPara max-X=160 max-Y=120 aspect_ratio=1.000000 cache=0 resize=0 bg=#FF000000
                  before: 1
                  after: 1
                  [Picload] decode picture... /tmp/ipcam.jpg

                  action -> WizardActions right
                  make_image 1
                  [Picload] setPara max-X=160 max-Y=120 aspect_ratio=1.000000 cache=0 resize=0 bg=#FF000000
                  [Picload] thread running
                  ну а если нажимаю слишком часто, то попадаю в зад, рес выходит в зеленку

                  хз, может между конвертированием и показом нужно установить паузу..
                  Обсуждение всех нюансов развода в Германии. www.razvod.net

                  Комментарий


                  • #10
                    Re: Enigma2 IPcam- Plugin (своими руками: ipcam - сам)

                    млять какойто гемор

                    Код:
                    			ptr = None	
                    			 
                    			while ptr is None:
                    				print ptr 
                    				ptr = self.picload.getData()
                    в итоге всё крутится пару секунд, потом появляется картинка и потом зеленка...

                    None[Picload] decode picture... /tmp/ipcam.jpg

                    <enigma.gPixmapPtr; proxy of <Swig Object of type 'ePtr< gPixmap > *' at 0x13c67a0> >
                    make_image setPixmap
                    PC: 0051e670
                    Обсуждение всех нюансов развода в Германии. www.razvod.net

                    Комментарий


                    • #11
                      Re: Enigma2 IPcam- Plugin (своими руками: ipcam - сам)

                      получилось с горем пополам показывать картинку в секунду, чего мне вполне достаточно
                      при старте плагина видим пустое окно справа.
                      при нажатии кнопки влево врубается "видео" в правом окошке, при нажатии кнопки окей
                      стартует видео в главном экране



                      Spoiler

                      from Screens.Screen import Screen
                      from Components.ActionMap import NumberActionMap
                      from Plugins.Plugin import PluginDescriptor
                      from enigma import eServiceReference
                      import urllib
                      import os
                      from Components.Pixmap import Pixmap
                      from enigma import eTimer, ePicLoad
                      from Components.AVSwitch import AVSwitch
                      from time import time, strftime, gmtime
                      from twisted.web.client import downloadPage
                      from Screens.MessageBox import MessageBox

                      def autostart(reason, **kwargs):
                      global session
                      if reason == 0 and kwargs.has_key("session&quot:
                      session = kwargs["session"]
                      ipcam_startup()

                      def ipcam_startup():
                      print '---------------------------------------- make snapshot ----------------------------------------------'
                      ipcam_image ='http://192.168.178.38/img/snapshot.c...quality=3'
                      ipcam_file = urllib.urlopen(ipcam_image)
                      raw = ipcam_file.read()
                      temp_file = open("/tmp/ipcam.jpg", "wb&quot
                      temp_file.write(raw)
                      temp_file.close()


                      class IPcam(Screen):

                      skin = """
                      <screen position="1070,570" size="150,110" title="IPcam">
                      <widget name="snapshot" position="0,0" size="160,120"/>
                      </screen>"""

                      def __init__(self, session, args = None):

                      self.skin = IPcam.skin

                      self["snapshot"] = Pixmap()
                      self.picload = ePicLoad()

                      Screen.__init__(self, session)

                      self["actions"] = NumberActionMap(["WizardActions", "InputActions"],
                      {
                      "ok": self.playstream,
                      "back": self.back,
                      "right" : self.makeImage,
                      "left" : self.showImage
                      }, -1)

                      self.loadinginprogress = False
                      self.picfile = "/tmp/ipcam.jpg"

                      self.ThumbTimer = eTimer()
                      self.ThumbTimer.callback.append(self.showImage)

                      def showImage(self):
                      print 'showImage'
                      time = strftime("%H-%M-%S", gmtime())
                      self.setTitle(time)
                      picture = self.picfile
                      picload = self.picload
                      sc = AVSwitch().getFramebufferScale()
                      picload.setPara((160, 120, sc[0], sc[1], 0, 0, '#ff000000&#39)
                      l = picload.PictureData.get()
                      del l[:]
                      l.append(self.getImage)
                      picload.startDecode(picture)
                      self.ThumbTimer.start(1000, True)

                      def getImage(self, picInfo = None):
                      downloadPage('http://192.168.178.38/img/snapshot.c...ipcam.jpg').addCallback(self.downloadDone).addErrback(self.d ownloadError)
                      print 'getImage'
                      ptr = self.picload.getData()
                      if ptr:
                      self["snapshot"].show()
                      self["snapshot"].instance.setPixmap(ptr.__deref__())
                      else:
                      self["snapshot"].hide()

                      def makeImage(self):
                      print 'make_image'
                      self.setTitle('new image&#39
                      ipcam_image ='http://192.168.178.38/img/snapshot.c...quality=3'
                      ipcam_file = urllib.urlopen(ipcam_image)
                      raw = ipcam_file.read()
                      temp_file = open('/tmp/ipcam.jpg', "wb&quot
                      temp_file.write(raw)
                      temp_file.close()

                      def downloadDone(self):
                      self.setTitle('ok&#39

                      def downloadError(self):
                      self.setTitle('not ok&#39

                      def playstream(self):
                      #H.264
                      stream_url = "rtsp://192.168.178.38/img/video.sav"
                      self.session.nav.stopService()
                      sref = eServiceReference(4097, 0, stream_url)
                      self.session.nav.playService(sref)

                      def back(self):
                      self.session.nav.stopService()
                      self.close()

                      def main(session, **kwargs):
                      session.open(IPcam)

                      def Plugins(**kwargs):
                      #return [ PluginDescriptor(name="IPcam", description="plugin to watch ipcam stream", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main, icon="plugin.png&quot]
                      list = [PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, fnc = autostart)]
                      list.append(PluginDescriptor(name="IPcam&quot ;, description=_("plugin to watch ipcam stream&quot, where = [PluginDescriptor.WHERE_PLUGINMENU], fnc=main, icon="plugin.png&quot)
                      return list


                      теперь нужно узнать, как стартануть нужную мне фунцию из любого меню.
                      нужно привязать плаг к кнопочге
                      Обсуждение всех нюансов развода в Германии. www.razvod.net

                      Комментарий


                      • #12
                        Re: Enigma2 IPcam- Plugin (своими руками: ipcam - сам)

                        IPcam Plugin - enigma2 plugin - preAlpha - www.pristavka.de - WVC54GCA

                        вот моя преальфа

                        длинным нажатием хоум в тв модусе врубается видео, длинным нажатием енд получаем окошко с видео 1картина в секунду

                        можно плаг стартануть через меню плагинов,
                        получим окошко с кадром в секунду, там можно кнопкой ок врубить показ стрима.

                        в конце видео виден баг, картинки нет. хз почему, мне проще выйти из этого модуса и стартануть его снова.
                        поигрался, коечему научился, пока мне этого хватит.

                        разширять можно до бесконечности
                        - сделать меню с вводом линков на стрим и на картинку
                        - убрать скриншот при автострарте, заменить его на другую картинку (без этой картинки плаг не запустится)
                        - сделать скриншот с видео или скриншот в максимальном разрешении (авось кому такое нужно, ведь записи нет)
                        -побороть всевозможные баги
                        Вложения
                        Обсуждение всех нюансов развода в Германии. www.razvod.net

                        Комментарий


                        • #13
                          Re: Enigma2 IPcam- Plugin (своими руками: ipcam - сам)

                          ПлагИн интересный , давно хотелось.

                          Попробывал на моём DM8000.

                          С папкой Автостарт Ресивер при перезапуске завис, я уже думал надо будет Имидж перезаливать. Смог залезть через FTP и стереть эту папку. Ресивер завёлся.
                          IPCam Plugin в расширениях виден, жму на ОК, экран чёрный без видео ( и на весь экран а не маленькое окно ). Я занёс Адрес Камеры с HTTP:// но без LOgIn, она свободная.
                          Думаешь ошибка у меня ?
                          Samsung UE46C7700

                          Комментарий


                          • #14
                            Re: Enigma2 IPcam- Plugin (своими руками: ipcam - сам)

                            там кроме стрима еще скриншот делается.
                            подее если твой рес поймет этот стрим то должно исти, я себе спецом х.264 канеру взял, тк ву + этот стрим понимает
                            Обсуждение всех нюансов развода в Германии. www.razvod.net

                            Комментарий

                            Обработка...
                            X