yishengzhile 发表于 2014-4-20 10:54:34

如何获取开源播放器解码后的数据呢

现在打算利用vlc(开源播放器)解码后的数据做开发,如何在自己的程序中调用到这些数据呢? 想打开播放器后,可以随时获取其解码后的数据进行利用。



孙悟空 发表于 2014-4-20 19:39:57

你是想获得yuv数据吗?
这个好像可以通过获得窗口内容来获得,具体操作我没有操作过

yishengzhile 发表于 2014-4-21 09:19:20

孙悟空 发表于 2014-4-20 19:39
你是想获得yuv数据吗?
这个好像可以通过获得窗口内容来获得,具体操作我没有操作过 ...

嗯,我想获取解码后的yuv数据,还没有可执行的方案,谢谢你的回答

孙悟空 发表于 2014-4-21 20:22:37

如果有源码,可以通过获得源码里面的avcodec_decode_video2之后的frame的数据写出来,这个就是解码后的yuv数据

yishengzhile 发表于 2014-4-22 09:44:57

孙悟空 发表于 2014-4-21 20:22
如果有源码,可以通过获得源码里面的avcodec_decode_video2之后的frame的数据写出来,这个就是解码后的yuv ...

嗯,我也是这样想的,它是开源的,软解码的核心也是ffmpeg,谢谢哈

yishengzhile 发表于 2014-4-23 09:43:32

孙悟空 发表于 2014-4-21 20:22
如果有源码,可以通过获得源码里面的avcodec_decode_video2之后的frame的数据写出来,这个就是解码后的yuv ...

我已经找到解码后存放yuv数据的frame了,怎样才能把这些数据提取出来呢?我想播放器在播放视频的时候,同时进行提取

孙悟空 发表于 2014-4-23 17:21:40


      ret = avcodec_decode_video2(video_dec_ctx, frame, got_frame, &pkt);
      if (ret < 0) {
            fprintf(stderr, "Error decoding video frame (%s)\n", av_err2str(ret));
            return ret;
      }   

      if (*got_frame) {
            printf("video_frame%s n:%d coded_n:%d pts:%s\n",
                   cached ? "(cached)" : "",
                   video_frame_count++, frame->coded_picture_number,
                   av_ts2timestr(frame->pts, &video_dec_ctx->time_base));

            /* copy decoded frame to destination buffer:
             * this is required since rawvideo expects non aligned data */
            av_image_copy(video_dst_data, video_dst_linesize,
                        (const uint8_t **)(frame->data), frame->linesize,
                        video_dec_ctx->pix_fmt, video_dec_ctx->width, video_dec_ctx->height);

            /* write to rawvideo file */
            fwrite(video_dst_data, 1, video_dst_bufsize, video_dst_file);
      }   
参考一下

yishengzhile 发表于 2014-4-23 18:27:24

孙悟空 发表于 2014-4-23 17:21
参考一下

现在的播放器并没有嵌入到我的程序当中,也就是说这相当于两个工程(一个是播放器程序一个是我自己的),现在要把播放器的数据传递到我自己的工程里,有什么方式呢?两个工程之间的数据传递通常用进程间的通信,可是frame的结构体比较复杂,不好传递;有什么好的建议呢?

孙悟空 发表于 2014-4-23 23:39:43

yishengzhile 发表于 2014-4-23 18:27
现在的播放器并没有嵌入到我的程序当中,也就是说这相当于两个工程(一个是播放器程序一个是我自己的), ...

将frame里面的linedata与linesize存到shm中就可以了,windows平台没弄过
页: [1]
查看完整版本: 如何获取开源播放器解码后的数据呢