- #!/bin/bash
- # Be warned!!! there is an "rm -r" at the end of this script. I do not guarantee anything, in particular that (mis)use won't damage something important.
- # Use at your own risk!
- # Copyright public domain
- # Derived from: http://dryize.wordpress.com/2014/04/02/protected-hls-using-ffmpeg-and-openssl/
- set -e # Exit on errors
- keyFile='video.key'
- vidFile="$1"
- playList='cc.m3u8' # Must end with .m3u8!
- splitFilePrefix='stream'
- wKeyPath="$3/$keyFile"
- # Only run if the video file is readable and is not an irregular file
- if [ -f "$vidFile" -a -r "$vidFile" ]; then
- # Whole rest of program runs in this if; exits 2 at the end if the above fails.
- # If folder exists, add it to our paths
- if [ -d "$2" ]; then
- outDir="$2"
- else # Try to make the directory
- mkdir "$2" || exit 1
- outDir="$2"
- fi
- tempDir="$outDir/.$$_tmp"
- keyFile="$outDir/$keyFile"
- mkdir $tempDir # It is deleted later
- # Stuff from the original script
- openssl rand 16 > $keyFile
- # I'm not sure if I have the quoting right on this. If not, try removing the double quotes in the middle.
- encryptionKey=`cat $keyFile | hexdump -e '16/1 "%02x"'`
- # Here's where I run ffmpeg
- ffmpeg -i "$vidFile" -c copy -map 0 -bsf:v h264_mp4toannexb -flags \\
- global_header -f segment -segment_time 10 -segment_list_size 0 \\
- -segment_list "$tempDir/$playList" -segment_format mpegts "$tempDir/$splitFilePrefix"%d.ts
- # N.B. I question some of those parameters, such as segment_time, but this is not my command.
- # I also had to use libfdk_aac instead of libvo_aacenc
- # I thought m3u8 playlists needed full URLs, but he doesn't include them.
- numberOfTsFiles=`ls "$tempDir/$splitFilePrefix"*.ts | wc -l`
- for (( i=0; i<$numberOfTsFiles; i++ ))
- do
- initializationVector=`printf '%032x' $i`
- openssl aes-128-cbc -e -in "$tempDir/$splitFilePrefix"$i.ts \\
- -out "$outDir/$splitFilePrefix"$i.ts -nosalt -iv $initializationVector -K $encryptionKey
- done
- # Write something to the middle of the head of the playlist
- {
- head -2 "$tempDir/$playList"
- echo '#EXT-X-KEY:METHOD=AES-128,URI=''"'"$wKeyPath"'"'
- echo '#EXT-X-MEDIA-SEQUENCE:0'
- egrep "$tempDir/$playList" -vie '#EXT-X-MEDIA-SEQUENCE:' \\
- | tail -n +3
- } > "$outDir/$playList"
- # Get rid of the unencrypted files and unmodified playlist
- rm -rf "$tempDir"
- # Close the opening if
- else exit 2
- fi
- #该片段来自于http://www.codesnippet.cn/detail/2212201514264.html
来源: http://www.codesnippet.cn/detail/2212201514264.html