软解情况下截图不成功
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