ffmpeg combine files

Assuming the codecs are the same you create a file (example mylist.txt):

file ‘/path/here/file1.avi’
file ‘/path/here/file2.avi’
file ‘/path/here/file3.avi’

Then pass that file to ffmpeg

ffmpeg -f concat -i mylist.txt -c copy x.avi

You can use this command to make the list:

ls *.avi | while read each; do echo “file ‘$each'” >> mylist.txt; done

to convert

ffmpeg -i example.mp4 -f webm -c:v libvpx -b:v 1M -acodec libvorbis example.webm -hide_banner
ffmpeg -f concat -i mylist.txt -f webm -c:v libvpx -b:v 1M -acodec libvorbis oupu.webm -hide_banner
ffmpeg -f concat -i mylist.txt -strict -2 -c:a aac -b:a 128k -c:v libx264 -crf 23 -y output.mp4

to add some keyframes
-x264-params keyint=15:min-keyint=15
ffmpeg -f concat -i mylist.txt -strict -2 -c:a aac -b:a 128k -c:v libx264 -x264-params keyint=15:min-keyint=15 -crf 23 -y output.mp4

ffmpeg -strict -2 -i Collection1-Video124.Kiki.mpg -preset slow -codec:a aac -b:a 128k -codec:v libx264 -pix_fmt yuv420p -b:v 2500k -minrate 1500k -maxrate 4000k -bufsize 5000k -vf scale=-1:720 -strict -2 Collection1-Video124.Kiki2.mp4

ffmpeg -i input.mpg -preset fast -strict -2 -y output.mp4
ffmpeg -i video.mp4 -c:v mpeg2video -q:v 5 -c:a mp2 -f vob video.mpg

hauppauge dvc 100

happauge dazzle dvc 100 v4l2
streaming to rtp

hassle- had to read polish: http://forumdyskusyjne.co.pl/b/748/tuner,tv,em28xx.php. literally took weeks!

had to add my users to audio and video groups

at the end of all this, I put these in rc.local
modprobe em28xx-alsa &
v4l2-ctl -d /dev/video0 –set-standard=ntsc &
v4l2-ctl –set-ctrl=mute=0 &

https://trac.ffmpeg.org/wiki/Capture/ALSA

phomlish@a6:~/dm$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC892 Analog [ALC892 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 2: ALC892 Alt Analog [ALC892 Alt Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: DVC100 [DVC100], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0

# which means we need to say -i hw:1
ffmpeg -f alsa -i hw:1 -t 30 -y out.wav
#but this was giving me no sound in the file.
check alsamixer F4 F6 to make sure it’s not muted

maybe this will help
ffmpeg -f alsa -i default:CARD=U0x46d0x809 -t 30 out.wav

so for me
ffmpeg -f alsa -i default:CARD=DVC100 -y out.wav
# still no joy playing with vc from my mac
it’s official, the link above helped me check my math but did not help!

ffmpeg -f alsa -i default:CARD=DVC100 -acodec mp3 -ac 2 -ar 44100 -y out.mp3
ffmpeg -f alsa -i hw:1 -acodec mp3 -ac 2 -ar 44100 -y out.mp3
# no joy

https://forums.linuxmint.com/viewtopic.php?t=123022
v4l2-ctl –set-ctrl=mute=0
ffmpeg -f alsa -i default:CARD=DVC100 -acodec mp3 -ac 2 -ar 44100 -y out.mp3
# that worked

# now to try libopus
ffmpeg -f alsa -i default:CARD=DVC100 -acodec libopus -ac 2 -ar 44100 -y out.webm

# streaming an audio test
ffmpeg -re -f lavfi -i aevalsrc=”sin(400*2*PI*t)” -ar 8000 -f mulaw -f rtp rtp://127.0.0.1:1234

Goals
best recording possible- will be done on a2 with the mpeg compression board
webm to udp

but what is libvisual_infinite?
gst-launch-1.0 alsasrc ! libvisual_lv_analyzer ! eglglessink

What does the Dazzle do?
dmesg
em28xx: New device Pinnacle Systems GmbH DVC100 @ 480 Mbps (2304:021a, interface 0, class 0)
AC97 audio (5 sample rates)
yuyv422 or yuv411p
-video_size 768×576
Width/Height : 640/480
Frames per second: 29.970 (30000/1001)

let’s record the webm file
ffmpeg \
-f video4linux2 -thread_queue_size 1024 -i /dev/video0 \
-f alsa -thread_queue_size 1024 -ar 44100 -channels 2 -channel_layout stereo -i hw:1 \
-video_size 720×480 -pix_fmt yuyv422 \
-c:v libvpx -crf 10 -b:v 246K -r 29.970 \
-c:a libopus -b:a 256k -vbr on -compression_level 10 \
-f webm -y -threads 4 t.webm

and then stream it
ffmpeg -re -i t.webm \
-acodec copy -vn -f rtp rtp://10.11.1.96:5122 \
-vcodec copy -an -f rtp rtp://10.11.1.96:5124

trying gstreamer
test audio/video
/usr/local/bin/gst-launch-1.0 -v \
audiotestsrc ! audioconvert dithering=0 ! opusenc bitrate=128000 ! rtpopuspay pt=98 \
! udpsink host=127.0.0.1 port=5122 \
videotestsrc ! vp8enc ! rtpvp8pay ! udpsink host=127.0.0.1 port=5124

tring videotestsrc
/usr/local/bin/gst-launch-1.0 -v \
videotestsrc ! vp8enc ! rtpvp8pay ! udpsink host=10.11.1.96 port=5124

trying dazzle dvc 100

This worked to record the video
/usr/local/bin/gst-launch-1.0 -v v4l2src device=/dev/video0 norm=NTSC \
! videoscale ! ‘video/x-raw,width=640,height=480,framerate=15/1,interlace-mode=mixed’ \
! videoconvert ! ‘video/x-raw, width=640, height=480’ \
! vp8enc threads=4 ! webmmux \
! filesink location=test.webm

and this worked to stream the video
/usr/local/bin/gst-launch-1.0 -v v4l2src device=/dev/video0 norm=NTSC \
! videoscale ! ‘video/x-raw,width=640,height=480,framerate=15/1,interlace-mode=mixed’ \
! videoconvert ! ‘video/x-raw, width=640, height=480’ ! videorate \
! vp8enc threads=4 ! rtpvp8pay ! udpsink host=10.11.1.96 port=5124

on to audio:
this worked to create the file
GST_DEBUG=4 /usr/local/bin/gst-launch-1.0 -v \
alsasrc num-buffers=1000 device=hw:1 provide-clock=false \
! ‘audio/x-raw, format=S16LE, rate=44100, channels=2’ \
! audioconvert ! audioresample \
! avimux ! filesink location=test.avi
WORKS! but Got EOS from element “pipeline0”.
/usr/local/bin/gst-launch-1.0 -v \
alsasrc num-buffers=1000 device=hw:1 provide-clock=false \
! ‘audio/x-raw, format=S16LE, rate=44100, channels=2’ \
! audioconvert ! audioresample \
! avimux ! filesink location=test.avi

/usr/local/bin/gst-launch-1.0 -v -e \
alsasrc num-buffers=1000 device=hw:1 provide-clock=false \
! ‘audio/x-raw, format=S16LE, rate=44100, channels=2’ \
! audioconvert ! audioresample \
! vorbisenc ! oggmux ! filesink location=test.ogg
Got EOS from element “pipeline0”.
Execution ended after 0:00:10.003604373

maybe we should try open -> rtp
/usr/local/bin/gst-launch-1.0 -v -e \
alsasrc num-buffers=1000 device=hw:1 provide-clock=false \
! ‘audio/x-raw, format=S16LE, rate=44100, channels=2’ \
! audioconvert ! audioresample \
! opusenc ! rtpopuspay ! udpsink host=10.11.1.96 port=5124
Got EOS from element “pipeline0”.
Execution ended after 0:00:10.032618505

/usr/local/bin/gst-launch-1.0 -v -e \
alsasrc num-buffers=10000 device=hw:1 provide-clock=false \
! ‘audio/x-raw, format=S16LE, rate=44100, channels=2’ \
! audioconvert ! audioresample \
! opusenc ! rtpopuspay ! udpsink host=10.11.1.96 port=5124
didn’t stop but also didn’t hear anything…

/usr/local/bin/gst-launch-1.0 -v -e \
alsasrc num-buffers=10000 device=hw:1 provide-clock=false do-timestamp=true \
! ‘audio/x-raw, format=S16LE, rate=44100, channels=2’ \
! queue ! audioconvert ! audioresample ! queue \
! opusenc ! webmmux ! filesink location=test.webm
Got EOS from element “pipeline0”.

/usr/local/bin/gst-launch-1.0 -v -e \
alsasrc num-buffers=10000 device=hw:1 provide-clock=false do-timestamp=true \
! ‘audio/x-raw, format=S16LE, rate=44100, channels=2’ \
! audioconvert ! audioresample \
! opusenc ! webmmux ! filesink location=test.webm
Got EOS from element “pipeline0”.
Execution ended after 0:01:40.006636953

finally got audio working here
/usr/local/bin/gst-launch-1.0 -v -e \
alsasrc num-buffers=-1 device=hw:1 provide-clock=false do-timestamp=true \
! ‘audio/x-raw, format=S16LE, rate=44100, channels=2’ \
! audioconvert ! audioresample \
! opusenc ! webmmux ! filesink location=test.webm

and to put it all together
/usr/local/bin/gst-launch-1.0 -v -e \
alsasrc num-buffers=-1 device=hw:1 provide-clock=false do-timestamp=true \
! ‘audio/x-raw, format=S16LE, rate=44100, channels=2’ \
! audioconvert ! audioresample \
! opusenc ! rtpopuspay ! udpsink host=10.11.1.96 port=5122 \
v4l2src device=/dev/video0 norm=NTSC \
! videoscale ! ‘video/x-raw,width=640,height=480,framerate=15/1,interlace-mode=mixed’ \
! videoconvert ! ‘video/x-raw, width=640, height=480’ ! videorate \
! vp8enc threads=4 ! rtpvp8pay ! udpsink host=10.11.1.96 port=5124

v4l2-ctl –list-devices
Pinnacle Dazzle DVC 90/100/101/ (usb-0000:00:14.0-4):
/dev/video0

ffmpeg -f v4l2 -list_formats all -i /dev/video0
[video4linux2,v4l2 @ 0x3e00380] Raw : yuyv422 : YUYV 4:2:2 : {144-720, 1}x{115-576, 1}
[video4linux2,v4l2 @ 0x3e00380] Raw : rgb565le : 16-bit RGB 5-6-5 : {144-720, 1}x{115-576, 1}
[video4linux2,v4l2 @ 0x3e00380] Raw : bayer_bggr8 : 8-bit Bayer BGBG/GRGR : {144-720, 1}x{115-576, 1}
[video4linux2,v4l2 @ 0x3e00380] Raw : bayer_grbg8 : 8-bit Bayer GRGR/BGBG : {144-720, 1}x{115-576, 1}
[video4linux2,v4l2 @ 0x3e00380] Raw : bayer_gbrg8 : 8-bit Bayer GBGB/RGRG : {144-720, 1}x{115-576, 1}
[video4linux2,v4l2 @ 0x3e00380] Raw : yuv411p : Planar YUV 4:1:1 : {144-720, 1}x{115-576, 1}

ffmpeg -f video4linux2 -video_size 768×576 -i /dev/video0 -framerate 60 -c:v mpeg2video -flags +ilme+ildct tmp.mpg

v4l2-ctl –all
Driver Info (not using libv4l2):
Driver name : em28xx
Card type : Pinnacle Dazzle DVC 90/100/101/
Bus info : usb-0000:00:14.0-4
Driver version: 4.4.87
Capabilities : 0x85200001
Video Capture
Read/Write
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x05200001
Video Capture
Read/Write
Streaming
Extended Pix Format
Priority: 2
Video input : 0 (Composite1: ok)
Video Standard = 0x0000b000
NTSC-M/M-JP/M-KR
Format Video Capture:
Width/Height : 720/480
Pixel Format : ‘YUYV’
Field : Interlaced
Bytes per Line : 1440
Size Image : 691200
Colorspace : SMPTE 170M
Transfer Function : Default
YCbCr Encoding : Default
Quantization : Default
Flags :
Streaming Parameters Video Capture:
Frames per second: 29.970 (30000/1001)
Read buffers : 4

User Controls

brightness (int) : min=-128 max=127 step=1 default=0 value=0 flags=slider
contrast (int) : min=0 max=31 step=1 default=16 value=16 flags=slider
saturation (int) : min=0 max=31 step=1 default=16 value=16 flags=slider
red_balance (int) : min=-48 max=48 step=1 default=0 value=0 flags=slider
blue_balance (int) : min=-48 max=48 step=1 default=0 value=0 flags=slider
sharpness (int) : min=0 max=15 step=1 default=0 value=0 flags=slider

v4l2-ctl -d /dev/video0 –set-standard=ntsc

openssl

openssl x509 -in certificate.pem -text

openssl pkcs12 -export -in cert.pem -inkey privkey.pem \
-out swarm.p12 -name swarm \
-CAfile ca.crt -caname root

openssl pkcs12 -export -in cert.pem -inkey privkey.pem -out swarm.p12 -name swarm -password pass:password

openssl x509 -in mydetv.crt -text

openssl s_client -showcerts -verify 5 -connect stackexchange.com:443 < /dev/null

why this blog


Because google sucks. But it sucks less than the alternatives which don’t return very valuable results at all. But the top google results are all add encrusted cpu hogs that bog down my browser. So I stood up this blog simply so I can have a nice clean no advertisement place to find my technology hints and howtos.

com.mydetv.swarm ffmpeg

USING -threads 4 messed me up, don’t do it!

# this works to transcode to a webm vp8 file
ffmpeg -i fireworks.mp4 \
-c:v libvpx -crf 10 -b:v 512K \
-c:a libopus -b:a 128k -vbr on -compression_level 10 \
-pass 1 -y fireworks.webm; \
ffmpeg -i fireworks.mp4 \
-c:v libvpx -crf 10 -b:v 512K \
-c:a libopus -b:a 128k -vbr on -compression_level 10 \
-pass 2 -y fireworks.webm

# just stream
ffmpeg -i fireworks.mp4 \
-vcodec copy -an -f rtp rtp://10.11.1.96:5122 \
-vn -f rtp rtp://10.11.1.96:5124

# let’s try to stream and transcode
# worked but choppy
ffmpeg -i people.mp4 \
-c:v libvpx -crf 10 -b:v 256K \
-an -f rtp rtp://10.11.1.96:5124 \
-c:a libopus -b:a 64k \
-vn -f rtp rtp://10.11.1.96:5122

sudo add-apt-repository ppa:mc3man/trusty-media
sudo apt-get update

(2017/12/20 had trouble streaming to janus, rolled my own https://gist.github.com/faleev/3435377)

Supporting Chrome and Firefox
Mozilla compatibility page
Chrome blog about vp9
WebM vp9 is cool. Send the full stream to one guy and he can decide to send a lower bitrate version to the next guy with no transcoding!

ffmpeg converting to webm
mozillas bitrate discussion

We’ll do constrained quality, which should provide 3 bitrates in one file.

Let’s target these two bitrates for our old/new (when we upgrade to HD) videos
640x480p @ 24,25,30 512 (LQ), 750 (MQ) 256 (LQ) 375 (MQ) 742 (LQ) 1088 (MQ)
1920x1080p @ 50,60 3000 1500 4350

only a7 worked, a8 gave “Unrecognized option ’tile-columns'”

converting to webm

fight to get ffmpeg installed
mac
brew install libvpx
brew install ffmpeg –with-libvorbis -with-vorbis –with-theora \
–with-libass \
–with-openssl \
–with-libvpx –with-libvpx –with-opus

ffmpeg -i 34-01-05_She_Wronged_Him_Right_512kb.mp4 -vf scale=640×480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 34-01-05_She_Wronged_Him_Right_512kb.webm && \
ffmpeg -i 34-01-05_She_Wronged_Him_Right_512kb.mp4 -vf scale=640×480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y 34-01-05_She_Wronged_Him_Right_512kb.webm

try to constrain opus to 128bit audio
ffmpeg -i in.mp4 -c:a libopus -vn -vbr on out.opus
ffmpeg -i input -acodec libopus -b:a bitrate -vbr on -compression_level 10 output

ffmpeg -i Betty_Boop_Baby_Be_Good_1935_512kb.mp4 -vf scale=640×480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 -passlogfile xxx \
-quality good -crf 34 -c:v libvpx-vp9 \
-c:a libopus -b:a 128k -vbr on -compression_level 10 \
-pass 1 -speed 4 Betty_Boop_Baby_Be_Good_1935_512kb.webm && \
ffmpeg -i Betty_Boop_Baby_Be_Good_1935_512kb.mp4 -vf scale=640×480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 -passlogfile xxx \
-quality good -crf 34 -c:v libvpx-vp9 \
-c:a libopus -b:a 128k -vbr on -compression_level 10 \
-pass 2 -speed 4 -y Betty_Boop_Baby_Be_Good_1935_512kb.webm

ffmpeg -i people.mp4 -vf scale=640×480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 people.webm && \
ffmpeg -i people.mp4 -vf scale=640×480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y people.webm

# WHOPSIE janus doesn’t do vp9 yet
ffmpeg -i fireworks.mp4 \
-c:v libvpx -crf 10 -b:v 512K \
-c:a libopus -b:a 128k -vbr on -compression_level 10 \
-pass 1 -y fireworks.webm; \
ffmpeg -i fireworks.mp4 \
-c:v libvpx -crf 10 -b:v 512K \
-c:a libopus -b:a 128k -vbr on -compression_level 10 \
-pass 2 -y fireworks.webm

ffmpeg -i input.mp4 -c:v libvpx -qmin 0 -qmax 50 -crf 5 -b:v 1M -c:a libvorbis output.webm
ffmpeg -i input.mp4 -c:v libvpx-vp9 -minrate 5M -maxrate 5M -b:v 5M output.webm

2017/12/21 this worked!
ffmpeg -i fireworks.mp4 \
-c:v libvpx -crf 10 -b:v 512K \
-c:a libopus -b:a 128k -vbr on -compression_level 10 \
-y fc.vp8.webm

ffmpeg -i people.mp4 -vf scale=640×480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 34 -c:v libvpx -c:a libopus \
-pass 1 -speed 4 people.vp8.webm && \
ffmpeg -i people.mp4 -vf scale=640×480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 34 -c:v libvpx -c:a libopus \
-pass 2 -speed 4 -y people.vp8.webm

ffmpeg -i /usr5/videos/archive.org/GhostsontheLoose/GhostsontheLoose.ogv -vf scale=640×480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 /usr3/webm/archive.org/GhostsontheLoose//GhostsontheLoose.webm && \
ffmpeg -i /usr5/videos/archive.org/GhostsontheLoose/GhostsontheLoose.ogv -vf scale=640×480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y /usr3/webm/archive.org/GhostsontheLoose//GhostsontheLoose.webm

debian 8 Jessie, had to roll compile ffmpeg myself
apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev \
libsdl2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \
libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev \
libvpx4 libopus-dev libx264-dev libx265-dev libfdk-aac1 x265 x264
grab some sox stuff too, we’ll need it later
apt-get install libsox-dev sox
./configure \
–prefix=”/usr/local/bin” \
–pkg-config-flags=”–static” \
–enable-gpl \
–enable-libass \
–enable-libfreetype \
–enable-libmp3lame \
–enable-libopus \
–enable-libtheora \
–enable-libvorbis \
–enable-libvpx \
–enable-libx264 \
–enable-libopus \
–enable-nonfree
and it still don’t work for some conversions:
/tmp/buildd/libvpx-1.3.0/vp9/encoder/vp9_encodeframe.c:1747: rd_pick_partition: Assertion `tp_orig < *tp’ failed.
and then these on some archive.org files:
[aac @ 0x3856d60] SSR is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.

and on a7, tried to compile from git

converting to webm with watermark

ffmpeg -codecs
Codecs:
D….. = Decoding supported
.E…. = Encoding supported
..V… = Video codec
..A… = Audio codec
..S… = Subtitle codec
…I.. = Intra frame-only codec
….L. = Lossy compression
…..S = Lossless compression
——-

ffmpeg -formats
File formats:
D. = Demuxing supported
.E = Muxing supported

a8 shows
formats:
D matroska,webm Matroska / WebM
E webm WebM
E webm_chunk WebM Chunk Muxer
DE webm_dash_manifest WebM DASH Manifest
codecs:
D.A.L. opus Opus (Opus Interactive Audio Codec)
D.V.L. vp9 Google VP9

a7 shows
formats:
D matroska,webm Matroska / WebM
E webm WebM
E webm_chunk WebM Chunk Muxer
DE webm_dash_manifest WebM DASH Manifest

codecs:
DEV.L. vp9 Google VP9 (decoders: vp9 libvpx-vp9 vp9_cuvid ) (encoders: libvpx-vp9 )
DEA.L. opus Opus (Opus Interactive Audio Codec) (decoders: opus libopus ) (encoders: opus libopus )

ffmpeg -i input -f rtsp -rtsp_transport tcp rtsp://localhost:8888/live.sdp
-c:v libvpx

ffmpeg -i sample.mp4 -strict -2 -f rtsp rtsp://192.168.0.3:1935/live/myStream

ffmpeg -stream_loop -1 -thread_queue_size 4 -i NTSCTVTestPattern.mp4 -strict -2 -vcodec copy -an -f rtp rtp://10.10.1.97:6005 -acodec copy -vn -sdp_file saved_sdp_file -f rtp rtp://10.11.1.97:7005

ffmpeg -stream_loop -1 -thread_queue_size 4 -i NTSCTVTestPattern.mp4 -strict -2 -f rtsp rtsp://10.10.1.97:6005/live/stream

ffmpeg -re -stream_loop -1 -thread_queue_size 4 -i NTSCTVTestPattern.mp4 -strict -2 \
-sdp_file saved_sdp_file \
-f rtsp rtsp://10.10.1.97:6005 \

ffmpeg -protocol_whitelist “file,rtp,udp” -i saved_sdp_file -strict -2 saved_video_file.mp4

Broken file, keyframe not correctly marked
trying to resolve with latest ffmpeg
didn’t help:
ffmpeg version N-89073-gff8f40a Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.5) 20160609

com.mydetv.swarm 2017-09-19

10 tiers working around the world – US east, US west, Australia south east, Europe north, India west. 10th tier was at 2 second latency, way better than I expected after P2Ping around the world. Have a look:

10 tiers

4 tiers

Now I need Big Data to help me figure out who gets the next stream.

git cheatsheet

to create a local & remote repo

on a0 in /usr3/phomlish/git create RepoName directory
mkdir RepoName
cd RepoName
git init –bare

phomlish@a0:/usr3/phomlish/git/jukebox$ git init –bare
Initialized empty Git repository in /usr3/phomlish/git/jukebox/

****

in working directory (like on mac)
go where the code exists
w01:jukebox phomlish$ pwd
/Users/phomlish/go/src/jukebox

git init
git add -A
git commit -m init

git remote add origin ssh://a0:2222/usr3/phomlish/git/jukebox
git push –set-upstream origin master
git push

****

in working directory (like on mac)
make sure you have a .gitignore
git clone ssh://a0:2222/usr3/phomlish/git/com.mydetv
git add -A
git commit
git push –set-upstream origin master

git status
git log
# which checkout we’re on
git show

git checkout

Create the branch on your local machine and switch in this branch :
git checkout -b [name_of_your_new_branch]
git checkout -b dev

Change working branch :
git checkout [name_of_your_new_branch]
git checkout master

git push
git push origin [name_of_your_new_branch]

# let’s have 2 remotes!
# on a0
phomlish@a0:/usr3/phomlish/git/mydetv-swarm$ git init –bare
Initialized empty Git repository in /usr3/phomlish/git/mydetv-swarm/
# on local
git remote add origin ssh://a0:2222/usr3/phomlish/git/mydetv-swarm

# merging!!!
# from dev to master locally
git checkout master
git merge dev
git push origin master