全屏播放视频

自己重写一个方法 获取屏幕大小去改写
public class MyVideoView extends VideoView {
    public static int WIDTH;
    public static int HEIGHT;
    public MyVideoView(Context context, AttributeSet attrs) {
         super(context, attrs);
    }
    @Override
    protected void onMeasure( int widthMeasureSpec, int heightMeasureSpec) {
         int width = getDefaultSize( WIDTH, widthMeasureSpec);
         int height = getDefaultSize( HEIGHT, heightMeasureSpec);
        setMeasuredDimension(width, height);
    }
}
主程序
public class MovieOpenActivity extends Activity implements
        OnCompletionListener, OnErrorListener {
    private MyVideoView mVideoView;
    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         this.getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN,
                WindowManager.LayoutParams. FLAG_FULLSCREEN);
        requestWindowFeature(Window. FEATURE_NO_TITLE);
        getWindow().addFlags(WindowManager.LayoutParams. FLAG_KEEP_SCREEN_ON);
        setContentView(R.layout. movie);
       
         DisplayMetrics dm = new DisplayMetrics();
          this.getWindowManager().getDefaultDisplay().getMetrics(dm);
         MyVideoView. WIDTH=dm.widthPixels;
         MyVideoView. HEIGHT=dm.heightPixels;
         Log. e("widthPixels", "widthPixels"+dm.widthPixels);
         Log. e("heightPixels", "widthPixels"+dm.heightPixels);
         mVideoView = (MyVideoView) findViewById(R.id. videoView1);
         mVideoView.setMediaController( new MediaController( this));
         mVideoView.setOnCompletionListener( this);
         mVideoView.setOnErrorListener( this);
         mVideoView.setVideoPath("/mnt/sdcard/test.3gp");
         mVideoView.start();
         mVideoView.requestFocus();
    }
    public void onCompletion(MediaPlayer mp) {
        finish();
    }
    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        Log. v("this is error", "onError method is called!!");

         if (what == MediaPlayer. MEDIA_ERROR_SERVER_DIED) {
            Log. v("this is error", "Media Error,Server Died" + extra);
        } else if (what == MediaPlayer. MEDIA_ERROR_UNKNOWN) {
            Log. v("this is error", "Media Error,Error Unknown" + extra);
        }
        Toast. makeText(MovieOpenActivity. this, "视频播放错误,请重新选择!",
                Toast. LENGTH_LONG).show();
         return false;
    }
    @Override
    protected void onDestroy() {
         super.onDestroy();
    }
配置文件
<?xml version= "1.0" encoding= "utf-8"?>
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
    android:layout_width= "fill_parent"
    android:layout_height= "fill_parent"
    android:orientation= "vertical">
    <com.smit.util.MyVideoView
         android:id= "@+id/videoView1"
        android:layout_width= "fill_parent"
        android:layout_height= "fill_parent"
        android:layout_gravity= "center_horizontal"
        android:theme= "@android:style/Theme.NoTitleBar.Fullscreen" />
</LinearLayout>
### GStreamer实现全屏播放视频 要通过GStreamer实现在多个显示器上全屏播放视频的功能,可以通过构建一个合适的管道来完成此操作。以下是具体的方法以及示例代码。 #### 构建GStreamer管道 GStreamer是一个强大的多媒体框架,能够处理音视频流的捕获、解码、编码和渲染等功能。对于全屏播放的需求,可以利用`autovideosink`或指定特定显示设备的`sinks`(如`ximagesink`, `glimagesink`等)。如果目标是在多屏幕上同步播放,则需要额外考虑窗口管理工具或者X11/Wayland环境下的屏幕布局。 下面提供了一个简单的Python脚本作为例子,它使用PyGObject绑定调用了Gst库,并设置了基本的全屏模式: ```python import gi gi.require_version('Gtk', '3.0') gi.require_version('Gst', '1.0') from gi.repository import Gst, Gtk, GdkX11, GObject # noqa def on_message(bus: Gst.Bus, message: Gst.Message, window): if message.type == Gst.MessageType.ELEMENT: struct = message.get_structure() if struct and struct.has_name("prepare-xwindow-id"): videosink = message.src videosink.set_property("force-aspect-ratio", True) gdk_window = window.get_window() if gdk_window: videosink.set_xwindow_id(gdk_window.get_xid()) def main(): Gst.init(None) pipeline_str = ''' filesrc location=/path/to/video.mp4 ! decodebin ! videoconvert ! autovideosink name=videosink ''' builder = Gtk.Builder() win = Gtk.Window(type=Gtk.WindowType.TOPLEVEL) win.fullscreen() # 设置为全屏状态 win.connect("destroy", lambda w: Gtk.main_quit()) drawing_area = Gtk.DrawingArea() win.add(drawing_area) win.show_all() pipeline = Gst.parse_launch(pipeline_str) bus = pipeline.get_bus() bus.add_signal_watch() bus.enable_sync_message_emission() bus.connect("message::element", on_message, win) pipeline.set_state(Gst.State.PLAYING) Gtk.main() if __name__ == "__main__": main() ``` 上述代码片段展示了如何创建一个基于GTK的应用程序并嵌入GStreamer管线用于视频回放[^1]。注意替换路径 `/path/to/video.mp4` 成实际存在的媒体文件位置。 另外一种方式是直接命令行运行gstreamer插件组合而成的一条指令来进行测试: ```bash gst-launch-1.0 playbin uri=file:///absolute/path/to/your/file.mp4 force-window=true fullscreen=true ``` 这条命令会尝试打开指定URI地址上的资源并且强制进入全屏模式[^2]。 #### 调整音频解码器配置 当涉及到不同类型的编解码需求时,可能还需要进一步微调音频部分的表现形式。这通常涉及修改pipeline中的audio相关环节,比如选择不同的audiosink组件或是应用特殊的filter效果等等。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值