自打开了博客以后,一直在写技术说明文,今天打算写点程序以外的东西换换味口。前段时间在某鱼上以 300 元的价格入手了一套完整的 gopro3+ 运动摄像头,带一张 32G SD 卡,两块备用电池,一个无线遥控,以及 N 多配件:




相机本身支持 720p~4K 分辨率,不过 4K 的时候帧数已经比较渣了 (12.5 fps),最合适的还是 1080p,能到 24 帧及以上。

据说 gopro3+ 虽老 —— 最新的 gopro 版本已经到 10,不过价钱也非常感人,达到了 3000+ —— 画质也能完爆两三百的行车记录仪,于是想将它改造为一个摩托车记录仪,下面是探索的过程。
套件中自带 SD 读卡器,拍摄完的照片和视频可以直接在笔记本电脑读取 (要有 SD 卡插口),不过这种方式需要开电脑,使用起来不是特别方便,好在 gopro3+ 已经支持手机 App 连接,在 App 商城中下载一个名为 GoPro Quik 的软件即可。

第一次连接稍微费了点功夫,需要将 gopro3 的 wifi 连接设置为 app 模式并启动,手机侧需要开启蓝牙并配对,之后连上 gopro 的 wifi 就可以了 (以后打开 App 就会直接连接相机 wifi,不需要额外设置了)。在 wifi 列表里找了一圈,果然发现一个新增 wifi,但是名字有点奇怪 :luoquanyou,报着试试看的态度连接了一下,果然没有成功:

需要输入密码,想想也是,不能随便让别人访问你拍摄的内容是吧。网上搜了下,说默认密码是 goprohero,进不去;试了下 12356,不行;问了下卖家,对方表示时间长了忘记了,并安抚我说没有手机 app 也可以下载数据,最后提醒我快点确认收货,一次无效沟通。不过咱也是搞 IT 出身的,虽然装电脑不是特别在行,破解个 wifi 密码那还不是分分钟的事儿 ?
果然在网路上搜到了重置 gopro wifi 的方法,其实就是直接从官网下载固件+wifi 包,在电脑端通过文件复制覆盖 SD 卡中的内容,达到重置出厂设置的目的,顺便也就把 wifi 重置了。按照操作步骤一步步执行,走到下载文件这步空气凝固了:

“下载更新” 按钮一直是灰的,鼠标移上去是禁止标志。一开始以为是自己的网慢,耐心的等待了几分钟,然鹅没有任何变化;怀疑是 firefox 的锅,毕竟只有 4% 的用户在使用了,切换 chrome,然鹅没有改观;怀疑是 linux 笔记本有问题,换 windows 本试,然鹅结果一样…
做工如此精致的官网,你不能坑我啊。切换思路,看看网上有没有 mirror 站点,果然又搜到一篇文章,作者已经把下载好的 gopro3+ 固件上传到了 csdn,可以直接下载,然鹅需要 50 C币,果断放弃,之前被赚 C 币折磨的阴影还在,不能再掉坑里一次了~
就在一愁莫展的时候,无意间看到一篇文章,说 wifi 设置位于 setting.in 的文件,浏览 SD 卡文件,果然在根目录有这么个文件,打开一看:
{"current_password":"","token":"","wifi_ap":{"ssid":"luoquanyou","password":"12345678"},"wifi_networks":[]}
wifi 密码居然明文写在上面,真是踏破铁鞋无觅处,得来全不费功夫~
使用密码 12345678 成功连上了 wifi,话说这和我之前的尝试就差了两个数字嘛,好像明白了暴力破解为什么长盛不衰。
gopro3 的软件开发者留了一个安全漏洞,作为同行很好奇新版本是否修复了这个问题。不过转念一想,即使 wifi 配置加了密,在 SD 卡随时可以被取走的情况下,这种安全性又有什么意义?除非可以物理锁住 SD 卡,如果能做到这一步的话,wifi 密码也是可以保证安全的,逻辑闭环,哈哈,没毛病~
本来想换一个 wifi 名和密码的,但是 SD 卡是只读的,不能手动更改。算了,不折腾了,就这样凑合着用吧。
浏览 SD 卡文件,还发现卖家大爷的几张影像,看起来像是二手贩子,对 gopro 研究的还是不够啊,卖便宜了 :)。

这是我离卖家最近的一次,好在分辨率不高,相当于自动打码了…
gopro 作为专业的运动相机,擅长拍摄运动过程中几个精彩的片段,不适合做长时间的记录工作,要将它改造为行车记录仪,还需要做一翻针对性的配置,主要分为供电与存储两个方面。
制约长时间记录的瓶颈首先是供电问题,单使用电池的场景下,一块电池大概只能支持半个小时 (21 min 实测),骑行过程中又不方便换电池,相当于每半个小时要停车一次,这是不能接受的。于是考虑使用车载 USB 供电方案,在这种情况下只要车子有电,gopro 就不会断电,而行驶过程中电瓶会不断充电,因此可以理解为无限续航。不过一旦接上电源线,就给 gopro 带来两个限制:
第一个问题好理解,因为有线,所以不方便装在头盔、手臂等位置,只能安装在车子头部靠充电口近的地方,好在记录仪本身就是要装在这个位置,这个没有多大影响;
第二个问题是因为 gopro 配备的几个壳子中,以防水壳居多,为了达到官方宣称的 60 米深度的防水能力,除了几个防水按钮外就没有其它接口了,导致它只能使用电池供电:




还有几个防水壳在后面开了很大的“天窗”来改善散热和麦克音效,但它们在电源接口处都没有预留充电线出口:

这样就只剩下面这个壳子可选了:

单薄的像个塑料片儿,考虑到摩旅途中遇雨的概率不低,这东西基本没有防水能力。另外为了接充电线,需要打开侧仓盖,时间久了灰尘也会进入机体,真不是一个好的解决方案。于是在某宝上搜索"gopro 充电防水壳",居然真的有卖:


不过价格感人,小 100 块一个,果断放弃。先这样凑合用着。
-------------------- 20220909 更新 ---------------------
手里有两个防水壳,决定用其中一个做试验,开个小天窗来通电源线,以下是实操过程。话不多说,直接上图:








充电线头刚刚好塞进去,虽然不能防水,但是一般小雨已经不惧了。
-------------------- 20220909 更新 ---------------------
如果有人想用它作汽车行车记录仪,就不存在这种烦恼了:车内没有必要使用防水壳,还能增强散热性能,一举两得。另外说到散热,这机器长期开着录影是真的烫手,如果加上防水壳,不清楚会不会过热。
最后补充一点,虽然相机可以通过电源线直接供电,但行驶过程中的颠簸可能导致供电线接触不良,偶发的断电会导致 gopro 直接停机,因此还是保留相机内的电池作为接力电源为好。特别在断电后日期会被重置,而通过 gopro 那几个小按钮设置日期将是一件非常费力的事。
长时间记录的另一个瓶颈是 SD 卡存储空间。gopro 默认的模式是按 start 键开始录影,再次按 start 键或存储写满时停止。循环录影模式可以在存储写满时覆盖最旧的记录文件,从而只记录最近的一段影像。
这个功能的基础是视频文件分片,使用 1080p 24 帧的测试结果是,15 分钟一个文件分片 (6.6 G 左右),32 G 容量最多可以写 1 小时 15 分钟。降低分辨率并不能显著降低记录时长,因为帧数相应的提升了,以 960p 为例,最低帧数提高到了 50,720p 也差不多。
提高 SD 卡容量是一个办法,gopro3+ 最多支持 64G 的存储卡,相对 32G 能提升一倍的记录时长。实地测试不同的分辨率在 32 G 容量下的最长记录时间列表如下:
| fps/resolution | 720p | 720p super | 960p | 1080p | 1080p super | 1440p | 2.7k | 4k | WVGA |
| 12 | 96 (17:9) * | ||||||||
| 12.5 | 92 * | ||||||||
| 24 | 105 | 120 | 120 | 92 (17:9) * | |||||
| 25 | 210 | 120 | 120 | 90 * | |||||
| 48 | 120 | 120 | 120 | 140 * | 140 | ||||
| 50 | 200 | 105 | 120 | 135 | 140 * | ||||
| 100 | 140 * | 140 * | |||||||
| 240 | 240 * |
对上面的数据做个简单说明:
可以看到有些分辨率在提升 fps 的情况下,记录时长还提升了 (1080p 24fps->25fps),经过分析,发现某些 fps 除了生成原始视频本身,还会生成低分辨率预览视频,导致占用空间上升。真是不试不知道,一试吓一跳…
作为行车记录仪,循环录影是硬要求,排除掉不支持的 fps,再按记录时长排序,只有下面两种设置时长能超过 200 min:
如果希望记录更多帧,可以选 720p;如果希望记录画面更清晰,可以选 1080p。WVGA 方式可以达到最长的时长 240 min,如果一次旅程不超 4 小时,选择这个配置就比较香了,同时它也达到了最大的记录帧数 240 fps,据说明书讲,WVGA 格式记录了原始 (RAW) 画面,想发挥后期制作能力的人不妨试试。
gopro 除了录影功能外,还有以下功能:
和车载记录仪没什么关系的就不多说了,重点说一下与录影相关的设置:
Protune 的 5 个高级选项常见于单反相机的设置,这里不专业就不多说了。大部分高级设置支持的分辨率有限,特别是影响循环录影的开启,所以我一般不开启它们。其中比较有用的是边拍边录,可以避免为了看一两帧照片而下载巨大的视频文件了,不过这个功能和遥控拍照有些重复。最后说一下为什么不上遥控器,主要是这东西续航有限也需要接电源,安装起来还挺麻烦,不想把车把弄的太乱。
相机就绪后,就可以上车了,刚好车上有装手机支架球头,可以直接安装:




将相机放在了紧靠风挡中间的部分,可以获取最佳视野及最好防护,另外也不遮挡仪表显示,perfect!
-------------------- 20220909 更新 ---------------------
更新下带防水壳的上车效果:




-------------------- 20220909 更新 ---------------------
最后来一段拍摄效果,看看 1080p 的分辨率效果如何:
[1]. gopro hero 3+运动相机更新固件重置wifi密码的实操教程
[2]. GoPro Hero3+ 银狗 最终固件,可重置WiFi
[3]. 你说会有人用GoPro当行车记录仪吗?
[4]. GoPro是怎样让用户wifi密码沦陷的
[5]. gopro 官网
[6]. GoPro HERO 3+ 中文说明书【GoproCN】.pdf
[8]. GoPro 如何设置感光度
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=194lmgjyf0a6l
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po