metro - Media Transcoder
metro
metro - Media Transcoder
Daphne Chong
Nick McHardy
@daphnechong
@nickmchardy
metro - Media Transcoder
Questions?
metro - Media Transcoder
Project Background
- What is Transcoding?
- Examples
- FFmpeg
- Why did we build our own?
metro - Media Transcoder
Architecture
- Architecture overview
- Technology choices
- Transcoder autoscaling policies
- Costs
metro - Media Transcoder
Future Roadmap
- Cost optimisations
- Validation and Introspection
- Features
metro - Media Transcoder
Project Background:
What is
Transcoding?
metro - Media Transcoder
metro - Media Transcoder
Converting video
to different formats
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
High speed
Medium speed
Low speed
metro - Media Transcoder
Standard Encoding
metro - Media Transcoder
Project Background:
Transcoding
Example
metro - Media Transcoder
Step 1: Prepare watermark
metro - Media Transcoder
Step 1: Prepare watermark
metro - Media Transcoder
Step 1: Prepare watermark
metro - Media Transcoder
Step 2: Input video (GXF)
metro - Media Transcoder
Step 3: Asymmetrical cropping
metro - Media Transcoder
Step 4: Scale and set aspect ratio
metro - Media Transcoder
Step 5: Apply watermark
metro - Media Transcoder
Step 6: Ready to stream
1500k
metro - Media Transcoder
other rendition sizes
1000k
650k
500k
220k
audio only
metro - Media Transcoder
Original file audio track
metro - Media Transcoder
Previous transcoder audio track
metro - Media Transcoder
After audio normalisation
metro - Media Transcoder
Transcoding profiles
metro - Media Transcoder
GXF, ABC1
Profile:
- Crop
- Normalise audio
- Adjust ratio
- Add watermark
- GXF to MP4
metro - Media Transcoder
GXF, ABC1
metro - Media Transcoder
GXF, ABC1
MOV, Arts
Profile:
- Adjust ratio
- ProRes MOV to MP4
metro - Media Transcoder
GXF, ABC1
MOV, Arts
metro - Media Transcoder
Project Background:
FFmpeg
metro - Media Transcoder
./ffmpeg utopia.gxf utopia.mp4
metro - Media Transcoder
"hi+": {
"transcoder": "ffmpeg",
"transcoderoptions": "-c:v libx264 -filter_complex "[0:v]crop=720:576:0:32,yadif,
scale=800x450,setdar=16/9[main], [1:v]scale=42:-1[ovrl], [main][ovrl]overlay=main_w-overlay_w-37:
main_h-overlay_h-34" -crf 22 -maxrate 904k -bufsize 1000k -pix_fmt yuv420p -profile:v high -level
4.0 -refs 3 -r 25 -g 50 -c:a libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1] amerge=inputs=2,
dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar 44100 -ac 2 -map 0:0 -map "[aout]"
-movflags +faststart -threads 0 -y",
"bitrate": "1000k",
"outputfilemimetype": "video/mp4"
},
"hi++": {
"transcoder": "ffmpeg",
"transcoderoptions": "-c:v libx264 -filter_complex "[0:v]crop=720:576:0:32,yadif,
scale=1024x576,setdar=16/9[main], [1:v]scale=54:-1[ovrl], [main][ovrl]overlay=main_w-overlay_w-47:
main_h-overlay_h-44" -crf 22 -maxrate 1404k -bufsize 1500k -pix_fmt yuv420p -profile:v high -
level 4.0 -refs 3 -r 25 -g 50 -c:a libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1]
amerge=inputs=2, dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar 44100 -ac 2 -map 0:0
-map "[aout]" -movflags +faststart -threads 0 -y",
"bitrate": "1500k",
"outputfilemimetype": "video/mp4"
}
FFmpeg filters are fun
metro - Media Transcoder
af_sidhaiompress f_senmd vfropdett vf_kerndeint vf_signalstats af_adelay af_sileedett f_zmq vfurves
vf_lenorrtion vf_smartblur af_aho af_sileeremove fifo vf_tdnoiz vf_libopev vf_spp af_aemphasis
af_sofalizer filtfmts vf_deband vf_lut vf_ssim af_afade af_stereotools formats vf_dimate vf_lut3d vf_stk
af_aformat af_stereowiden framepool vf_dejudder vf_maskedmerge vf_stereo3d af_agate af_tremolo
framesy vf_delogo vf_deint vf_subtitles af_alimiter af_vibrato generate_wave_table vf_deshake
vf_mergeplanes vf_super2xsai af_amerge af_volume graphdump vf_deteline vf_mpdimate vf_swapuv
af_amix af_volumedett graphparser vf_disple vf_neighbor vf_teline af_anequalizer allfilters lavfutils
vf_drawbox vf_noise vf_thumbnail af_anull asink_anullsink log2_tab vf_drawtext vf_null vf_tile af_apad
as_anoises lswsutils vf_edgedett vf_r vf_tinterle af_aphaser as_anulls opel_allkernels vf_elbg vf_overlay
vf_transpose af_apulsator as_flite pthread vf_eq vf_owdenoise vf_unsharp af_aresample as_sine setpts
vf_extrtplanes vf_pad vf_uspp af_asetnsamples audio settb vf_fade vf_palettegen vf_vtorope af_asetrate
avf_aphasemeter split vf_fftfilt vf_paletteuse vf_vflip af_ashowinfo avf_avtorope s_movie vf_field
vf_persptive vf_vidstabdett af_astats avfoat transform vf_fieldmah vf_phase vf_vidstabtransform af_asyts
avf_shoqt trim vf_fieldorder vf_pixdetest vf_vignette af_atempo avf_showfreqs unsharp_opel vf_find_rt
vf_pp vf_w3fdif af_biquads avf_showsptrum vf_alphamerge vf_format vf_pp7 vf_waveform af_bs2b
avf_showvolume vf_aspt vf_fps vf_psnr vf_xbr afhannelmap avf_showwaves vf_atadenoise vf_framepk
vf_pullup vf_yadif afhannelsplit avfilter vf_bbox vf_framerate vf_qp vf_zoompan afhorus avfiltergraph
vf_blkdett vf_framestep vf_random vf_zale afompand bbox vf_blkframe vf_frei0r vf_removegrain video
afompensationdelay buffersink vf_blend vf_fspp vf_removelogo vidstabutils af_shift buffers vf_boxblur
vf_geq vf_repeatfields vsink_nullsink af_dynaudnorm deshake_opel vfhromakey vf_gradfun vf_rotate
vsellauto af_earwax drawutils vfodview vf_hflip vf_sab vs_life af_extrastereo dualinput vfolorbalae
vf_histeq vf_ale vs_mandelbrot af_flanger f_drawgraph vfolohannelmixer vf_histogram vf_seltivolor
vs_mptests af_join f_ebur128 vfolorkey vf_hqdn3d vf_separatefields vs_tests af_ladspa f_interleave
vfolorlevels vf_hqx vf_setfield window_fu af_pan f_perms vfolormatrix vf_hue vf_showinfo af_replaygain
f_realtime vfopy vf_idet vf_showpalette af_resample f_reverse vfover_rt vf_il vf_shuffleframes
af_rubberband f_selt vfrop vf_interle vf_shuffleplanes
other FFmpeg filters
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
High speed
Medium speed
Low speed
metro - Media Transcoder
Step 1: Prepare watermark
metro - Media Transcoder
After audio normalisation
metro - Media Transcoder
GXF, ABC1
Profile:
- Crop
- Normalise audio
- Adjust ratio
- Add watermark
- GXF to MP4
metro - Media Transcoder
./ffmpeg utopia.gxf utopia.mp4
metro - Media Transcoder
Project Background:
Why did we
build Metro?
metro - Media Transcoder
metro - Media Transcoder
$$$
metro - Media Transcoder
thesupercarkids.com
metro - Media Transcoder
mini-me.com
metro - Media Transcoder
Thousands of
pieces of content
metro - Media Transcoder
More customisation
& flexibility
metro - Media Transcoder
metro - Media Transcoder
Cost vs Speed
Scale
Flexibility
metro - Media Transcoder
Questions?
metro - Media Transcoder
System Overview:
Architecture
metro - Media Transcoder
“The Cloud”
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
8 minutes 27 seconds
metro - Media Transcoder
Original
length
Time to produce rendition
60 min
7 min
42 min
Lowest
(audio)
Highest
(1500k)
metro - Media Transcoder
metro - Media Transcoder
System Overview:
Technology
Choices
metro - Media Transcoder
Node + Go
- AWS: EC2, SQS,
- S3, Dynamo/RDS
metro - Media Transcoder
Node.js
Components
metro - Media Transcoder
metro - Media Transcoder
Node.js
- Existing team experience
- Rapid development
- Solid choice for APIs
- Reservations for long lived processes
- Untyped. Sadface.
metro - Media Transcoder
Golang
Components
metro - Media Transcoder
metro - Media Transcoder
Golang
- Typed and compiled
- Cross-platform
- Easy deployment
- Concurrency (we don’t use this heavily)
metro - Media Transcoder
Golang
- Reasonable learning curve
- Magic interfaces
- Different techniques for testing
- Dependencies are challenging
metro - Media Transcoder
AWS - EC2
Elastic Compute
Load Balancing
Autoscaling
metro - Media Transcoder
metro - Media Transcoder
AWS - SQS
Simple Queuing
System
metro - Media Transcoder
metro - Media Transcoder
SQS
- First in first out (FIFO)
- Single consumer per message
- Message has “visibility timeout”
- Adjustable visibility timeout
metro - Media Transcoder
AWS - S3
File Storage
metro - Media Transcoder
metro - Media Transcoder
S3 - File Storage
- Store originals + output files
- Purge content after 7 days
metro - Media Transcoder
AWS - DynamoDB
metro - Media Transcoder
AWS - DynamoDB
metro - Media Transcoder
AWS - DynamoDB
AWS - MySQL on RDS
metro - Media Transcoder
metro - Media Transcoder
DynamoDB
- NoSQL
- Key-value pair storage
- Managed hosting
- Pay per record retrieval throughput
metro - Media Transcoder
DynamoDB
- Our use case was not optimal
- No aggregations = no stats
- Higher cost than expected
- Doesn’t scale automatically
metro - Media Transcoder
MySQL
- Switched to MySQL on RDS
- Managed hosting
- Aggregations!
- Data structure ported as-is
metro - Media Transcoder
Node + Go
- AWS: EC2, SQS,
- S3, Dynamo/RDS
metro - Media Transcoder
System Overview:
Autoscaling
Transcoders
metro - Media Transcoder
metro - Media Transcoder
How?
When?
metro - Media Transcoder
Scaling Considerations
- Hourly billing
- Instance size: Cost vs Speed
- Content priority
- Ad-hoc requests
- Varied content length
metro - Media Transcoder
AWS limitations
- AWS scaling metrics can be slow
- No automatic off switch
- Can’t choose instances to scale down
- (Instance protection now available)
metro - Media Transcoder
so many variables :(
metro - Media Transcoder
MVP:
Driven by profiles
metro - Media Transcoder
Amazon Machine
Images (AMIs)
metro - Media Transcoder
Which instance size?
metro - Media Transcoder
Time vs Cost
for 1 hour of content
Time Cost
?
metro - Media Transcoder
Winner: c4.xlarge
metro - Media Transcoder
Up: step scaling
Down: stop everything
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
Interesting puzzle :)
metro - Media Transcoder
Questions?
metro - Media Transcoder
System Overview:
Costs
metro - Media Transcoder
24 hours in
Transcoding
metro - Media Transcoder
(10am - 10am)
metro - Media Transcoder
$57.22
metro - Media Transcoder
$42.86
US Dollars
metro - Media Transcoder
EC2 Instances: $34.31
EC2 (other): $ 4.24
RDS: $ 2.66
S3: $ 1.65
SQS: $ 0.00
Total: $42.86
metro - Media Transcoder
Next 24 hours
Approx 70% of the volume
metro - Media Transcoder
$25.94
US Dollars
metro - Media Transcoder
One year’s costs?
metro - Media Transcoder
$16.5k
Australian Dollars
metro - Media Transcoder
($12.5k)
US Dollars
metro - Media Transcoder
thesupercarkids.com
metro - Media Transcoder
mini-me.com
metro - Media Transcoder
bikesandbeyond.ca
metro - Media Transcoder
Future Roadmap:
Cost
Optimisations
metro - Media Transcoder
Priority Content
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
On demand: 29c / hour
Spot: 4c / hour
c4.xlarge
metro - Media Transcoder
Transcoding in
chunks/segments
metro - Media Transcoder
metro - Media Transcoder
Future Roadmap:
Introspection &
Validation
metro - Media Transcoder
GXF, ABC1
Profile:
- Crop
- Normalise audio
- Adjust ratio
- Add watermark
- GXF to MP4
metro - Media Transcoder
ffprobe
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
Future Roadmap:
Features
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
Adoption
metro - Media Transcoder
Summary
metro - Media Transcoder
We had opportunity
for a new system
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
metro - Media Transcoder
8 minutes 27 seconds
metro - Media Transcoder
bikesandbeyond.ca
metro - Media Transcoder
www.iridetheharlemline.com/2013/05/13/a-commuters-rainbow
metro - Media Transcoder
http://developers.digital.abc.net.au/
we’re hiring :-)
metro - Media Transcoder
@daphnechong
@nickmchardy
metro - Media Transcoder
Q&A

Inside the ABC's new Media Transcoding system, Metro

  • 1.
    metro - MediaTranscoder metro
  • 2.
    metro - MediaTranscoder Daphne Chong Nick McHardy @daphnechong @nickmchardy
  • 3.
    metro - MediaTranscoder Questions?
  • 4.
    metro - MediaTranscoder Project Background - What is Transcoding? - Examples - FFmpeg - Why did we build our own?
  • 5.
    metro - MediaTranscoder Architecture - Architecture overview - Technology choices - Transcoder autoscaling policies - Costs
  • 6.
    metro - MediaTranscoder Future Roadmap - Cost optimisations - Validation and Introspection - Features
  • 7.
    metro - MediaTranscoder Project Background: What is Transcoding?
  • 8.
    metro - MediaTranscoder
  • 9.
    metro - MediaTranscoder Converting video to different formats
  • 10.
    metro - MediaTranscoder
  • 11.
    metro - MediaTranscoder
  • 12.
    metro - MediaTranscoder High speed Medium speed Low speed
  • 13.
    metro - MediaTranscoder Standard Encoding
  • 14.
    metro - MediaTranscoder Project Background: Transcoding Example
  • 15.
    metro - MediaTranscoder Step 1: Prepare watermark
  • 16.
    metro - MediaTranscoder Step 1: Prepare watermark
  • 17.
    metro - MediaTranscoder Step 1: Prepare watermark
  • 18.
    metro - MediaTranscoder Step 2: Input video (GXF)
  • 19.
    metro - MediaTranscoder Step 3: Asymmetrical cropping
  • 20.
    metro - MediaTranscoder Step 4: Scale and set aspect ratio
  • 21.
    metro - MediaTranscoder Step 5: Apply watermark
  • 22.
    metro - MediaTranscoder Step 6: Ready to stream 1500k
  • 23.
    metro - MediaTranscoder other rendition sizes 1000k 650k 500k 220k audio only
  • 24.
    metro - MediaTranscoder Original file audio track
  • 25.
    metro - MediaTranscoder Previous transcoder audio track
  • 26.
    metro - MediaTranscoder After audio normalisation
  • 27.
    metro - MediaTranscoder Transcoding profiles
  • 28.
    metro - MediaTranscoder GXF, ABC1 Profile: - Crop - Normalise audio - Adjust ratio - Add watermark - GXF to MP4
  • 29.
    metro - MediaTranscoder GXF, ABC1
  • 30.
    metro - MediaTranscoder GXF, ABC1 MOV, Arts Profile: - Adjust ratio - ProRes MOV to MP4
  • 31.
    metro - MediaTranscoder GXF, ABC1 MOV, Arts
  • 32.
    metro - MediaTranscoder Project Background: FFmpeg
  • 33.
    metro - MediaTranscoder ./ffmpeg utopia.gxf utopia.mp4
  • 34.
    metro - MediaTranscoder "hi+": { "transcoder": "ffmpeg", "transcoderoptions": "-c:v libx264 -filter_complex "[0:v]crop=720:576:0:32,yadif, scale=800x450,setdar=16/9[main], [1:v]scale=42:-1[ovrl], [main][ovrl]overlay=main_w-overlay_w-37: main_h-overlay_h-34" -crf 22 -maxrate 904k -bufsize 1000k -pix_fmt yuv420p -profile:v high -level 4.0 -refs 3 -r 25 -g 50 -c:a libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1] amerge=inputs=2, dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar 44100 -ac 2 -map 0:0 -map "[aout]" -movflags +faststart -threads 0 -y", "bitrate": "1000k", "outputfilemimetype": "video/mp4" }, "hi++": { "transcoder": "ffmpeg", "transcoderoptions": "-c:v libx264 -filter_complex "[0:v]crop=720:576:0:32,yadif, scale=1024x576,setdar=16/9[main], [1:v]scale=54:-1[ovrl], [main][ovrl]overlay=main_w-overlay_w-47: main_h-overlay_h-44" -crf 22 -maxrate 1404k -bufsize 1500k -pix_fmt yuv420p -profile:v high - level 4.0 -refs 3 -r 25 -g 50 -c:a libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1] amerge=inputs=2, dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar 44100 -ac 2 -map 0:0 -map "[aout]" -movflags +faststart -threads 0 -y", "bitrate": "1500k", "outputfilemimetype": "video/mp4" } FFmpeg filters are fun
  • 35.
    metro - MediaTranscoder af_sidhaiompress f_senmd vfropdett vf_kerndeint vf_signalstats af_adelay af_sileedett f_zmq vfurves vf_lenorrtion vf_smartblur af_aho af_sileeremove fifo vf_tdnoiz vf_libopev vf_spp af_aemphasis af_sofalizer filtfmts vf_deband vf_lut vf_ssim af_afade af_stereotools formats vf_dimate vf_lut3d vf_stk af_aformat af_stereowiden framepool vf_dejudder vf_maskedmerge vf_stereo3d af_agate af_tremolo framesy vf_delogo vf_deint vf_subtitles af_alimiter af_vibrato generate_wave_table vf_deshake vf_mergeplanes vf_super2xsai af_amerge af_volume graphdump vf_deteline vf_mpdimate vf_swapuv af_amix af_volumedett graphparser vf_disple vf_neighbor vf_teline af_anequalizer allfilters lavfutils vf_drawbox vf_noise vf_thumbnail af_anull asink_anullsink log2_tab vf_drawtext vf_null vf_tile af_apad as_anoises lswsutils vf_edgedett vf_r vf_tinterle af_aphaser as_anulls opel_allkernels vf_elbg vf_overlay vf_transpose af_apulsator as_flite pthread vf_eq vf_owdenoise vf_unsharp af_aresample as_sine setpts vf_extrtplanes vf_pad vf_uspp af_asetnsamples audio settb vf_fade vf_palettegen vf_vtorope af_asetrate avf_aphasemeter split vf_fftfilt vf_paletteuse vf_vflip af_ashowinfo avf_avtorope s_movie vf_field vf_persptive vf_vidstabdett af_astats avfoat transform vf_fieldmah vf_phase vf_vidstabtransform af_asyts avf_shoqt trim vf_fieldorder vf_pixdetest vf_vignette af_atempo avf_showfreqs unsharp_opel vf_find_rt vf_pp vf_w3fdif af_biquads avf_showsptrum vf_alphamerge vf_format vf_pp7 vf_waveform af_bs2b avf_showvolume vf_aspt vf_fps vf_psnr vf_xbr afhannelmap avf_showwaves vf_atadenoise vf_framepk vf_pullup vf_yadif afhannelsplit avfilter vf_bbox vf_framerate vf_qp vf_zoompan afhorus avfiltergraph vf_blkdett vf_framestep vf_random vf_zale afompand bbox vf_blkframe vf_frei0r vf_removegrain video afompensationdelay buffersink vf_blend vf_fspp vf_removelogo vidstabutils af_shift buffers vf_boxblur vf_geq vf_repeatfields vsink_nullsink af_dynaudnorm deshake_opel vfhromakey vf_gradfun vf_rotate vsellauto af_earwax drawutils vfodview vf_hflip vf_sab vs_life af_extrastereo dualinput vfolorbalae vf_histeq vf_ale vs_mandelbrot af_flanger f_drawgraph vfolohannelmixer vf_histogram vf_seltivolor vs_mptests af_join f_ebur128 vfolorkey vf_hqdn3d vf_separatefields vs_tests af_ladspa f_interleave vfolorlevels vf_hqx vf_setfield window_fu af_pan f_perms vfolormatrix vf_hue vf_showinfo af_replaygain f_realtime vfopy vf_idet vf_showpalette af_resample f_reverse vfover_rt vf_il vf_shuffleframes af_rubberband f_selt vfrop vf_interle vf_shuffleplanes other FFmpeg filters
  • 36.
    metro - MediaTranscoder
  • 37.
    metro - MediaTranscoder
  • 38.
    metro - MediaTranscoder High speed Medium speed Low speed
  • 39.
    metro - MediaTranscoder Step 1: Prepare watermark
  • 40.
    metro - MediaTranscoder After audio normalisation
  • 41.
    metro - MediaTranscoder GXF, ABC1 Profile: - Crop - Normalise audio - Adjust ratio - Add watermark - GXF to MP4
  • 42.
    metro - MediaTranscoder ./ffmpeg utopia.gxf utopia.mp4
  • 43.
    metro - MediaTranscoder Project Background: Why did we build Metro?
  • 44.
    metro - MediaTranscoder
  • 45.
    metro - MediaTranscoder $$$
  • 46.
    metro - MediaTranscoder thesupercarkids.com
  • 47.
    metro - MediaTranscoder mini-me.com
  • 48.
    metro - MediaTranscoder Thousands of pieces of content
  • 49.
    metro - MediaTranscoder More customisation & flexibility
  • 50.
    metro - MediaTranscoder
  • 51.
    metro - MediaTranscoder Cost vs Speed Scale Flexibility
  • 52.
    metro - MediaTranscoder Questions?
  • 53.
    metro - MediaTranscoder System Overview: Architecture
  • 54.
    metro - MediaTranscoder “The Cloud”
  • 55.
    metro - MediaTranscoder
  • 56.
    metro - MediaTranscoder
  • 57.
    metro - MediaTranscoder
  • 58.
    metro - MediaTranscoder
  • 59.
    metro - MediaTranscoder
  • 60.
    metro - MediaTranscoder
  • 61.
    metro - MediaTranscoder
  • 62.
    metro - MediaTranscoder
  • 63.
    metro - MediaTranscoder
  • 64.
    metro - MediaTranscoder
  • 65.
    metro - MediaTranscoder
  • 66.
    metro - MediaTranscoder
  • 67.
    metro - MediaTranscoder
  • 68.
    metro - MediaTranscoder
  • 69.
    metro - MediaTranscoder
  • 70.
    metro - MediaTranscoder
  • 71.
    metro - MediaTranscoder 8 minutes 27 seconds
  • 72.
    metro - MediaTranscoder Original length Time to produce rendition 60 min 7 min 42 min Lowest (audio) Highest (1500k)
  • 73.
    metro - MediaTranscoder
  • 74.
    metro - MediaTranscoder System Overview: Technology Choices
  • 75.
    metro - MediaTranscoder Node + Go - AWS: EC2, SQS, - S3, Dynamo/RDS
  • 76.
    metro - MediaTranscoder Node.js Components
  • 77.
    metro - MediaTranscoder
  • 78.
    metro - MediaTranscoder Node.js - Existing team experience - Rapid development - Solid choice for APIs - Reservations for long lived processes - Untyped. Sadface.
  • 79.
    metro - MediaTranscoder Golang Components
  • 80.
    metro - MediaTranscoder
  • 81.
    metro - MediaTranscoder Golang - Typed and compiled - Cross-platform - Easy deployment - Concurrency (we don’t use this heavily)
  • 82.
    metro - MediaTranscoder Golang - Reasonable learning curve - Magic interfaces - Different techniques for testing - Dependencies are challenging
  • 83.
    metro - MediaTranscoder AWS - EC2 Elastic Compute Load Balancing Autoscaling
  • 84.
    metro - MediaTranscoder
  • 85.
    metro - MediaTranscoder AWS - SQS Simple Queuing System
  • 86.
    metro - MediaTranscoder
  • 87.
    metro - MediaTranscoder SQS - First in first out (FIFO) - Single consumer per message - Message has “visibility timeout” - Adjustable visibility timeout
  • 88.
    metro - MediaTranscoder AWS - S3 File Storage
  • 89.
    metro - MediaTranscoder
  • 90.
    metro - MediaTranscoder S3 - File Storage - Store originals + output files - Purge content after 7 days
  • 91.
    metro - MediaTranscoder AWS - DynamoDB
  • 92.
    metro - MediaTranscoder AWS - DynamoDB
  • 93.
    metro - MediaTranscoder AWS - DynamoDB AWS - MySQL on RDS
  • 94.
    metro - MediaTranscoder
  • 95.
    metro - MediaTranscoder DynamoDB - NoSQL - Key-value pair storage - Managed hosting - Pay per record retrieval throughput
  • 96.
    metro - MediaTranscoder DynamoDB - Our use case was not optimal - No aggregations = no stats - Higher cost than expected - Doesn’t scale automatically
  • 97.
    metro - MediaTranscoder MySQL - Switched to MySQL on RDS - Managed hosting - Aggregations! - Data structure ported as-is
  • 98.
    metro - MediaTranscoder Node + Go - AWS: EC2, SQS, - S3, Dynamo/RDS
  • 99.
    metro - MediaTranscoder System Overview: Autoscaling Transcoders
  • 100.
    metro - MediaTranscoder
  • 101.
    metro - MediaTranscoder How? When?
  • 102.
    metro - MediaTranscoder Scaling Considerations - Hourly billing - Instance size: Cost vs Speed - Content priority - Ad-hoc requests - Varied content length
  • 103.
    metro - MediaTranscoder AWS limitations - AWS scaling metrics can be slow - No automatic off switch - Can’t choose instances to scale down - (Instance protection now available)
  • 104.
    metro - MediaTranscoder so many variables :(
  • 105.
    metro - MediaTranscoder MVP: Driven by profiles
  • 106.
    metro - MediaTranscoder Amazon Machine Images (AMIs)
  • 107.
    metro - MediaTranscoder Which instance size?
  • 108.
    metro - MediaTranscoder Time vs Cost for 1 hour of content Time Cost ?
  • 109.
    metro - MediaTranscoder Winner: c4.xlarge
  • 110.
    metro - MediaTranscoder Up: step scaling Down: stop everything
  • 111.
    metro - MediaTranscoder
  • 112.
    metro - MediaTranscoder
  • 113.
    metro - MediaTranscoder
  • 114.
    metro - MediaTranscoder
  • 115.
    metro - MediaTranscoder
  • 116.
    metro - MediaTranscoder Interesting puzzle :)
  • 117.
    metro - MediaTranscoder Questions?
  • 118.
    metro - MediaTranscoder System Overview: Costs
  • 119.
    metro - MediaTranscoder 24 hours in Transcoding
  • 120.
    metro - MediaTranscoder (10am - 10am)
  • 121.
    metro - MediaTranscoder $57.22
  • 122.
    metro - MediaTranscoder $42.86 US Dollars
  • 123.
    metro - MediaTranscoder EC2 Instances: $34.31 EC2 (other): $ 4.24 RDS: $ 2.66 S3: $ 1.65 SQS: $ 0.00 Total: $42.86
  • 124.
    metro - MediaTranscoder Next 24 hours Approx 70% of the volume
  • 125.
    metro - MediaTranscoder $25.94 US Dollars
  • 126.
    metro - MediaTranscoder One year’s costs?
  • 127.
    metro - MediaTranscoder $16.5k Australian Dollars
  • 128.
    metro - MediaTranscoder ($12.5k) US Dollars
  • 129.
    metro - MediaTranscoder thesupercarkids.com
  • 130.
    metro - MediaTranscoder mini-me.com
  • 131.
    metro - MediaTranscoder bikesandbeyond.ca
  • 132.
    metro - MediaTranscoder Future Roadmap: Cost Optimisations
  • 133.
    metro - MediaTranscoder Priority Content
  • 134.
    metro - MediaTranscoder
  • 135.
    metro - MediaTranscoder
  • 136.
    metro - MediaTranscoder On demand: 29c / hour Spot: 4c / hour c4.xlarge
  • 137.
    metro - MediaTranscoder Transcoding in chunks/segments
  • 138.
    metro - MediaTranscoder
  • 139.
    metro - MediaTranscoder Future Roadmap: Introspection & Validation
  • 140.
    metro - MediaTranscoder GXF, ABC1 Profile: - Crop - Normalise audio - Adjust ratio - Add watermark - GXF to MP4
  • 141.
    metro - MediaTranscoder ffprobe
  • 142.
    metro - MediaTranscoder
  • 143.
    metro - MediaTranscoder
  • 144.
    metro - MediaTranscoder
  • 145.
    metro - MediaTranscoder
  • 146.
    metro - MediaTranscoder
  • 147.
    metro - MediaTranscoder Future Roadmap: Features
  • 148.
    metro - MediaTranscoder
  • 149.
    metro - MediaTranscoder
  • 150.
    metro - MediaTranscoder
  • 151.
    metro - MediaTranscoder
  • 152.
    metro - MediaTranscoder Adoption
  • 153.
    metro - MediaTranscoder Summary
  • 154.
    metro - MediaTranscoder We had opportunity for a new system
  • 155.
    metro - MediaTranscoder
  • 156.
    metro - MediaTranscoder
  • 157.
    metro - MediaTranscoder
  • 158.
    metro - MediaTranscoder
  • 159.
    metro - MediaTranscoder 8 minutes 27 seconds
  • 160.
    metro - MediaTranscoder bikesandbeyond.ca
  • 161.
    metro - MediaTranscoder www.iridetheharlemline.com/2013/05/13/a-commuters-rainbow
  • 162.
    metro - MediaTranscoder http://developers.digital.abc.net.au/ we’re hiring :-)
  • 163.
    metro - MediaTranscoder @daphnechong @nickmchardy
  • 164.
    metro - MediaTranscoder Q&A