请问:Android正播放视频时的解码输出流怎么获取

请教:Android正播放视频时的解码输出流如何获取?
Android播放视频,经过解码器解码 获得数据流 再显示到屏幕上。请问这部分数据(解码器解码后的数据流)通过什么方法可以获取?  请教。。。  先谢谢啦
------解决思路----------------------
你是想录制视频?
------解决思路----------------------
引用:
Quote: 引用:

你是想录制视频?
不是,跟照相机录像机摄像机无关的。
在播放一个视频文件的时候,拿到系统对这个视频文件解码后的数据流,也就是解码器的输出流


那你直接读这个文件流就可以了啊
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

你是想录制视频?
不是,跟照相机录像机摄像机无关的。
在播放一个视频文件的时候,拿到系统对这个视频文件解码后的数据流,也就是解码器的输出流


那你直接读这个文件流就可以了啊
怎么直接读啊?这个数据流没有存成文件,


视频是你自己控制播放呢还是从播放器播放视频的时候截取视频流?
------解决思路----------------------
最好的应该是从display部分入手,重写一个surfaceview,把这个view传给mediaplayer去播放,这样数据到这个view里面,你先去记录,然后再发出去播放,不过效率上估计有点问题。
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

你是想录制视频?
不是,跟照相机录像机摄像机无关的。
在播放一个视频文件的时候,拿到系统对这个视频文件解码后的数据流,也就是解码器的输出流


那你直接读这个文件流就可以了啊
怎么直接读啊?这个数据流没有存成文件,


视频是你自己控制播放呢还是从播放器播放视频的时候截取视频流?


这个应该是一样的,我自己控制 的话也是调用系统默认的MediaPlayer解码器,  就是“从播放器播放视频的时候截取视频流”要解码后数据流


没用过MediaPlayer,但是调用MediaPlayer的话,直接jni处理视频流并描绘图像了,我想应该是取不到了吧
------解决思路----------------------
video播放是在graphic层显示的才能抓,有的方案video直接硬件的layer显示的,这种就没辙了。
graphic层可以试下下面两个方法:
1,在native层调用mediaplayer,MediaPlayer::setVideoSurfaceTexture接口是传入一个IGraphicBufferProducer,自己建立一个bufferqueue传进去就可以了。
2,用virtual display试试看,建立一个虚拟的display。然后仿照surfaceview写一个新的view,把window建立在前面建立的virtual display上。这样输出的数据都在virtual display的buffer中。

------解决思路----------------------
引用:
Quote: 引用:

video播放是在graphic层显示的才能抓,有的方案video直接硬件的layer显示的,这种就没辙了。
graphic层可以试下下面两个方法:
1,在native层调用mediaplayer,MediaPlayer::setVideoSurfaceTexture接口是传入一个IGraphicBufferProducer,自己建立一个bufferqueue传进去就可以了。
2,用virtual display试试看,建立一个虚拟的display。然后仿照surfaceview写一个新的view,把window建立在前面建立的virtual display上。这样输出的数据都在virtual display的buffer中。
在Android4.2/4.4源码上作业应该不存在什么方案吧。。。native层调用是要引入系统库么,需要单独提出来?

native调用应该是需要一些系统库,你直接抓一份google代码去编译就是了,就是怕有些权限问题。
第二个case在java都有借口,可以试试。


------解决思路----------------------
楼主,我也有这样的需求:视频播放过程中获得每一帧图片,将每一帧图片处理后再显示播放,并且需要将处理过后的每一帧重新生成一个视频文件,不知道有没有好的方法???
------解决思路----------------------
能获取到视频源,一切就都不是问题了
------解决思路----------------------
引用:
Quote: 引用:

video播放是在graphic层显示的才能抓,有的方案video直接硬件的layer显示的,这种就没辙了。
graphic层可以试下下面两个方法:
1,在native层调用mediaplayer,MediaPlayer::setVideoSurfaceTexture接口是传入一个IGraphicBufferProducer,自己建立一个bufferqueue传进去就可以了。
2,用virtual display试试看,建立一个虚拟的display。然后仿照surfaceview写一个新的view,把window建立在前面建立的virtual display上。这样输出的数据都在virtual display的buffer中。
public final class VirtualDisplay {
    private final DisplayManagerGlobal mGlobal;
    private final Display mDisplay;
    private IBinder mToken;

    VirtualDisplay(DisplayManagerGlobal global, Display display, IBinder token) {
        mGlobal = global;
        mDisplay = display;
        mToken = token;
    }
    /**
     * Gets the virtual display.
     */
    public Display getDisplay() {
        return mDisplay;
    }
    /**
     * Releases the virtual display and destroys its underlying surface.
     * <p>
     * All remaining windows on the virtual display will be forcibly removed
     * as part of releasing the virtual display.
     * </p>
     */
    public void release() {
        if (mToken != null) {
            mGlobal.releaseVirtualDisplay(mToken);
            mToken = null;