fly7632785/Player

软解情况下截图不成功

Opened this issue · 11 comments

点击截图会直接崩溃,请问怎么回事呢?已经设为软解了
D/IJKMEDIA: =============>start snapshot
2019-12-23 15:03:48.824 23110-23110/com.jafir.player D/IJKMEDIA: =============>1280 X 720 === 0

--------- beginning of crash

2019-12-23 15:03:48.825 23110-23110/com.jafir.player A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 23110 (om.jafir.player), pid 23110 (om.jafir.player)

你好,逻辑有点点问题,修改了一下。再看看呢

你好,逻辑有点点问题,修改了一下。再看看呢

谢谢老哥,截图还是会崩溃,华为小米都是,崩溃信息如下:
小米2S:
2019-12-24 09:13:02.047 9308-9308/com.jafir.player D/IJKMEDIA: =============>start snapshot
2019-12-24 09:13:02.047 9308-9308/com.jafir.player D/IJKMEDIA: =============>1280 X 720 === 0

--------- beginning of crash

2019-12-24 09:13:02.047 9308-9308/com.jafir.player A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 9308 (om.jafir.player), pid 9308 (om.jafir.player)
荣耀Waterplay:
2019-12-24 09:28:14.965 19926-19926/com.jafir.player I/hwaps: JNI_OnLoad

--------- beginning of crash

2019-12-24 09:28:15.070 19926-19926/com.jafir.player A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 19926 (om.jafir.player)

好像 还有一个问题就是,如果没有在成功播放就点击截图,也会崩溃呢

已经修改了代码了 要加一下isPlaying的判断

已经修改了代码了 要加一下isPlaying的判断

没成功播放这个条件我没测,我测的是已经播放的情况下截图会崩溃,信息如上面所示
com.jafir.player A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 19926 (om.jafir.player)

已经修改了代码了 要加一下isPlaying的判断

用项目里写的地址是没问题的,我改成了海康威视的rtsp流,播放和录制没问题,截图会报上面那个错。

地址可以分享一下吗 可能跟源有关系 demo里也有rtsp的源

地址可以分享一下吗 可能跟源有关系 demo里也有rtsp的源

我是局域网的摄像头,外网没法访问。 地址:rtsp://admin:HikUQLURY@192.168.1.101:554/Streaming/Channels/101
这个格式是海康威视摄像头标准的rtsp地址

那就不好说了 ,反正这里是 只有软解可以截图。
硬解也会崩溃报错。

//截图
void ffp_get_current_frame_l(FFPlayer *ffp, uint8_t *frame_buf)
{
  ALOGD("=============>start snapshot\n");

  VideoState *is = ffp->is;
  Frame *vp;
  int i = 0, linesize = 0, pixels = 0;
  uint8_t *src;

  vp = &is->pictq.queue[is->pictq.rindex];
  int height = vp->bmp->h;
  int width = vp->bmp->w;

  ALOGD("=============>%d X %d === %d\n", width, height, vp->bmp->pitches[0]);

  // copy data to bitmap in java code
  linesize = vp->bmp->pitches[0];
  src = vp->bmp->pixels[0];
  pixels = width * 4;
  for (i = 0; i < height; i++) {
      memcpy(frame_buf + i * pixels, src + i * linesize, pixels);
  }

  ALOGD("=============>end snapshot\n");
}

硬解的话 vp-bmp-pitches[0] linesize 是 0 获取不到相关数据信息 于是没有办法形成frame_buffer 进而转化为bitmap

如果非要实现截图,可以考虑在render层,获取bitmap来进行保存截图。
这个可以参考网上其他播放器,比如GSYVideoPlayer

硬解失败的log,你可以对比一下 是不是这样 后续还有log你可以把详细的发一下
ECCF0445-44A3-49F6-AA4D-E15938C122FF