Skip to content

Instantly share code, notes, and snippets.

@KonradIT
Forked from Seanmatthews/gopro_streaming.cpp
Created March 20, 2018 20:59
Show Gist options
  • Save KonradIT/eb43a13195c1a65dc3f1cd39fec468d8 to your computer and use it in GitHub Desktop.
Save KonradIT/eb43a13195c1a65dc3f1cd39fec468d8 to your computer and use it in GitHub Desktop.
GoPro Hero4 Black C++ Streaming With OpenCV
#include <boost/exception/exception.hpp>
#include <boost/thread.hpp>
#include <boost/chrono.hpp>
#include "opencv2/opencv.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;
using namespace std;
bool newFrame = false;
VideoCapture* cap;
Mat frame;
boost::mutex mtx;
boost::condition_variable cond;
void captureFunc()
{
cap = new VideoCapture("udp://@10.5.5.9:8554");
while (cap->isOpened())
{
boost::this_thread::sleep_for(boost::chrono::milliseconds(20));
{
boost::lock_guard<boost::mutex> lock(mtx);
*cap >> frame;
newFrame = true;
}
cond.notify_one();
}
return;
}
void sendToCB(const boost::system::error_code& ec)
{
cerr << "Error " << ec.value() << endl;
}
void keepAlive()
{
try
{
boost::asio::io_service ioService;
boost::asio::ip::udp::resolver resolver(ioService);
boost::asio::ip::udp::endpoint dest(boost::asio::ip::address::from_string("10.5.5.9"), 8554);
boost::asio::ip::udp::socket sock(ioService, boost::asio::ip::udp::v4());
for (;;)
{
boost::this_thread::sleep_for(boost::chrono::milliseconds(2000));
sock.async_send_to(boost::asio::buffer("_GPHD_:0:0:2:0.000000\n", 22), dest,
boost::bind(&sendToCB, boost::asio::placeholders::error));
cout << "Sent stay alive\n";
}
}
catch (boost::exception& e)
{
cerr << "socket errored\n";
}
}
int main(int argc, char** argv)
{
namedWindow("frame");
boost::thread capThread {captureFunc};
boost::thread keepAliveThread {keepAlive};
for (;;)
{
boost::unique_lock<boost::mutex> lock(mtx);
while (!newFrame)
{
cond.wait(lock);
}
imshow("frame", frame);
newFrame = false;
if (27 == waitKey(10)) break; // the thread sleeps for longer
}
keepAliveThread.interrupt();
cap->release();
capThread.join();
return 0;
}
@TZVIh
Copy link

TZVIh commented Apr 13, 2018

Hi,
I want to use my gopro as webcam for develop some computer vision algorithms, I want to connect it to my pc and work in real time.
how can I connect it with usb/lan/hdmi?
can I get telemetry data? (hero5/6)
Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment