这个问题会显得很奇怪,请花点时间阅读。
1-我有一个包含ffmpeg命令的.sh (这个命令可以工作,这里可以)
2-我通过API调用触发.sh来开始记录(这里也很好)
3- ffmpeg开始生成.mp4
4-我想将.mp4与.m3u8进行符号链接(因为safari不会将.mp4作为清单阅读)
**您可能想知道:为什么不将.sh中的ffmpeg更改为输出.m3u8?
*我确实尝试过,但是由于未知的原因,除了.mp4之外,脚本不喜欢任何扩展名
*如果输出.mov .mkv .m3u8 =>,我不知道为什么,但它在10秒后停止:
*我找到的解决方案是让ffmpeg创建.mp4,然后创建一个指向.m3u8的符号链接,这样hls.js就可以在包括safari在内的所有浏览器中播放.
在创建符号链接之前,我正在寻找一种等待这个.mp4存在的方法。
在使用ln -s fileThatDontExistsYet.mp4 NewFile.m3u8之前,我进行了测试以创建符号链接,但是当试图访问NewFile.m3u8时,结果是一个404 not .如果我手动等待.mp4,然后执行相同的=>命令,它就能工作。
所以在这种奇怪的情况下,我发现在创建符号链接之前的睡眠x秒是危险的,而且不是很好的实践.有办法通过linux命令循环直到文件到达符号链接吗?
-编辑1-编辑1
上下文: SERVER1 =>网站SERVER2 => openvidu与docker一起运行
-1-用户创建聊天室( SERVER2 ) -2- SERVER2向SERVER1发送网络钩子通知会话开始-3-然后,一个API调用: SERVER1告诉SERVER2记录和composed.sh被触发-同时: SERVER1等待x秒,远程ssh创建符号链接-4- - .sh启动ffmpeg -5- ffmpeg在聊天过程中创建.mp4 -6- -我的修改是生成一个HLS格式流- -7- -其他用户通过他们的浏览器访问.m3u8 (页面必须播放.m3u8) {SERVER1} -8- -我可以为流实现4秒的延迟,这还不错;)
查看完整原始.sh的链接如下:https://raw.githubusercontent.com/OpenVidu/openvidu/master/openvidu-server/docker/openvidu-recording/scripts/composed.sh
*第79行*
-c:a aac -c:v libx264 -preset ultrafast -crf 28 -refs 4 -qmin 4 -pix_fmt yuv420p用这个
-c:a aac -c:v libx264 -movflags +dash
-preset ultrafast -crf 28 -refs 4 -qmin 4 -pix_fmt yuv420p
-tune zerolatency -c:a aac -ac 2 -profile:v main
-flags -global_header -bufsize 969k
-hls_time 1 -hls_list_size 0 -g 30
-start_number 0 -streaming 1 -hls_playlist 1
-lhls 1 -hls_playlist_type event -f hls听起来很奇怪但很管用..。我唯一担心的是“等待x秒”来创建一个符号链接..。什么是服务器非常繁忙,.mp4是在x秒之后生成的.它会产生播放流的问题。
发布于 2021-04-02 01:07:38
我不得不承认,我没有读过你的全部问题,但从标题来看,这应该是可行的:
while [ ! -f /tmp/originalfile ] ; do sleep 1 ; done ; ln -s /tmp/originalfile /tmp/symlink
发布于 2021-04-02 01:44:09
您可以使用inotifywait等待在父目录中创建文件:
inotifywait -e create /path/to/parenthttps://unix.stackexchange.com/questions/643159
复制相似问题