Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GoPro Hero 8 Black | Getting "Packet corrupt" errors when calling "gopro.stream()" and "gopro.overview()" throws error too. #171

Open
simspace-dev opened this issue Mar 31, 2021 · 3 comments

Comments

@simspace-dev
Copy link

simspace-dev commented Mar 31, 2021

Hi @KonradIT,

I am trying to stream GoPro Hero 8 Black video to MPV as shown in this video called
"GoPro HERO7 with Python API": https://www.youtube.com/watch?v=i-X4fPVfoW0

I am on Mac OS Catalina running Python 3.9 and I installed gopro-py-api as follows:
pip install goprocam

I can ...

  • List media using: gopro.listMedia(True)
  • Start video using gopro.shoot_video(10)
  • Shoot a picture using gopro.take_photo()

Error 1 | gopro.stream("udp://127.0.0.1:10000") displays "packet corrupt" messages
See the command line output at the bottom of this post.

Error 2 | gopro.overview() throws this error:

camera overview
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/my.user.name/.pyenv/versions/3.9.2/lib/python3.9/site-packages/goprocam/GoProCamera.py", line 1472, in overview
    print("current mode: " + "" + self.parse_value("mode",
TypeError: can only concatenate str (not "NoneType") to str
>>> gopro.overview()
camera overview
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/my.user.name/.pyenv/versions/3.9.2/lib/python3.9/site-packages/goprocam/GoProCamera.py", line 1473, in overview
    self.getStatus(constants.Status.Status, constants.Status.STATUS.Mode)))
  File "/Users/my.user.name/.pyenv/versions/3.9.2/lib/python3.9/site-packages/goprocam/GoProCamera.py", line 292, in getStatus
    return json.loads(data)[param][value]
KeyError: '43'

I did set a breakpoint() in the overview() method in "GoProCamera.py" and found there is no STATUS.mode with a key of "43" in the raw status data, but I do see a key with "43" in the settings json object. Should this be getting settings data instead of status data?

Do you have any suggestions or ideas how I can resolve these issues?

Thanks,
Chris

[CLI log of "Packet corrupt" messages]

>>> gopro.stream("udp://127.0.0.1:10000")
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
  built with Apple clang version 12.0.0 (clang-1200.0.32.29)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.3.2_3 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 0).
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 24024).
[h264 @ 0x7fe80b011800] left block unavailable for requested intra4x4 mode -1
[h264 @ 0x7fe80b011800] error while decoding MB 0 2, bytestream 13821
[h264 @ 0x7fe80b011800] concealing 1533 DC, 1533 AC, 1533 MV errors in I frame
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 159159).
[h264 @ 0x7fe80b011800] concealing 146 DC, 146 AC, 146 MV errors in P frame
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 414414).
[h264 @ 0x7fe80b011800] concealing 394 DC, 394 AC, 394 MV errors in P frame
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 441441).
[h264 @ 0x7fe80b011800] cabac decode of qscale diff failed at 27 27
[h264 @ 0x7fe80b011800] error while decoding MB 27 27, bytestream 13961
[h264 @ 0x7fe80b011800] concealing 181 DC, 181 AC, 181 MV errors in P frame
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 585585).
[h264 @ 0x7fe80b011800] concealing 52 DC, 52 AC, 52 MV errors in P frame
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 630630).
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 717717).
[h264 @ 0x7fe80b011800] left block unavailable for requested intra4x4 mode -1
[h264 @ 0x7fe80b011800] error while decoding MB 0 2, bytestream 36961
[h264 @ 0x7fe80b011800] concealing 1533 DC, 1533 AC, 1533 MV errors in I frame
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 801801).
[h264 @ 0x7fe80b011800] concealing 351 DC, 351 AC, 351 MV errors in P frame
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 1021020).
[h264 @ 0x7fe80b011800] concealing 315 DC, 315 AC, 315 MV errors in P frame
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 1174173).
[h264 @ 0x7fe80b011800] concealing 1401 DC, 1401 AC, 1401 MV errors in I frame
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = NOPTS).
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 1888887).
[h264 @ 0x7fe80b011800] concealing 846 DC, 846 AC, 846 MV errors in P frame
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 2054052).
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 2156154).
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 2351349).
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 2408406).
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 2573571).
[mpegts @ 0x7fe80a810a00] Packet corrupt (stream = 0, dts = 2729727).
@simspace-dev simspace-dev changed the title Cannot stream GoPro Hero 8 Black video ... Cannot stream GoPro Hero 8 Black video, getting "Packet corrupt" errors. Mar 31, 2021
@simspace-dev simspace-dev changed the title Cannot stream GoPro Hero 8 Black video, getting "Packet corrupt" errors. GoPro Hero 8 Black | Getting "Packet corrupt" errors when calling "gopro.stream()" Mar 31, 2021
@simspace-dev simspace-dev changed the title GoPro Hero 8 Black | Getting "Packet corrupt" errors when calling "gopro.stream()" GoPro Hero 8 Black | Getting "Packet corrupt" errors when calling "gopro.stream()" and "gopro.overview()" throws error. Mar 31, 2021
@simspace-dev simspace-dev changed the title GoPro Hero 8 Black | Getting "Packet corrupt" errors when calling "gopro.stream()" and "gopro.overview()" throws error. GoPro Hero 8 Black | Getting "Packet corrupt" errors when calling "gopro.stream()" and "gopro.overview()" throws error too. Mar 31, 2021
@simspace-dev
Copy link
Author

Hi @KonradIT, any chance you might know what's happening here and how I might be able to resolve this problem? I'm a developer. My Python skills are so-so, but I'd be happy to help if you can point me in the right direction of handling the "Packet corrupt" errors. Seems like it may be an ffmpeg thing, but I'm not sure.

@RolandSireyjol
Copy link

RolandSireyjol commented Jul 8, 2021

Hi @simspace-dev ,
I had a bit of a look since I had the same error on my end, with a GoPro Hero 8.
In the "stream" function, calling for "self.KeepAlive()" was causing the error.
By using the loop given in the example opencv_gopro/ffmpegless-preview.py, I could recreate the same effect as we want from KeepAlive, but without the error. I also thing that it probably comes from ffmpeg itself.

@RolandSireyjol
Copy link

@simspace-dev following on the overview() issue: I did get different errors depending on the kind of gopro I was setting up. Here are some various options:

gopro = GoProCamera.GoPro(constants.gpcontrol)
gopro = GoProCamera.GoPro(constants.auth)
gopro = GoProCamera.GoPro()

Best would be to make this function more resilient, but in the meantime what I did was making my own local **overview ** function, which is almost a copypaste of the lib"s version, without the crashing parts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants