Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

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

From 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 11:11.
347 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×