av/revid
Saxon e0039da2e4 cmd/revid-cli & revid: moved ringBuffer to earlier in pipeline
Removed packetization flag for revid-cli as no longer required.
Packetization will be decided based on outputs.
Removed buffer type definition and Write receiver func in
mtsSender_test.go as this is now defined in revid.go.
Made ringbuffer size and element size consisten no matter the
output methods, as we're now going to only be putting h264 in there.
Modified H264 lex function to take an io.Writer rather than an
Encoder.
Removed destination []loadSender slice from revids fields and
added an encoder []stream.Encoder slice to hold encoders used
during a particular configuration. Each encoder will write to
the desired outputs.
Modified logic regarding encoder and sender setup. We now check
what outputs we have and add encoders to revid's encoder slice
depending on what each output requires.
Modified outputClips routine such that it ranges through revid's
encoders and encodes to them. They then write to the senders and
they handle logic regarding the amount of data they send out
and when. They also handle actions to perform on send failures.
Wrote multiSender struct which will be written to from encoders.
It will then use it's senders to distribute the data accordingly
to senders that work with the encoding from said encoders.
Modified senders so that their load methods no longer take ring
chunks, but rather slices.
Modified senders such that their release methods no longer
perform chunk closing.
2019-03-09 15:28:07 +10:30
..
Readme.md Fixed typo. 2017-12-04 16:08:02 +10:30
config.go cmd/revid-cli & revid: moved ringBuffer to earlier in pipeline 2019-03-09 15:28:07 +10:30
gpl.txt Initial revision 2017-09-21 07:50:42 +09:30
mtsSender_test.go cmd/revid-cli & revid: moved ringBuffer to earlier in pipeline 2019-03-09 15:28:07 +10:30
revid.go cmd/revid-cli & revid: moved ringBuffer to earlier in pipeline 2019-03-09 15:28:07 +10:30
senders.go cmd/revid-cli & revid: moved ringBuffer to earlier in pipeline 2019-03-09 15:28:07 +10:30

Readme.md

Readme

revid is a testbed for re-muxing and re-directing video streams as MPEG-TS over various protocols.

Description

The mode (-m) determine the mode of operation:

  • h = send HTTP (as a POST)
  • u = send UDP
  • r = send RTP
  • f = write to /tmp files
  • d = inspect packets and dump to screen

Flags (-f) determine video filtering and other actions.

For example, to send as raw UDP to on the current host, passing the video and audio as is:

revid -i <RTSP_URL> -m u -o udp://0.0.0.0:

Or, to post as HTTP to <HTTP_URL>, fixing PTS and dropping the audio along the way:

revid -i <RTSP_URL> -m h -f 3 -o <HTTP_URL>

Note that revid appends the size of the video to the URL to supply a query param. Append a ? to your if you don't need it

List of flags:

  • filterFixPTS = 0x0001
  • filterDropAudio = 0x0002
  • filterScale640 = 0x0004
  • filterScale320 = 0x0008
  • filterFixContinuity = 0x0010
  • dumpProgramInfo = 0x0100
  • dumpPacketStats = 0x0200
  • dumpPacketHeader = 0x0400
  • dumpPacketPayload = 0x0800

Common flag combos:

  • 3: fix pts and drop audio
  • 7: fix pts, drop audo and scale 640
  • 17: fix pts and fix continuity
  • 256: dump program info
  • 512: dump packet stats
  • 513: fix pts, plus above
  • 529: fix pts and fix continuity, plus above

Errors

If you see "Error reading from ffmpeg: EOF" that means ffmpeg has crashed for some reason, usually because of a bad parameter. Copy and paste the ffmpeg command line into a terminal to see what is happening.

RTSP feeds from certain cameras (such as TechView ones) do not generate presentation timestamps (PTS), resulting in errors such as the following:

  • [mpegts @ 0xX] Timestamps are unset in a packet for stream 0...
  • [mpegts @ 0xX] first pts value must be set

This can be fixed with an ffmpeg video filter (specified by flag 0x0001). Another issue is that MPEG-TS continuity counters may not be continuous. You can fix this with the fix continuity flag (0x0010).

FFmpeg will also complain if doesn't have the necessary audio codec installed. If so, you can drop the audio (flag 0x0002).

MPEG-TS Notes

MPEG2-TS stream clocks (PCR, PTS, and DTS) all have units of 1/90000 second and header fields are read as big endian (like most protocols).

  • TEI = Transport Error Indicator
  • PUSI = Payload Unit Start Indicator
  • TP = Transport Priority
  • TCS = Transport Scrambling Control
  • AFC = Adapation Field Control
  • CC = Continuity Counter (incremented per PID wen payload present)
  • AFL = Adapation Field Length
  • PCR = Program Clock Reference

Dependencies

revid uses ffmpeg for video remuxing. See Ffmepg filters.

revid also uses Comcast's gots package.

Author

Alan Noble anoble@gmail.com

License

Revid is Copyright (C) 2017 the Australian Ocean Lab (AusOcean).

It is free software: you can redistribute it and/or modify them under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

It is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License or more details.

You should have received a copy of the GNU General Public License along with revid in gpl.txt. If not, see GNU licenses.