ffmpegchromecastgoogle-castmpeg-dashshaka

How to create a DASH VOD for Chromecast with ffmpeg?


I need to serve long videos (~2 hours) from a web server to mobile clients and the clients should be able to play the videos via Chromecast. I have chosen mpeg-dash for this purpose: video encoder is h.264 (level 4.1), audio is aac (although I've tried diffrent ones).

I've tried ffmpeg, MP4Box and some other tools to generate videos; most of the time I succeeded playing them on VLC or on a mobile client (locally), but not with Chromecast.

I've tried Amazon's Elastic Transcoder and it worked, but it gave me one big file whereas I need many small segments.

CORS are set.

Chromecast remote debugging didn't help much.

Do you know how to do this?


Solution

  • Finally, I have managed to do it. This is the script that converts a video file to dash with many segments which can be played by Chromecast:

    ffmpeg -y -threads 8 \
    -i input.ts \
    -c:v libx264 \
    -x264-params keyint=60:scenecut=0 \
    -keyint_min 60 -g 60 \
    -flags +cgop \
    -pix_fmt yuv420p \
    -coder 1 \
    -bf 2 \
    -level 41 \
    -s:v 1920x1080 \
    -b:v 6291456 \
    -vf bwdif \
    -r 30 \
    -aspect 16:9 \
    -profile:v high \
    -preset slow \
    -acodec aac \
    -ab 384k \
    -ar 48000 \
    -ac 2 \
    output.mp4 2> output/output1_ffmpeg.log \
    \
    && MP4Box -dash 2000 \
    -rap \
    -out output/master.mpd \
    -profile simple \
    output.mp4#video output.mp4#audio 2> output/output2_mp4box.log
    

    As you can see, first I encode the input file; then I use MP4Box to convert it to dash. Note that Chromecast can fail playing video with more than 2 audio channels (I use 2 with -ac 2).