如何使用omxplayer播放mjpeg流

时间:2014-08-26 05:36:47

标签: linux stream raspberry-pi

我尝试将视频从覆盆子(pi A)流式传输到另一个覆盆子(pi B)

我使用mjpg-streamer来传输视频。 Mjpg-streamer有2种格式的视频:yuv,mjpeg 我在树莓上使用omxplayer来播放流(因为它使用gpu)

我找到了一个在omxplayer上播放流的解决方案 在:http://www.raspberrypi.org/forums/viewtopic.php?f=63&t=33473

是使用管道

第1步:pi A创建流

第2步:pi B创建管道并播放

mkfifo /tmp/stream.mjpeg

wget -O /tmp/stream.mjpeg http://address_ip_b:8080/?action=stream &> /dev/null &

omxplayer -r --live /tmp/stream.mjpeg

但是,我已经尝试了很多次,我意识到了

案例1:

pi A:YUV格式的流

pi B:

mkfifo /tmp/stream.mjpeg

wget -O /tmp/stream.mjpeg http://address_ip_b:8080/?action=stream &> /dev/null &

omxplayer -r --live /tmp/stream.mjpeg

结果:它有效

案例2:不使用管道

pi A:YUV格式的流

pi B:

wget -O stream.mjpeg http://address_ip_b:8080/?action=stream
我等了1'然后按ctrl + c并获取一个文件,然后我播放它

omxplayer stream.mjpeg

结果:它有效

**注意:以上所有案例都有效。但是,使用格式YUV无效,因为pi A必须在流之前将YUV转换为MPJEG,因此它使用更多的CPU> 70%(不是GPU)。如果我使用更多相机,那么我可能会挂**

案例3:

pi A:采用MJPEG格式的流

pi B:

mkfifo /tmp/stream.mjpeg

wget -O /tmp/stream.mjpeg http://address_ip_b:8080/?action=stream &> /dev/null &

omxplayer -r --live /tmp/stream.mjpeg

结果:它无效

案例4:不使用管道

pi A:采用MJPEG格式的流

pi B:

wget -O stream.mjpeg http://address_ip_b:8080/?action=stream
我等了1'然后按ctrl + c并获取一个文件,然后我播放它

omxplayer stream.mjpeg

结果:它无效

注意:以上2个案例没有奏效。我相信使用格式MJPEG有效,因为它不必转换。

任何人都有这方面的经验,你能给我建议吗?

抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

我在我的pi rev上安装了一个新鲜的raspbian。 B使用omxplayer 0.3.6~git20150210~337004e并使用内核3.18的补丁从svn rev:3.172M编译mjpg流光。
有了这个我可以运行

mjpg_streamer \  
-i "/usr/local/lib/input_uvc.so -d /dev/video0 -n -r 800x600 -f 15" \  
-o "/usr/local/lib/output_http.so -n -w /usr/local/www -p 8080"   

并使用omxplayer

直接在我的控制台上显示结果
omxplayer -r --live -b 'http://picam.my.home:8080/?action=stream'

mjpg_streamer在我的Pi-B上占用<10%的CPU负载,omxplayer占用<20%