Video
idb provides recordings and streams of an attached iOS Simulator or Device. This can be very useful for exposing an iOS Target's screen, or recording an automation for later review.
Recordingβ
If you wish to make a recording for a target you can use idb record-video FILE_PATH.
This can be used to record an mp4 file to disk. The specified FILE_PATH can be any location on disk, regardless of the extension it will be an mp4 video. The video recording will start upon invoking the command, the recording can be stopped by sending a SIGTERM to the process (i.e. Ctrl-C in a terminal). The video file will only be written to disk upon exit of the idb process.
Streamingβ
Video streaming allows for live frames to be captured from the iOS Target. Typically, this stream should be piped through another application for consumption, depending on the use-case. idb provides raw access to the video, in a variety of encodings, it's left to the user to decide how to combine this with a downstream video streaming pipeline. Streaming video pairs well with Accessibility commands.
Projects such as ffmpeg or gstreamer are examples of these applications. For example, ffmpeg can accept streamed h264 video and expose this over a UDP socket with intermediate transcoding of data.
For example, the following invocation can be used to start a video stream and expose it on UDP port.
$ idb video-stream --fps 30 --format h264 --compression-quality 1.0 --udid EE074DCE-7D75-4F96-A949-82252F5FEC30 | ffmpeg -f h264 -i pipe:0 -vcodec copy -tune zerolatency -b 900k -framerate 30 -f mpegts udp://0.0.0.0:12345
Breaking this command down:
idb video-streamis the command used in idb to stream video out.--fps 30is the number of frames that are produced byidbper second. This can be arbitrarily large or small. A higher frame rate will increase system utilization. Increasing the fps may not result in smoother presentation, as an iOS Simulator may be refreshing it's screen less frequently than the target frame rate. Typically an iOS Simulator may not render transparencies at 60fps.--format h264represents the format of the video stream itself. A variety of outputs are available:h264This is an Annexe-B H.264 Streamrbgais a stream of raw RBGA bytes.mjpegis an stream of encoed JPEG images, typically called MJPEG.minicapis format used by the minicap project. It's fundementally a MJPEG stream with a header at the start of the stream and length headers per frame.
--compression-quality 1.0represents the quality level used for encoded frames, this is a value between 0.0 and 1.0. It applies to all formats except for the rawrbgaformat.idb video-streamtakes a positional argument for a file path to stream to. When this is not provided, video will be streamed tostdout, this can also be achieved by passing-as the file path argument.- The output of the idb command is piped to
ffmpegin the shell. Pipelining viastdoutis the easiest way of sending video data fromidbto an external program (as opposed to using a file).
- The output of the idb command is piped to
- The arguments for
ffmpegrelate to:- The parsing of input video from
stdin:-f h264 -i pipe:0. - Transcoding it to a lower bitrate and for real-time delivery
-tune zerolatency -b 900k. - Exposing the transcoded video over UDP so that it can be consumed by another application over the network
udp://0.0.0.0:12345.
- The parsing of input video from