ChinaFFmpeg

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11225|回复: 8

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

[复制链接]
发表于 2014-4-20 10:54:34 | 显示全部楼层 |阅读模式
现在打算利用vlc(开源播放器)解码后的数据做开发,如何在自己的程序中调用到这些数据呢? 想打开播放器后,可以随时获取其解码后的数据进行利用。



回复

使用道具 举报

发表于 2014-4-20 19:39:57 | 显示全部楼层
你是想获得yuv数据吗?
这个好像可以通过获得窗口内容来获得,具体操作我没有操作过
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

发表于 2014-4-21 20:22:37 | 显示全部楼层
如果有源码,可以通过获得源码里面的avcodec_decode_video2之后的frame的数据写出来,这个就是解码后的yuv数据
回复 支持 反对

使用道具 举报

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

嗯,我也是这样想的,它是开源的,软解码的核心也是ffmpeg,谢谢哈
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-23 09:43:32 | 显示全部楼层
孙悟空 发表于 2014-4-21 20:22
如果有源码,可以通过获得源码里面的avcodec_decode_video2之后的frame的数据写出来,这个就是解码后的yuv ...

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

使用道具 举报

发表于 2014-4-23 17:21:40 | 显示全部楼层

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

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

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

  16.             /* write to rawvideo file */
  17.             fwrite(video_dst_data[0], 1, video_dst_bufsize, video_dst_file);
  18.         }   
复制代码
参考一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-23 18:27:24 | 显示全部楼层

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

使用道具 举报

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

将frame里面的linedata与linesize存到shm中就可以了,windows平台没弄过
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|Archiver|ChinaFFmpeg

GMT+8, 2024-12-27 06:41 , Processed in 0.054034 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表