如何使用来自外部设备的 setVideoURI 流从 android videoview 获取帧?

Posted

技术标签:

【中文标题】如何使用来自外部设备的 setVideoURI 流从 android videoview 获取帧?【英文标题】:how to get frame from android videoview with setVideoURI streaming from external device? 【发布时间】:2013-09-26 13:17:55 【问题描述】:

我正在制作一个从外部源流式传输视频并将其显示在我活动中的视频视图中的 android 应用程序。 流工作正常,但我无法在我的 SD 卡上保存帧。这是我的代码,其中 vv 是 videoview:

int currentPosition = vv.getCurrentPosition(); //in millisecond

        MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
        mediaMetadataRetriever.setDataSource(viewSource);

        Bitmap bmFrame = mediaMetadataRetriever.getFrameAtTime(currentPosition * 1000); //unit in microsecond

        if(bmFrame == null)
             Toast.makeText(MainActivity.this, 
               "bmFrame == null!", 
               Toast.LENGTH_LONG).show();
            else
             AlertDialog.Builder myCaptureDialog = 
               new AlertDialog.Builder(MainActivity.this);
             ImageView capturedImageView = new ImageView(MainActivity.this);
             capturedImageView.setImageBitmap(bmFrame);
             LayoutParams capturedImageViewLayoutParams = 
               new LayoutParams(LayoutParams.WRAP_CONTENT, 
                 LayoutParams.WRAP_CONTENT);
             capturedImageView.setLayoutParams(capturedImageViewLayoutParams);

             myCaptureDialog.setView(capturedImageView);
             myCaptureDialog.show();

这是我的视频测试网址:

public String viewSource = "rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov";

我尝试为 mediametadataretriver 的“setdatasource”设置 viewSourc,就像我的视频的网址一样,但它总是返回空位图...

问题出在哪里?

谢谢

【问题讨论】:

【参考方案1】:

这个类有很多问题,我认为其中之一是从外部来源检索框架。我建议你使用this external library。您只需将其添加到您的项目中,然后像使用 mediametadataretriever 类一样使用该类。

希望有用

【讨论】:

以上是关于如何使用来自外部设备的 setVideoURI 流从 android videoview 获取帧?的主要内容,如果未能解决你的问题,请参考以下文章

如何确保来自不同 Android 设备的 RTMP 流具有相同的 SPS/PPS?

有啥方法可以阻止来自 CANoe 总线上外部设备的特定 CAN 消息?

如何将音频流从输出设备发送到输入设备?

来自外部设备的意外输入 - iOS

如何提高DataGridView的绘画性能?

来自 Netcat 的 OpenCV 流视频