GStreamer: Difference between revisions
(→GStreamer 101: moved from Programming_the_camera) |
No edit summary |
||
(62 intermediate revisions by 14 users not shown) | |||
Line 1: | Line 1: | ||
GStreamer is our [[multimedia]] framework library. |
|||
{{stub}} |
|||
==GStreamer 101== |
|||
== |
== Introduction == |
||
GStreamer is a library that supports multimedia, ranging from playback to complex mixing and processing. |
|||
v4l2src can always be replaced by videotestsrc, and alsasrc by audiotestsrc. |
|||
* the [[Totem plugin]] uses GStreamer to play [[multimedia]] URLs in the [[Browse]] activity, |
|||
Beginning of a normal video pipeline: |
|||
* the [[Record]] activity uses GStreamer to deal with streams from the camera and microphone, and; |
|||
v4l2src ! queue ! videorate ! video/x-raw-yuv,framerate=15/1 ! videoscale ! video/x-raw-yuv,width=160,height=120 ! ... |
|||
* the Jukebox activity uses GStreamer to play video or audio objects in the journal. |
|||
Beginning of a normal audio pipeline: |
|||
alsasrc ! audio/x-raw-int,rate=8000,channels=1,depth=8 ! ... |
|||
Video encoding: |
|||
... ! ffmpegcolorspace ! theoraenc ! ... |
|||
Audio encoding: |
|||
... ! audioconvert ! vorbisenc ! ... |
|||
Video output: |
|||
... ! ffmpegcolorspace ! videoscale ! ximagesink |
|||
Audio output: |
|||
... ! audioconvert ! alsasink ''sync=false'' |
|||
Stdout: |
|||
... ! fdsink ''fd=1'' |
|||
== Adding codecs == |
|||
Encode video+audio as ogg: |
|||
v4l2src ! queue ! ffmpegcolorspace ! theoraenc ! queue ! \ |
|||
oggmux name=mux alsasrc ! queue ! audioconvert ! vorbisenc ! queue ! mux. mux. ! queue ! ... |
|||
<div style="background:#99cc55; color:white; padding:4px;">This section describes third-party software that does not meet the [[OLPC_on_open_source_software|OLPC standards for software freedom]]. The use of such software is unsupported; OLPC does not endorse or encourage its use.</div> |
|||
A long version of videotestsrc ! ximagesink: |
|||
videotestsrc ! theoraenc ! oggmux ! oggdemux ! theoradec ! ffmpegcolorspace ! videoscale ! ximagesink |
|||
A long version of videotestsrc ! ximagesink &; audiotestsrc ! alsasink: |
|||
videotestsrc ! ffmpegcolorspace ! theoraenc ! queue ! \ |
|||
oggmux name=mux audiotestsrc ! audioconvert ! vorbisenc ! queue ! mux. mux. ! queue ! \ |
|||
oggdemux name=demux ! queue ! theoradec ! ffmpegcolorspace ! \ |
|||
ximagesink demux. ! queue ! vorbisdec ! audioconvert ! alsasink |
|||
:Hangs on current fc6. [[User:MitchellNCharity|MitchellNCharity]] 17:43, 12 June 2007 (EDT) |
|||
<div style="background:#cc9955; color:white; padding:4px;">rpmfusion repositories no longer exist for Fedora 18, and irregardless require later cryptographic standards than are supported by the OLPC XO.</div> |
|||
Live video streaming to an icecast server: |
|||
v4l2src ! ffmpegcolorspace ! videoscale ! video/x-raw-yuv,width=320,height=240 ! theoraenc quality=16 ! oggmux ! shout2send ip=192.168.1.100 port=8000 password=hackme mount=olpc.ogg |
|||
Some codecs can be [[OS_Builder/Add_Restricted|added during build]]. Adding during build is the method supported by OLPC, because it works with our operating system {{Code|[[olpc-update|olpc-update]]}} feature. |
|||
Live streaming to an icecast server: |
|||
v4l2src ! queue ! ffmpegcolorspace ! theoraenc quality=16 ! queue ! oggmux name=mux alsasrc ! audio/x-raw-int,rate=8000,channels=1,depth=8 ! queue ! audioconvert ! vorbisenc ! queue ! mux. mux. ! \ |
|||
queue ! shout2send ip=... port=... password=... mount=/''whatever''.ogg |
|||
Some codecs are ''not'' included in OLPC OS, because of restrictions on redistribution. But they can be added after install. Such changes are lost on {{Code|[[olpc-update|olpc-update]]}}. |
|||
===Notes=== |
|||
====video size, framerate, and theoraenc quality==== |
|||
To add after install, on the XO laptop, start Terminal and paste this [[Compound_commands|compound command]]: |
|||
====audio encoding==== |
|||
glive.py used wav rather than vorbis. Why? |
|||
sudo yum localinstall -y \ |
|||
===Elements=== |
|||
http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \ |
|||
http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm && \ |
|||
sudo yum install -y \ |
|||
gstreamer1-{plugins-{ugly,bad-free{-extras,world},base-tools,good-extras,bad-free},libav} \ |
|||
gstreamer-{plugins-{ugly,bad},ffmpeg} && echo Complete! |
|||
When the prompt reappears, with "Complete!" above the prompt, it is ready to use. You may need to stop and restart any activity using GStreamer, once. |
|||
Adapters: |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-tee.html tee] |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-queue.html queue] |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-videoscale.html videoscale] Convert video size. |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-videorate.html videorate] Convert video rate. |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-ffmpegcolorspace.html ffmpegcolorspace] Convert video colorspace. |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-audioconvert.html audioconvert] Convert audio format. |
|||
These instructions have been tested for releases 10.1.2, 12.1.0, 13.2.0, 13.2.1, 13.2.2, 13.2.6 and 14.1.0. |
|||
Video characteristics: |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/section-types-definitions.html#table-video-types video/x-raw-yuv] |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/section-types-definitions.html#table-video-types framerate=15/1] |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/section-types-definitions.html#table-video-types width=160,height=120] |
|||
Audio characteristics: |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/section-types-definitions.html#table-audio-types audio/x-raw-int,rate=8000,channels=1,depth=8] |
|||
For more information, see: |
|||
File I/O: |
|||
*http://www.fedorafaq.org/#yumconf |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-fdsrc.html fdsrc] |
|||
*http://www.fedorafaq.org/#mp3 |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-fdsink.html fdsink] |
|||
*http://rpmfusion.org/FAQ |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-filesrc.html filesrc] |
|||
*http://rpmfusion.org/Configuration (the basis for these instructions) |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-filesink.html filesink] |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-gnomevfssrc.html gnomevfssrc] |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-gnomevfssink.html gnomevfssink] |
|||
Test cases for Browse activity: |
|||
Video sources: |
|||
*http://www.quirksmode.org/html5/tests/video.html |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-videotestsrc.html videotestsrc] |
|||
*{{broken link|[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-v4l2src.html v4l2src]}} |
|||
== Adding codecs using xo-custom or other scripting == |
|||
Audio sources: |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-audiotestsrc.html audiotestsrc] |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-alsasrc.html alsasrc] |
|||
On a laptop of the same architecture as the target, download the required packages: |
|||
Coding video: |
|||
mkdir gs |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-theoraenc.html theoraenc] |
|||
cd gs |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-theoradec.html theoradec] |
|||
sudo yum install -y yum-utils |
|||
sudo yum localinstall -y --nogpgcheck \ |
|||
http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \ |
|||
http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm |
|||
yumdownloader --resolve gstreamer{1,}-plugins-ugly gstreamer-plugins-bad gstreamer-ffmpeg |
|||
Copy the packages. On the target laptops, install the packages using RPM. |
|||
Coding audio: |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-vorbisenc.html vorbisenc] |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-vorbisdec.html vorbisdec] |
|||
Last tested 2014-01-21 on [[XO-1.75]] with [[13.2.0]]. |
|||
Wrapping: |
|||
*{{broken link|[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-oggmux.html oggmux]}} ''([[User:MitchellNCharity|MitchellNCharity]] 11:44, 13 June 2007 (EDT))'' |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-oggdemux.html oggdemux] |
|||
== Developers == |
|||
Outputing video: |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-ximagesink.html ximagesink] ''or'' [http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-xvimagesink.html xvimagesink] |
|||
See [[GStreamer/Developers]]. |
|||
Outputting audio: |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-alsasink.html alsasink] |
|||
Not sure about: |
|||
*[http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-vorbisparse.html vorbisparse] |
|||
Sending ogg to an icecast streaming server: |
|||
... ! shout2send ip=... port=... password=... mount=/whatever.ogg |
|||
gst-launch ... ! fdsink '''|''' oggfwd ''host port password mount'' |
|||
:Regretabbly, it appears fc6, and thus olpc, does not include shout2send in gst-plugins-good-plugins. Nor does it have rpms for [http://www.v2v.cc/~j/ffmpeg2theora/oggfwd/ oggfwd], or other possible alternatives. You can grab a random binary of oggfwd from it's site, or compile shout2send from source. :( [[User:MitchellNCharity|MitchellNCharity]] 17:43, 12 June 2007 (EDT) |
|||
:Correction, shout2send is on the olpc. oggfwd is not. --[[User:Damonkohler|Damonkohler]] 23:14, 13 September 2007 (EDT) |
|||
===Doing live streaming video from an xo=== |
|||
== See also == |
|||
* [[Programming the camera]] |
|||
* [[Video]] |
|||
* [[Sound]] |
|||
* http://gstreamer.freedesktop.org/ |
|||
* http://gstreamer.freedesktop.org/documentation/ |
|||
* [http://www.jonobacon.org/?p=750 Getting started with GStreamer with Python] |
|||
* [[Software components]] ; [[Sugar Architecture/API#Third_Party_Packages]] |
|||
[[Category:Camera]] |
|||
[[Category:Audio]] |
Latest revision as of 02:13, 15 February 2021
GStreamer is our multimedia framework library.
Introduction
GStreamer is a library that supports multimedia, ranging from playback to complex mixing and processing.
- the Totem plugin uses GStreamer to play multimedia URLs in the Browse activity,
- the Record activity uses GStreamer to deal with streams from the camera and microphone, and;
- the Jukebox activity uses GStreamer to play video or audio objects in the journal.
Adding codecs
Some codecs can be added during build. Adding during build is the method supported by OLPC, because it works with our operating system olpc-update feature.
Some codecs are not included in OLPC OS, because of restrictions on redistribution. But they can be added after install. Such changes are lost on olpc-update.
To add after install, on the XO laptop, start Terminal and paste this compound command:
sudo yum localinstall -y \ http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \ http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm && \ sudo yum install -y \ gstreamer1-{plugins-{ugly,bad-free{-extras,world},base-tools,good-extras,bad-free},libav} \ gstreamer-{plugins-{ugly,bad},ffmpeg} && echo Complete!
When the prompt reappears, with "Complete!" above the prompt, it is ready to use. You may need to stop and restart any activity using GStreamer, once.
These instructions have been tested for releases 10.1.2, 12.1.0, 13.2.0, 13.2.1, 13.2.2, 13.2.6 and 14.1.0.
For more information, see:
- http://www.fedorafaq.org/#yumconf
- http://www.fedorafaq.org/#mp3
- http://rpmfusion.org/FAQ
- http://rpmfusion.org/Configuration (the basis for these instructions)
Test cases for Browse activity:
Adding codecs using xo-custom or other scripting
On a laptop of the same architecture as the target, download the required packages:
mkdir gs cd gs sudo yum install -y yum-utils sudo yum localinstall -y --nogpgcheck \ http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \ http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm yumdownloader --resolve gstreamer{1,}-plugins-ugly gstreamer-plugins-bad gstreamer-ffmpeg
Copy the packages. On the target laptops, install the packages using RPM.
Last tested 2014-01-21 on XO-1.75 with 13.2.0.
Developers
See GStreamer/Developers.