1. 背景
一个需求 : 我们需要自己去接入GoPro,在自己的App上去控制GoPro。
GoPro接入文档 : Open GoPro 文档
GoPro的开放API网上相关的资料较少,所以只能拿着GoPro的官方文档死磕了。
2. GoPro支持的连接方式
打开GoPro的官方文档,可以看到,GoPro支持3种连接方式,分别是蓝牙、Wifi和USB
3. GoPro连接的Demo
我们来看下GoPro提供的Demo:Demos : Open GoPro
可以看到,有C,C++
,Csharp
,Ionic
,Python
,Swift
的Demo,但就是没有Android的Demo,这就很尴尬了。
为了验证连接的可行性,我们选择下载Csharp
的Demo,来进行试验。
只要C#的demo跑通了,后期完全就可以移植到Android上了。
3.1 下载Demo
- GoProCSharpSample
- 使用蓝牙发现、配对、连接和控制GoPro的Demo
- CSharp Webcam Demo
- 使用Wifi和USB的方式连接GoPro来实现网络摄像头的Demo
3.2 下载并安装Visual Studio
这里下载社区版(免费)的Visual Studio就可以了
Visual Studio 下载地址 : Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com)
3.3 配置环境
在CSharp Webcam Demo这个项目中,用到了vlc
,所以我们需要先下载vlc
。
libvlc
下载地址 : libvle下载 /pub/videolan/vlc/
这里,我下载了3.0.9.2
,win-x64
和win-x86
的都下载好,分别是vlc-3.0.9.2-win32.7z
和vlc-3.0.9.2-win64.7z
。
然后解压后,将vlc相关文件复制到项目名\bin\Debug\libvlc\win-x64
和项目名\bin\Debug\libvlc\win-x86
文件夹下
对应的Demo中的C#
代码为
var vlcLibDirectory = new DirectoryInfo(System.IO.Path.Combine("./", "libvlc", IntPtr.Size == 4 ? "win-x86" : "win-x64"));
mPlayer.SourceProvider.CreatePlayer(vlcLibDirectory, options);
4.运行Demo程序
4.1 运行GoProCSharpSample程序
这是个使用低功耗蓝牙,对GoPro进行操作的Demo
这里有几个按钮说明下
- Scan : 扫描蓝牙
- Pair : 进行配对
- Connect : 进行蓝牙连接
- Read AP Name : 读取WIFI的名称
- READ AP Pass : 读取WIFI的密码
- WIFI AP ON : 打开WIFI开关
- WIFI AP OFF : 关闭WIFI开关
- Shutter ON : 开始录像
- Shutter OFF : 停止录像
- Encoding : 是否是录像状态
- Wifi on : WIFI状态
这里我们需要读取到WIFI的名称和密码,然后打开WIFI快关
4.2 连接GoPro Wifi
我们这里手动将笔记本电脑连接上GoPro的WIFI,WIFI的名称和密码是通过GoProCSharpSample程序
读取到的
4.3 运行CSharp Webcam Demo程序 (WIFI模式)
运行前先在代码里把ipaddr
这个常量值进行修改。
ipaddr = Properties.Settings.Default.IPAddress;
修改为
ipaddr = "10.5.5.9"; //这个IP地址是GoPro指定的
注释这一行
new Timer(IPAddrCheck, this, 50, 10000);
修改HTTP URL
SendHTTPRequest("webcam/preview") 修改为 SendHTTPRequest("camera/stream/preview")
SendHTTPRequest("webcam/start") 修改为 SendHTTPRequest("camera/stream/start")
SendHTTPRequest("webcam/stop") 修改为 SendHTTPRequest("camera/stream/stop")
SendHTTPRequest("webcam/exit") 修改为 SendHTTPRequest("camera/stream/exit")
WIFI模式用的
camera/stream/XXX
,USB模式用的webcam/XXX
然后运行程序
先点击Start Player
,是Player状态为enabled
。然后点击Start WebCam
,点击Show Preview
可以看到,已经显示出GoPro摄像头实时的画面了
4.4 运行CSharp Webcam Demo程序 (USB模式)
如果需要通过USB数据线的方式,使GoPro变成一个网络摄像头,那么,我们需要先在电脑上安装好
我们可以先下载安装GoPro Webcam 桌面程序 GoProWebcam-RELEASE.msi
,安装过程中会自动安装好GoPro所需要的驱动的。
我们可以先打开GoPro Webcam程序,看下画面能否正常显示。
如果能够正常显示,说明驱动安装正确。
然后,在运行前, 我们先在代码里把ipaddr
这个常量值进行修改
ipaddr = Properties.Settings.Default.IPAddress;
修改为
ipaddr = 172.2X.1YZ.51
- X 是 GoPro serial number 从右往左第三位值
- Y 是 GoPro serial number 从右往左第二位值
- Z 是 GoPro serial number 从右往左第一位值
比如,你的GoPro serial number是C0000123456789,那么USB连接的IP是172.27.189.51
修改回HTTP URL,如果4.3 运行CSharp Webcam Demo程序 (WIFI模式)
这边没有修改过,则不需要修改
SendHTTPRequest("camera/stream/preview") 修改为 SendHTTPRequest("webcam/preview")
SendHTTPRequest("camera/stream/start") 修改为 SendHTTPRequest("webcam/start")
SendHTTPRequest("camera/stream/stop") 修改为 SendHTTPRequest("webcam/stop")
SendHTTPRequest("camera/stream/exit") 修改为 SendHTTPRequest("webcam/exit")
WIFI模式用的
camera/stream/XXX
,USB模式用的webcam/XXX
我们打开CSharp Webcam Demo程序
先点击Start Player
,是Player状态为enabled
。然后点击Start WebCam
,点击Show Preview
可以看到,已经显示出GoPro摄像头实时的画面了
5.使用VLCPlayer播放视频
可以电脑连接GoPro Wifi后,使用widnows自带的VLCPlayer,播放GoPro的视频流,测试成功能正常播放后,再运行demo进行试验。
6. 在手机上显示GoPro的画面
根据文档和Demo代码可知,GoPro的视频流通过udp://@0.0.0.0:8554
来进行传输的
private void btnStartPlayer_Click(object sender, RoutedEventArgs e)
{Log("Starting video player...\n");ThreadPool.QueueUserWorkItem(_ =>{mPlayer.SourceProvider.MediaPlayer.Play(new Uri("udp://@0.0.0.0:8554", UriKind.Absolute), new string[] { "--network-caching=10", "--no-audio" });});playerEnabled = true;
}
所以,我们可以将手机连接到GoPro上,然后实时接收这个视频数据
首先,我们在电脑上,先使用GoProCSharpSample程序
获取wifi名称和密码,并打开wifi
然后,需要在手机上写一个程序,访问HTTP接口 webcam/preview
和webcam/start
(哪端发送了这些接口,会被GoPro记录,才能有权限接收到udp://@0.0.0.0:8554发送的数据
)
最后,下载Android IjkPlayer 播放RTSP视频流 Demo
使用B站开源的IjkPlayer,进行视频的播放
我们需要修改videoPath
String videoPath = "udp://@0.0.0.0:8554";
即,访问了 webcam/preview
和webcam/start
接口后,再运行IjkPlayerDemo程序,就可以在手机上看到GoPro摄像头上实时的画面了
当然,GoProCSharpSample程序
这些蓝牙操作的部分,手机端也是可以实现的,官方也提供了文档Bluetooth Low Energy (BLE) Specifications : Open GoPro
有兴趣的小伙伴也可以自己实现一下。