代码拉取完成,页面将自动刷新
# AMD64
$ sudo docker-compose build
# arm64
$ sudo docker-compose -f docker-compose_arm.yaml build
# AMD64
$ sudo docker-compose up -d
# arm64
$ sudo docker-compose -f docker-compose_arm.yaml up -d
利用ffmpeg
进行推流
# source: 本地视频文件名
# 192.168.10.108 : 服务器ip地址
# 8900 : rtmp监听端口,映射容器内的`1935`
ffmpeg -re -i <source>.mp4 -acodec copy -vcodec copy -f flv -an rtmp://192.168.10.108:8900/live/a
利用vlc
测试,地址: rtmp://192.168.10.108:8900/live/a
192.168.10.108
: 主机ip
地址8900
: rtmp
监听端口,映射容器内的1935
a
: 密文,与推流密文对应复制视频文件到vod
点播目录
# source: 视频文件名
$ cp <source>.mp4 /var/www/hls
利用vlc
测试: rtmp://192.168.10.108:8900/vod/<source>.mp4
192.168.10.108
: 主机ip
地址8900
: rtmp
监听端口,映射容器内的1935
<source>.mp4
: 视频文件测试只有较短的视频才能实现
rmtp
点播
ts
文件和m3u8
文件放在/www/hls_last
目录下.# source: 被切分的文件名
$ ffmpeg -i <source>.mp4 -codec:v libx264 -codec:a mp3 -map 0 -f ssegment -segment_format mpegts -segment_list <source>.m3u8 -segment_time 10 <source>_%03d.ts
$ cp -r <source>* /www/hls_last
vlc
输入[http://192.168.10.108:8800/hls_last/<video>.m3u8
]即可看到点播视频
192.168.10.108
: 主机ip
地址8800
: http
监听端口,,映射容器内的80
<video>.m3u8
: 点播视频的m3u8
本地通过ffmpeg
向服务器推流,在服务器的指定目录生成以<stream>
命名的文件夹以及视频文件的切片和m3u8
文件,1
分钟之后删除切片文件
# source: 本地视频文件名
# 192.168.10.108 : 主机ip地址
# 8900 : rtmp监听端口,映射容器内的`1935`
# stream: 流
$ ffmpeg -re -i <source>.mp4 -vcodec libx264 -vprofile baseline -g 30 -acodec aac -strict -2 -f flv rtmp://192.168.10.108:8900/push/<stream>
vlc
通过[http://192.168.10.108:8800/hls/<stream>/index.m3u8
]进行点播
192.168.10.108
: 主机ip
地址8800
: http
监听端口,映射容器内的80
<stream>
: 推送视频时的stream
<video>.m3u8
: 点播视频的m3u8
服务端通过ffmpeg
将源文件切片,然后将生成文件放入/www/dash_last
文件夹
# INPUT_VIDEO: 源文件
# OUTPUT:输出文件名
$ ffmpeg -hide_banner -y -threads 0 -i INPUT_VIDEO -filter_complex 'split=2[s0][s1];[s0]scale=480:-2[480s];[s1]scale=360:-2[360s]' -map '[480s]' -c:v:0 libx264 -crf 25 -preset veryslow -map '[360s]' -c:v:1 libx264 -crf 27 -preset veryslow -map a -c:a:0 libfdk_aac -ar:a:0 22050 -map a -c:a:1 libfdk_aac -ar:a:1 44100 -g 150 -sc_threshold 0 -b_strategy 0 -min_seg_duration 5000 -use_timeline 0 -use_template 1 -single_file 1 -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" -f dash OUTPUT.mpd
# 如果没有安装libfdk_aac解码器,可以使用mp3替换
$ ffmpeg -hide_banner -y -threads 0 -i INPUT_VIDEO -filter_complex 'split=2[s0][s1];[s0]scale=480:-2[480s];[s1]scale=360:-2[360s]' -map '[480s]' -c:v:0 libx264 -crf 25 -preset veryslow -map '[360s]' -c:v:1 libx264 -crf 27 -preset veryslow -map a -c:a:0 mp3 -ar:a:0 22050 -map a -c:a:1 mp3 -ar:a:1 44100 -g 150 -sc_threshold 0 -b_strategy 0 -min_seg_duration 5000 -use_timeline 0 -use_template 1 -single_file 1 -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" -f dash OUTPUT.mpd
$ ffmpeg -i test.mp4 -c copy -f dash index.mpd
vlc
输入地址[http://192.168.10.108:8800/dash_last/OUTPUT.mpd
]即可看到点播视频或者使用以下脚本生成dash
切片
#!/bin/bash
clean() {
FILE_NAME=${1%.*}
fm_list="320x180_500k 640x360_750k 640x360_1000k 1280x720_1500k"
for item in ${fm_list[@]};do
[ -e ${FILE_NAME}_video_${item}.mp4 ] && rm ${FILE_NAME}_video_${item}.mp4
[ -e ${FILE_NAME}_video_${item}_f.mp4 ] && rm ${FILE_NAME}_video_${item}_f.mp4
done
[ -e ${FILE_NAME}_audio_128k.mp4 ] && rm ${FILE_NAME}_audio_128k.mp4
[ -e ${FILE_NAME}_audio_128k_f.mp4 ] && rm ${FILE_NAME}_audio_128k_f.mp4
[ -e output ] && rm -rf output
}
dash_file() {
FILE_NAME=${1%.*}
fm_list="320x180_500k 640x360_750k 640x360_1000k 1280x720_1500k"
if [ ! -e ${FILE_NAME}.mp4 ]; then
echo "${FILE_NAME}.mp4 not exists"
exit 1
fi
begin=`date +%s`
echo "------------------------------------------------------"
for item in ${fm_list[@]};do
{
# echo ${item} ${item%_*} ${item#*_}
# echo "ffmpeg -i ${FILE_NAME}.mp4 -s ${item%_*} -c:v libx264 -b:v ${item#*_} -g 90 -an ${FILE_NAME}_video_${item}.mp4"
ffmpeg -i ${FILE_NAME}.mp4 -s ${item%_*} -c:v libx264 -b:v ${item#*_} -g 90 -an ${FILE_NAME}_video_${item}.mp4
}
#&
done
# wait
ffmpeg -i ${FILE_NAME}.mp4 -c:a aac -b:a 128k -vn ${FILE_NAME}_audio_128k.mp4
echo "------------------------------------------------------"
end=`date +%s`
echo -e "\033[47;30mdecoe video spend $((end-begin))s\033[0m"
for item in `ls ${FILE_NAME}*k.mp4`;do
mp4fragment ${item} ${item%.*}_f.mp4
done
mp4dash ${FILE_NAME}_*_f.mp4
}
if [ $# -lt 1 ];then
echo "$0 input_file.mp4"
exit 1
fi
clean ${1}
dash_file ${1}
需要安装
Bento4
,并设置环境变量
$ wget http://zebulon.bok.net/Bento4/binaries/Bento4-SDK-1-5-1-629.x86_64-unknown-linux.zip
$ unzip Bento4-SDK-1-5-1-629.x86_64-unknown-linux.zip
$ export PATH=$PATH:$(pwd)/Bento4-SDK-1-5-1-629.x86_64-unknown-linux/bin
# 使用脚本分片视频文件
$ bash dash_mp4.sh SOURCE.mp4
使用vlc
输入地址[http://192.168.10.108:8800/dash_last/SOURCE/output/stream.mpd
]即可看到点播视频
本地通过ffmpeg
向服务器推流,在服务器的指定目录生成以<stream>
前缀的m4a
, m4v
和mpd
文件.
# source: 本地视频文件名
# 192.168.10.108: 主机ip地址
# 8900 : rtmp监听端口
# stream: 流
$ ffmpeg -re -i <source>.mp4 -vcodec libx264 -vprofile baseline -g 30 -acodec aac -strict -2 -f flv rtmp://192.168.10.108:8900/dash/<stream>
vlc
输入地址[rtmp://192.168.10.108:8900/dash/<stream>
]即可看到点播视频vlc
输入地址[http://192.168.10.108:8800/dash/<stream>.mpd
]即可看到点播视频访问: http;//192.168.10.108:8800
,192.168.10.108
我为主机ip
# 安装本地环境
$ sudo pip3 install virtualenv -i https://pypi.douban.com/simple
$ virtualenv .venv
$ . .venv/bin/activate
$ pip3 install --upgrade pip -i https://pypi.douban.com/simple
$ pip3 install -r python/requirements.txt -i https://pypi.douban.com/simple
# 初始化
$ python python/www/db.py dev
$ sudo chmod 777 /data/demo.db
$ python python/www/hlsutils.py --july /root/july
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。