gstreamerとicecastを使用してストリームを作成しようとしましたが、gstreamer appsrcを動作させることができません。 xvimagesinkをシンクとして使用すると、私のアプリケーションは正常に動作します(以下のコメントコードを参照)。しかし、一度それを大気に配管すれば、それは実行されません。gstreamer appsrcはxvimagesinkでは動作しますが、theoraencでは動作しません! oggmux
shout2sendをfilesinkと交換して、問題がicecastであるかどうかを確認しました。その結果、ファイルにデータが書き込まれません。 appsrcをtestvideosrcに置き換えると、正常に動作します。なにか提案を?
#!/usr/bin/env python
import sys, os, pygtk, gtk, gobject
import pygst
pygst.require("0.10")
import gst
import numpy as np
class GTK_Main:
def __init__(self):
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("destroy", gtk.main_quit, "WM destroy")
vbox = gtk.VBox()
window.add(vbox)
self.button = gtk.Button("Start")
self.button.connect("clicked", self.start_stop)
vbox.add(self.button)
window.show_all()
self.player = gst.Pipeline("player")
source = gst.element_factory_make("appsrc", "source")
caps = gst.Caps("video/x-raw-gray,bpp=16,endianness=1234,width=320,height=240,framerate=(fraction)10/1")
source.set_property('caps',caps)
source.set_property('blocksize',320*240*2)
source.connect('need-data', self.needdata)
colorspace = gst.element_factory_make('ffmpegcolorspace')
enc = gst.element_factory_make('theoraenc')
mux = gst.element_factory_make('oggmux')
shout = gst.element_factory_make('shout2send')
shout.set_property("ip","localhost")
shout.set_property("password","hackme")
shout.set_property("mount","/stream")
caps = gst.Caps("video/x-raw-yuv,width=320,height=240,framerate=(fraction)10/1,format=(fourcc)I420")
enc.caps = caps
videosink = gst.element_factory_make('xvimagesink')
videosink.caps = caps
self.player.add(source, colorspace, enc, mux, shout)
gst.element_link_many(source, colorspace, enc, mux, shout)
#self.player.add(source, colorspace, videosink)
#gst.element_link_many(source, colorspace, videosink)
def start_stop(self, w):
if self.button.get_label() == "Start":
self.button.set_label("Stop")
self.player.set_state(gst.STATE_PLAYING)
else:
self.player.set_state(gst.STATE_NULL)
self.button.set_label("Start")
def needdata(self, src, length):
bytes = np.int16(np.random.rand(length/2)*30000).data
src.emit('push-buffer', gst.Buffer(bytes))
GTK_Main()
gtk.gdk.threads_init()
gtk.main()
デバッグの目的でコードをgst piplineに抽出する方が簡単かもしれません。 – Dejan
ストリームへの接続方法も教えてください。私は試しました: gst-launch-0.10 souphttpsrc location = "http:// source:[email protected]:8000/stream"! decodebin2! xvimagesink libproxyのクラッシャーにはうまくいきません。/ デバッグログを見ることができます(GST_DEBUG = "*:3"を使ってアプリを起動してください)。 – ensonic