2016-09-12 22 views
1

私はないのpythonのgstreamerで初めから曲を再生する方法を探していましたが、この考えてみます。gstreamerの途中から曲を再生する方法はありますか?

import threading 
import gst 
import gobject 

class GobInit(threading.Thread): 
    ... 

class BasicPlayer(threading.Thread): 

    def __init__(self, musiclist): 
     threading.Thread.__init__(self) 
     self.musiclist = musiclist 
     self.song_num = 0 
     self.construct_pipeline() 
     self.set_property_file() 

    def construct_pipeline(self): 
     self.player = gst.element_factory_make("playbin") 
     self.is_playing = False 
     self.connect_signals() 

    def connect_signals(self): 
     ... 

    def play(self): 
     self.is_playing = True 
     self.player.set_state(gst.STATE_PLAYING) 

    def set_property_file(self): 
     self.player.set_property(
     "uri", "file://"+"/home/user/work/mp3/"+self.musiclist[ 
      self.song_num]) 

def main(): 
    gob = GobInit() 
    gob.start() 
    print('start') 
    player = BasicPlayer(['test1.mp3', 'test2.mp3', 'test3.mp3']) 
    print('player created') 
    player.play() 
    print('start play') 

main() 

だから私は起動するだけで、この機能を持っている:

self.player.set_state(gst.STATE_PLAYING) 

をしかし、私はそこにある賭けます曲の途中から再生を開始する方法、このような何か:

self.player.play_from_middle(gst.STATE_PLAYING, <sec_after_begin>) 

それとも私はそれが途中から再生することにするために何らかの形で曲を巻き戻すことができますか?

答えて

3

はい、私はいくつかの方法があるはずと思いますが、すぐに私の心に来る(非ライブストリーム用)1は、次のとおりです。

代わり
  • を再生PAUSEDにパイプラインを設定し
    • バスハンドラにGST_MESSSAGE_ASYNC_DONEメッセージが表示されるのを待ちます。
    • パイプライン(gst_element_query())を期間中クエリし、パイプライン(gst_element_seek())を継続時間/ 2時間まで検索します。
    • パイプラインをPLAYINGに設定します。
  • 関連する問題