『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
楼主: louis_lee

[新奇玩法] 【立省100%】小米系可视门铃本地存储

  [复制链接]

18

主题

555

帖子

3986

积分

元老级技术达人

积分
3986
金钱
3396
HASS币
182
 楼主| 发表于 2023-3-14 18:38:26 | 显示全部楼层
piaoling 发表于 2023-3-14 18:12
总是提醒这个,也修改了几次,找不到原因

door_video_autosave uses an unknown service

你是不是没在configuration.yaml配置shell command啊?
回复

使用道具 举报

18

主题

555

帖子

3986

积分

元老级技术达人

积分
3986
金钱
3396
HASS币
182
 楼主| 发表于 2023-3-14 18:46:02 | 显示全部楼层
本帖最后由 louis_lee 于 2023-3-15 16:31 编辑
miaoer 发表于 2023-3-14 15:38
这个应该是系统问题了,我这边没有nodered

测试了几段使用vlc转换的,用ffmpeg检测发现有dts问题

感谢!我用了你提供的ffmpeg方法,好像还是只有第一个视频的片段,后边的被skip.


不过,@dscao大佬提供的链接,用ffmpeg搞成功了,哪天有时间再把代码做下完善,思路就是用ffmpeg将m3u8文件中每个视频单独转换,最后再合并。



step1: 将m3u8文件下wget保存到本地

EXTM3U
#EXT-X-VERSION:7
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:35
#EXT-X-KEY:METHOD=AES-128,URI="XXX"",IV=0xXXXXX
#EXTINF:1.008
https://1
#EXT-X-DISCONTINUITY
#EXTINF:2.008
https://2
#EXT-X-DISCONTINUITY
#EXTINF:3.008
https://3
#EXT-X-DISCONTINUITY
#EXT-X-ENDLIST


然后再将这个文件头尾保留,按照3个片段切分成三个文件temp_{i}.mp4  i=1,2,3,如下所示:

EXTM3U
#EXT-X-VERSION:7
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:35
#EXT-X-KEY:METHOD=AES-128,URI="XXX"",IV=0xXXXXX
#EXTINF:1.008
https://1
#EXT-X-DISCONTINUITY
#EXT-X-ENDLIST


然后对每个片段转换成mp4

ffmpeg -protocol_whilelist 'file,crypto,data,https,tls,tcl' -i temp_1.m3u8  temp_1.mp4


最后在合并起来

echo -e "file 'test_1.mp4'\nfile 'test_2.mp4'\nfile 'test_3.mp4'" > concat.list
ffmpeg -f concat -safe 0 -i concat.list -c copy output.mp4


经测试,结果可以包含原m3u8文件的所有视频片段!



回复

使用道具 举报

15

主题

370

帖子

2470

积分

金牌会员

Rank: 6Rank: 6

积分
2470
金钱
2100
HASS币
10
发表于 2023-3-14 20:33:33 | 显示全部楼层
牛掰,紫薯布丁
回复

使用道具 举报

0

主题

250

帖子

1869

积分

金牌会员

Rank: 6Rank: 6

积分
1869
金钱
1619
HASS币
0
发表于 2023-3-14 21:26:06 | 显示全部楼层
arthurfsy 发表于 2023-3-13 16:26
巧了 我也是blade star,请问你是在windows下面新增sh脚本,然后上传到HA的吗

Xiaomi Miot Auto这个差价可以看视频,这个自动保存我还没搞好
回复

使用道具 举报

18

主题

555

帖子

3986

积分

元老级技术达人

积分
3986
金钱
3396
HASS币
182
 楼主| 发表于 2023-3-15 13:48:30 | 显示全部楼层
本帖最后由 louis_lee 于 2023-3-27 16:46 编辑

如果你按照步骤执行下来,发现视频只有少部分片段,比如米家上看视频15秒,结果用本文方法看只有1-2秒。请将如下代码替换原来的xiaomi_video_autosave.sh文件:

#! /bin/bash
##### setting section######
path="/media/xiaomi_video/"
video_limit=500
temp_path="/config/xiaomi_video_temp/"
#####################

if [ ! -d $temp_path  ];then
  mkdir $temp_path
fi

if [ ! -d $path ];then
  mkdir $path
fi

current_file_size=`ls $path|wc -l`
video_url=$1
raw_file_name=`echo $2|sed 's/[^0-9]//g'`
file_name=$path$raw_file_name".mp4"


## remove oldest video if file_size > video_limit
if [ $current_file_size -ge $video_limit ]; then
  ls $path -tr|head -n $(($current_file_size-$video_limit+1))|sed "s/^/${path//\//\\\/}/g"|xargs rm
fi


curl $video_url > $temp_path"m3u8"
ts_position_list=(`grep -n "#EXTINF" $temp_path"m3u8" |cut -d ":" -f1`)
head_end_position=`expr ${ts_position_list[0]} - 1`
tail_postion=`cat $temp_path"m3u8"|wc -l`

for((i=0;i<${#ts_position_list[@]};i++));do

  start=${ts_position_list[i]}
  if [ `expr $i + 1` -eq  ${#ts_position_list[@]} ] ; then
    end=`expr $tail_postion - 1`
  else  
    end=`expr ${ts_position_list[i+1]} - 1`
  fi

  sed -n "1,${head_end_position}p" $temp_path"m3u8" >> $temp_path$i".m3u8"
  sed -n "${start},${end}p" $temp_path"m3u8" >> $temp_path$i".m3u8"
  echo "#EXT-X-ENDLIST" >> $temp_path$i".m3u8"

  ffmpeg -protocol_whitelist 'file,crypto,data,https,tls,tcp' -i $temp_path$i".m3u8"  $temp_path$i".mp4"

  echo file \'$temp_path$i".mp4"\' >> $temp_path"list"

done

ffmpeg -f concat -safe 0 -i $temp_path"list" -c copy $file_name

rm "$temp_path"*""

评分

参与人数 7金钱 +67 收起 理由
529616965 + 5 在下对你的景仰犹如滔滔长江之水,连绵不绝.
kei81131 + 5 论坛有你更精彩!
ruike007 + 8 大哥,喝冰阔落
Alkali + 8 高手,这是高手!
anlong + 16 高手,这是高手!
miaoer + 5 感谢楼主分享!
dscao + 20 在下对你的景仰犹如滔滔长江之水,连绵不绝.

查看全部评分

回复

使用道具 举报

18

主题

555

帖子

3986

积分

元老级技术达人

积分
3986
金钱
3396
HASS币
182
 楼主| 发表于 2023-3-15 14:04:51 | 显示全部楼层
dscao 发表于 2023-3-13 18:35
好的。有空研究一下吧。
对了,iphone的浏览器可以正常打开这个m3u8地址的视频。 电脑的浏览器不行,PotPl ...

我找到解决方案了,已测试过给我的视频,能正常使用、播放。具体见35楼
回复

使用道具 举报

18

主题

555

帖子

3986

积分

元老级技术达人

积分
3986
金钱
3396
HASS币
182
 楼主| 发表于 2023-3-15 14:06:27 | 显示全部楼层
本帖最后由 louis_lee 于 2023-3-15 14:10 编辑
miaoer 发表于 2023-3-14 15:38
这个应该是系统问题了,我这边没有nodered

测试了几段使用vlc转换的,用ffmpeg检测发现有dts问题

我找到了使用ffmpeg转存视频的方法啦,具体见35楼
回复

使用道具 举报

0

主题

24

帖子

963

积分

高级会员

Rank: 4

积分
963
金钱
939
HASS币
0
发表于 2023-3-15 14:38:50 | 显示全部楼层
louis_lee 发表于 2023-3-15 14:06
我找到了使用ffmpeg转存视频的方法啦,具体见35楼

我这边小米门铃尝试也可以了!原来是要分开下载再合并,怪不得之前看只有第一段,非常感谢!
不过这脚本在我这边docker里报错,好像是因为我默认开的是sh,需要开头加一句:
#! /bin/bash
回复

使用道具 举报

18

主题

555

帖子

3986

积分

元老级技术达人

积分
3986
金钱
3396
HASS币
182
 楼主| 发表于 2023-3-15 14:48:43 | 显示全部楼层
本帖最后由 louis_lee 于 2023-3-15 14:59 编辑
miaoer 发表于 2023-3-15 14:38
我这边小米门铃尝试也可以了!原来是要分开下载再合并,怪不得之前看只有第一段,非常感谢!
不过这脚本 ...

okk,那我加上
我感觉是小米的问题,其他的都不需要这种操作
回复

使用道具 举报

0

主题

24

帖子

963

积分

高级会员

Rank: 4

积分
963
金钱
939
HASS币
0
发表于 2023-3-15 15:34:00 | 显示全部楼层
louis_lee 发表于 2023-3-15 14:48
okk,那我加上
我感觉是小米的问题,其他的都不需要这种操作

是的,之前用hass-xiaomi-miot插件也是这个门铃没法解码视频,已经把您的帖子推荐到github了,看一下能不能在插件中也正常使用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-26 03:53 , Processed in 0.271142 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表