shaka-packager/_sources/tutorials/ffmpeg_piping.rst.txt

57 lines
1.7 KiB
ReStructuredText

ffmpeg piping
=============
We can use *ffmpeg* to redirect / pipe input not supported by *packager*
to *packager*, for example, input from webcam devices. The example below uses
webcam input device. The concept depicted here can be applied to
other *ffmpeg* supported capture device.
ffmpeg camera capture
---------------------
Refer to `ffmpeg Capture/Webcam <https://trac.ffmpeg.org/wiki/Capture/Webcam>`_
on how to use *ffmpeg* to capture webmcam inputs.
The examples below assumes Mac OS X 10.7 (Lion) or later. It is similar on
other platforms. Refer to the above link for details.
Create pipe
-----------
We use pipe to connect *ffmpeg* and *packager*::
$ mkfifo pipe1
Encoding / capture command
--------------------------
The below command captures from the default audio / video devices on the
machine::
$ ffmpeg -f avfoundation -i "default" -f mpegts pipe: > pipe1
The command starts only after packager starts.
.. note::
After encoding starts, monitor encoding speed carefully. It should always be
1x and above. If not, adjust the encoding parameters to recude it.
Packaging command (DASH)
------------------------
::
$ packager \
'in=pipe1,stream=audio,init_segment=live_cam_audio.mp4,segment_template=live_cam_audio_$Number$.m4s' \
'in=pipe1,stream=video,init_segment=live_cam_video.mp4,segment_template=live_cam_video_$Number$.m4s' \
--mpd_output live_cam.mpd \
--io_block_size 65536
.. note::
Option -io_block_size 65536 tells packager to use an io_block_size of 65K
for threaded io file. This is necessary as reading from pipe blocks until
the specified number of bytes, which is specified in io_block_size for
threaded io file, thus the value of io_block_size cannot be too large.