2011-12-02 67 views
2

我为我的Andorid手机编写了一个小程序,它通过tcp将其相机流发送到我的电脑。手机充当客户端,而pc gstreamer应该接收流。因此,我使用以下命令:用gstreamer接收并解释视频流

>>gst-launch -v tcpserversrc port=8888 host=XXX.XX.XX.XXX ! \ 
filesink location=test.mpg 

此方法产生一个不包含有效标头的损坏的媒体文件。的

>>file test.mpg 
test.mpg: ISO Media, MPEG v4 system, 3GPP 

输出但是当我使用MPlayer的,我得到如下:

>>mplayer test.mpg 
... 
Playing test.mpg. 
libavformat file format detected. 
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x9b22850]moov atom not found 
LAVF_header: av_open_input_stream() 
failed                
Seek failed 
libavformat file format detected. 
LAVF_header: av_open_input_stream() failed 

Exiting... (End of file) 

您可以在https://docs.google.com/open?id=0Bwg55BOeLkowNjk1NTM0MjctMTZjYS00NDNmLTlkM2QtNmJlZTg5ZTExZDRm下载文件(如上所述它不出场,由于格式错误,但你可以点击在左边下载)

它非常疯狂,如果我在Android设备上的文件中记录流,我会得到一个有效的视频文件,运行没有任何问题!

Android相机的配置由

recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
recorder.setVideoSize(320,240); 
recorder.setVideoFrameRate(15); 

我怎么有参数的GStreamer观看流定义?来自德国

祝 享受周末

波希多尼

回答

0

你怎么了终止记录? mp4容器不适合流式传输。

1

那么,实际上你并没有写出一个有效的文件。您只是将原始流转储到文件中。 尝试在接收器上使用这个新增功能:

...! h264parse split-packetized = true config-interval = 1! mp4mux name = \“muxorig \”! \ filesink location = myfile.mp4