AS3视频播放器

我们经常用视频播放器,但是很少会去想,怎样做一个视频播放器,这里提供一个简易视频播放器的做法,可以循环播放视频,挑选指定视频,快进,调节音量等,基于AS3编程,效果如下:

 

实现AS3代码:

  1 package
  2 {
  3     import flash.display.Sprite;
  4     import flash.events.Event;
  5     import flash.net.URLLoader;
  6     import flash.net.URLRequest;
  7     
  8     import fl.containers.ScrollPane;
  9     import fl.containers.UILoader;
 10     import fl.controls.ScrollBarDirection;
 11     import fl.controls.TileList;
 12     import fl.data.DataProvider;
 13     import fl.video.FLVPlayback;
 14     import fl.video.VideoEvent;
 15     
 16     [SWF(width="1000", height="600", frameRate="20")]
 17     public class videoPlay extends Sprite
 18     {
 19         public var t1:TileList = new TileList();
 20         public var vi:FLVPlayback = new FLVPlayback();
 21         public var arr:Array;
 22         public var staticStr:String;
 23         
 24         public function videoPlay()
 25         {
 26             init();
 27         }
 28         
 29         public function init():void
 30         {
 31             var req:URLRequest = new URLRequest("video.xml");
 32             var lod:URLLoader = new URLLoader(req);
 33             var xml:XML;
 34             lod.addEventListener(Event.COMPLETE,function(){
 35                 xml=new XML(lod.data);
 36                 
 37                 trace(xml.pInfo.@swf);
 38                 create(xml.pInfo.@swf);
 39                 creList(xml);
 40             });
 41             
 42             
 43         }
 44         
 45         public function create(str:String):void
 46         {
 47             arr = str.split("flv");
 48             for(var i:int =0; i<arr.length-1; i++)
 49             {
 50                 arr[i] = arr[i] + "flv";
 51                 trace(arr[i]);
 52             }
 53         }
 54         
 55         public function creList(xml:XML):void
 56         {
 57             var dp:DataProvider = new DataProvider(xml);
 58             
 59             t1.dataProvider = dp;
 60             t1.labelField = "name";
 61             t1.sourceField = "src";
 62             t1.columnCount=1;
 63             t1.columnWidth = 150;
 64             t1.rowHeight = 80;
 65             t1.width = 150;
 66             t1.height = stage.stageHeight;
 67             t1.direction = ScrollBarDirection.VERTICAL;
 68             stage.addChild(t1);
 69             t1.selectedIndex = 0;
 70             
 71             t1.addEventListener(Event.CHANGE,function():void
 72             {
 73                 vi.source = t1.selectedItem.swf;
 74             });            
 75             creVideo();
 76         }
 77         
 78         public function creVideo():void
 79         {
 80             vi.source = t1.selectedItem.swf;
 81             vi.skin =  "file/MinimaSilverAll.swf";
 82             vi.skinBackgroundColor = 0x000000;
 83             vi.skinBackgroundAlpha = 0.8;
 84             vi.skinAutoHide = true;
 85             vi.x = t1.x + 160;
 86             vi.y = t1.y;
 87             vi.width = 800;
 88             vi.height = t1.height-50;
 89             stage.addChild(vi);
 90             
 91             vi.addEventListener(VideoEvent.COMPLETE,function()
 92             {
 93                 trace("视频路径:" + vi.source);
 94                 for (var i:int = 0; i<arr.length-1;i++)
 95                 {
 96                     if (vi.source == arr[i])
 97                     {
 98                         if (i == arr.length-2)
 99                         {
100                             vi.source = arr[0];
101                             break;
102                         }
103                         else
104                         {
105                             vi.source = arr[i+1];
106                             break;
107                         }
108                     }
109                 }
110             });
111         }
112         
113         
114         
115     }
116 }

视频播放XML配置

 1 <vid>
 2     <pInfo id="1" name="第一集" src="image/001.jpg" swf="video/000.flv"/>
 3     <pInfo id="2" name="第二集" src="image/002.jpg" swf="video/001.flv"/>
 4     <pInfo id="3" name="第三集" src="image/003.jpg" swf="video/002.flv"/>
 5     <pInfo id="4" name="第四集" src="image/004.jpg" swf="video/003.flv"/>
 6     <pInfo id="5" name="第五集" src="image/005.jpg" swf="video/004.flv"/>
 7     <pInfo id="6" name="第六集" src="image/006.jpg" swf="video/005.flv"/>
 8     <pInfo id="7" name="第七集" src="image/007.jpg" swf="video/006.flv"/>
 9     <pInfo id="8" name="第八集" src="image/008.jpg" swf="video/007.flv"/>
10     <pInfo id="9" name="第九集" src="image/009.jpg" swf="video/008.flv"/>
11     <pInfo id="6" name="第十集" src="image/010.jpg" swf="video/009.flv"/>
12     <pInfo id="7" name="第十一集" src="image/011.jpg" swf="video/010.flv"/>
13     <pInfo id="8" name="第十二集" src="image/012.jpg" swf="video/011.flv"/>
14     <pInfo id="9" name="第十三集" src="image/013.jpg" swf="video/012.flv"/>
15 </vid>

 

编程资源网盘分享:

链接: https://pan.baidu.com/s/1slSFJgL 密码: 4ud4

 

转载于:https://www.cnblogs.com/Hunter-541695/p/7658780.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用pyqt实现视频播放器拉取视频流的步骤: 1.安装必要的库和软件,包括pyqt、opencv-python、numpy和gstreamer等。 2.创建一个pyqt窗口,用于显示视频流。 3.使用opencv和gstreamer库来拉取视频流。 4.将拉取到的视频流转换为pyqt可以显示的格式。 5.将转换后的视频流显示在pyqt窗口中。 下面是一个简单的示例代码,可以拉取网络摄像头的视频流并在pyqt窗口中显示: ```python import sys import cv2 import numpy as np import gi gi.require_version('Gst', '1.0') from gi.repository import Gst from PyQt5.QtCore import Qt, QTimer from PyQt5.QtGui import QImage, QPixmap from PyQt5.QtWidgets import QApplication, QWidget, QLabel Gst.init(None) class VideoPlayer(QWidget): def __init__(self): super().__init__() self.setWindowTitle('Video Player') self.setGeometry(100,100, 640, 480) self.video_size = (640, 480) self.video_label = QLabel(self) self.video_label.setGeometry(0, 0, self.video_size[0], self.video_size[1]) self.video_label.setAlignment(Qt.AlignCenter) self.video_label.setStyleSheet('background-color: black') self.video_buffer = np.zeros((self.video_size[1], self.video_size[0], 3), dtype=np.uint8) self.video_buffer.fill(0) self.video_timer = QTimer(self) self.video_timer.timeout.connect(self.update_video) self.video_timer.start(30) self.video_pipeline = Gst.Pipeline() self.video_source = Gst.ElementFactory.make('v4l2src') self.video_source.set_property('device', '/dev/video0') self.video_caps = Gst.ElementFactory.make('capsfilter') self.video_caps.set_property('caps', Gst.Caps.from_string('video/x-raw, width={}, height={}, framerate=30/1'.format(self.video_size[0], self.video_size[1]))) self.video_decoder = Gst.ElementFactory.make('decodebin') self.video_convert = Gst.ElementFactory.make('videoconvert') self.video_sink = Gst.ElementFactory.make('appsink') self.video_sink.set_property('max-buffers', 1) self.video_sink.set_property('drop', True) self.video_sink.set_property('emit-signals', True) self.video_sink.set_property('sync', False) self.video_sink.connect('new-sample', self.on_new_video_sample) self.video_pipeline.add(self.video_source) self.video_pipeline.add(self.video_caps) self.video_pipeline.add(self.video_decoder) self.video_pipeline.add(self.video_convert) self.video_pipeline.add(self.video_sink) self.video_source.link(self.video_caps) self.video_caps.link(self.video_decoder) self.video_decoder.connect('pad-added', self.on_video_decoder_pad_added) self.video_convert.link(self.video_sink) self.video_pipeline.set_state(Gst.State.PLAYING) def on_video_decoder_pad_added(self, decoder, pad): pad.link(self.video_convert.get_static_pad('sink')) def on_new_video_sample(self, sink): sample = sink.emit('pull-sample') buffer = sample.get_buffer() caps = sample.get_caps() width = caps.get_structure(0).get_value('width') height = caps.get_structure(0).get_value('height') _, mapinfo = buffer.map(Gst.MapFlags.READ) self.video_buffer = np.ndarray((height, width, 3), buffer=mapinfo.data, dtype=np.uint8) buffer.unmap(mapinfo) def update_video(self): if not self.video_buffer is None: image = QImage(self.video_buffer.data, self.video_size[0], self.video_size[1], QImage.Format_RGB888) pixmap = QPixmap.fromImage(image) self.video_label.setPixmap(pixmap) if __name__ == '__main__': app = QApplication(sys.argv) player = VideoPlayer() player.show() sys.exit(app.exec_()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值