×
Namespaces

Variants
Actions

Archived:Aplicações multimídia para Maemo - Parte III

From Nokia Developer Wiki
Jump to: navigation, search

Archived.pngAquivado: Este artigo foi arquivado, pois o conteúdo não é mais considerado relevante para se criar soluções comerciais atuais. Se você achar que este artigo ainda é importante, inclua o template {{ForArchiveReview|escreva a sua justificativa}}.

Acredita-se que este artigo ainda seja válido no contexto original (quando ele foi escrito)


Article Metadata

Artigo
Criado por User:Raulherbster em 23 Sep 2008
Última alteração feita por hamishwillee em 07 May 2013

Contents

Resumo

No artigo Archived:Aplicações multimídia para Maemo - Parte II, descreveu-se como podemos utilizar duas ferramentas importantes do framework GStreamer (gst-inspect and gst-launch) para auxiliarem no desenvolvimento de aplicações multimídia para a plataforma maemo. Agora, uma aplicação multimídia (em Python) para a plataforma Maemo é descrita.

Trata-se de um reprodutor de arquivos mp3 com interface GTK+/Hildon. A aplicação contém 4 botões (Play, Pause, Stop e Open).

Uma aplicação multimídia simples para a plataforma Maemo

Declarações e construtor

#!/usr/bin/python
import pygst
pygst.require("0.10")
import gst
import pygtk
import gtk
import hildon
 
class Player(hildon.Program):
def __init__(self):
hildon.Program.__init__(self)
self.window = hildon.Window()
self.window.connect("delete_event", gtk.main_quit)
self.window.set_title("Player")
self.add_window(self.window)
self.create_interface()
self.create_pipeline()
 
self.window.add(self.table)
self.window.show_all()
 
... [veja o código fonte a seguir] ...
 
#cria um reprodutor
start=Player()
gtk.main()

O código acima é dividido em dois métodos principais: create_interface(), o qual cria elementos gráficos de interface para a aplicação, tais como botões; e create_pipeline(), o qual cria os elementos e pipeline GStreamer.

Criando elementos gráficos de interface

O método create_interface() cria um layout (gtk.Tablet) e insere 4 botões. Depois, para cada botão inserido, uma função callback é conectada a ele. Por exemplo, para o botão buttonPlay, a função de callback OnPlay é conectada. As funções de callback modificação o estado do pipeline (READY, PLAYING, PAUSED e NULL) de acordo com a ação. A função de callback OnOpen também cria um diálogo Hildon para escolher o arquivo de mídia ser reproduzido.

    #este metodo cria os elementos graficos de interface (layout e botões)
def create_interface(self):
self.table = gtk.Table(2,2,True)
buttonPlay = gtk.Button("Play")
buttonPause = gtk.Button("Pause")
buttonStop = gtk.Button("Stop")
buttonOpen = gtk.Button("Open")
 
buttonPlay.connect("clicked",self.OnPlay)
buttonPause.connect("clicked",self.OnPause)
buttonStop.connect("clicked",self.OnStop)
buttonOpen.connect("clicked",self.OnOpen)
 
self.table.attach(buttonPlay,0,1,0,1)
self.table.attach(buttonPause,1,2,0,1)
self.table.attach(buttonStop,0,1,1,2)
self.table.attach(buttonOpen,1,2,1,2)
 
#modifica o estado do pipeline GStreamer para PLAYING
def OnPlay(self, widget):
self.pipeline.set_state(gst.STATE_PLAYING)
 
#modifica o estado do pipeline GStreamer para PAUSED
def OnPause(self, widget):
self.pipeline.set_state(gst.STATE_PAUSED)
 
#modifica o estado do pipeline GStreamer para NULL
def OnStop(self, widget):
if self.pipeline.get_state() != gst.STATE_PAUSED:
self.pipeline.set_state(gst.STATE_PAUSED)
if self.pipeline.get_state() != gst.STATE_NULL:
self.pipeline.set_state(gst.STATE_NULL)
 
#abre o dialogo para escolha do arquivo de midia a ser reproduzido
def OnOpen(self, widget):
dialog = hildon.FileChooserDialog(self.window,gtk.FILE_CHOOSER_ACTION_OPEN)
response = dialog.run()
dialog.hide()
file_name = selector.get_filename()
if response == gtk.RESPONSE_OK:
self.audiosrc.set_property("location", file_name)
self.pipeline.set_state(gst.STATE_READY)

Criando os elementos e pipeline GStreamer

É necessário criar um pipeline GStreamer para inserir os elementos que serão criados. Logo após, criamos dois elementos: um a partir do gnomevfssrc, e outro a partir do dspmp3sink. Esses elementos são inseridos no pipeline de forma que podem ser "executados" posteriormente. Com o intuito de verificar se os elementos existem na máquina, é importante utilizar o comando gst-inspect. Importante: esse código não pode ser executado no Desktop, pois o elemento dspmp3sink existe somente no Internet Tablet OS. Dessa maneira, se você tentar executar esse código, o sistema produzirá um erro (gst.ElementNotFoundError: dspmp3sink). Finalmente, devemos ligar os elementos inseridos no pipeline, através do uso do método link().

    #este metodo cria os elementos e pipeline GStreamer
def create_pipeline(self):
self.pipeline = gst.Pipeline("mypipeline")
 
self.audiosrc = gst.element_factory_make("gnomevfssrc","source")
self.pipeline.add(self.audiosrc)
 
self.audiosink = gst.element_factory_make("dspmp3sink", "sink")
self.pipeline.add(self.audiosink)
 
self.audiosrc.link(self.audiosink)
This page was last modified on 7 May 2013, at 14:11.
198 page views in the last 30 days.