使用go语言编写一个播放器
使用go语言编写一个播放器,直接看效果
整体思路是使用ffmpeg解码,然后使用xui进行渲染,音频播放暂时还没调通,以下是源码
package mainimport ("github.com/nareix/joy4/av""github.com/nareix/joy4/av/avutil""github.com/nareix/joy4/cgo/ffmpeg""github.com/nareix/joy4/format""github.com/tenny1225/xui""image""math""time"
)type TestView struct {*xui.Viewimg *image.YCbCr
}func (v *TestView) Draw(canvas xui.XCanvas) {if v.img == nil {return}iw, ih := float64((*v.img).Bounds().Dx()), float64((*v.img).Bounds().Dy())w, h := v.Window.GetSize()s := math.Min(float64(w)/iw, float64(h)/ih)canvas.Save()canvas.SetScale(s, s)canvas.DrawImage(-(iw - float64(w))/2, -(ih - float64(h))/2, (*v.img).SubImage((*v.img).Bounds()))canvas.Restore()}//func (v *TestView) MeasureSize(w, h float64) (float64, float64) {
// return math.MaxFloat64, math.MaxFloat64
//}
func NewTestView(v *xui.View) xui.Viewer {view := &TestView{v, nil}view.Drawer = view.Draw//view.Measurer = view.MeasureSizereturn view
}type TestPage struct {xui.BasePageRoot xui.Viewer
}func (p *TestPage) GetContentView() xui.Viewer {p.Root = NewTestView(&xui.View{Top: 10,Left: 10,FontPath: "OPPOSans-M.ttf",FontSize: 15,Title: "hello world",PaddingLeft: 8,PaddingTop: 8,PaddingRight: 8,PaddingBottom: 8,})return p.Root
}
func (p *TestPage) Create(data map[string]interface{}) {go func() {avfile, _ := avutil.Open("/home/xz/桌面/movie.mp4")streams, _ := avfile.Streams()var videoDecoder *ffmpeg.VideoDecoderfor _, stream := range streams {if stream.Type().IsVideo() {vstream := stream.(av.VideoCodecData)videoDecoder, _ = ffmpeg.NewVideoDecoder(vstream)//fmt.Println(vstream.Type(), vstream.Width(), vstream.Height())}}for {pkt, e := avfile.ReadPacket()if e != nil {return}vframe, e := videoDecoder.Decode(pkt.Data)if e == nil {v := p.Root.(*TestView)v.img = &vframe.Image}time.Sleep(time.Millisecond * 22)//}}avfile.Close()}()}
func main() {ctx := xui.NewXContext()ctx.Run(func() {w := xui.NewWindow("测试", 400, 400, 500, 500, true, ctx)w.AddRoute("test", &TestPage{})w.StartPage("test", nil, false)})
}func init() {format.RegisterAll()
}
使用go语言编写一个播放器相关推荐
- 纯前端语言编写音乐播放器
纯前端语言编写音乐播放器 html代码 index.html <!DOCTYPE html> <html lang="en"><head>< ...
- 用JavaScript在网页编写一个播放器
今天是教师节,我先祝各位老师节日快乐!!! 今天我和大家分享用JavaScript在网页编写一个播放器. 对于播放器,大家都不陌生,那么要怎么样才能实现它呢? 下面是我做的一个播放器的图 首先我们从上 ...
- c语言编写音乐播放器完整代码(mciSendString函数的使用方法,第一次使用Visual Studio 2019的详细步骤)
本文会尽量让和笔者一样只有一点点可怜的c语言基础的小白看懂,并写出自己的音乐播放器. 笔者使用的编译器是Visual Studio 2019,直接在官网下载就行了.下面是Visual Studio 2 ...
- php语言编写一个下载器,PHP实现音乐搜索下载器
PHP实现音乐搜索下载器 发布时间:2020-07-01 09:57:33 来源:亿速云 阅读:56 作者:Leah 本篇文章为大家展示了PHP实现音乐搜索下载器,代码简明扼要并且容易理解,绝对能使你 ...
- 编写音乐播放器的一些感想
编写音乐播放器的一些感想 当初是想着学习C#,就动手开始实现一个简单的播放器.在实现的工程中发现自己能够学到很多东西,就有了把播放器用c++重写的想法,在实现过程中,发现c++想实现c#同样的功能,真 ...
- 从零编写一个解析器(1)—— 解析数字
文章名称:从零编写一个解析器(1)-- 解析数字 参考地址:https://github.com/Geal/nom/blob/master/doc/making_a_new_parser_from_s ...
- 制作一个播放器(一)
制作一个播放器(一) 制作一个播放器(二) 开发前准备 开发平台:windows 开发语言:C++(Qt) 开发工具:Visual Studio 2019 cmake Qt5.15.2 做个小广告 ...
- C#——窗体程序声明一个播放器接口IPlayer,包含5个接口方法:播放、停止、暂停、上一首和下一首。
声明一个播放器接口IPlayer,包含5个接口方法:播放.停止.暂停.上一首和下一首.设计一个窗体程序,在该程序中定义一个MP3播放器类和一个AVI播放器类,以实现该接口,最后创建相应类的实例测试程序 ...
- pygame编写音乐播放器
pygame编写音乐播放器 1.准备工作 2.开始 2.1 设计说明 2.2 代码逻辑 收集某个目录下的所有mp3 显示歌曲名称 播放歌曲 显示播放进度 快进快退功能 画播放控件 主逻辑 3.效果图 ...
最新文章
- mysql的字符串函数大全_MySQL的字符串函数大全
- 9、mybatis自增主键策略
- v8声卡怎么录制唱歌_【绝对干货】关于声卡你需要知道的几点知识(上)
- 英语口语(5月17)
- Oracle 不同故障的恢复方案
- C语言如何设计随机数
- 谷歌json插件_没用过这7款浏览器插件,你一定是假的程序员
- python爬虫之模拟登陆(CSDN篇)
- 金蝶服务器存在但无账套信息,金蝶KIS专业版
- 投影技术的分类与应用
- window10 时间同步出错 超时
- 织梦dedecms百度快照劫持注入代码防范与清除
- 交换机组播风暴_cisco 交换机端口广播风暴设置(非常详细)
- 用户故事 | 工商银行核心应用 MySQL 治理实践
- elasticsearch学习笔记--聚合函数篇
- 吴军给女儿的信:乐观的人生态度,比什么都重要
- 常用电源管理稳压IC一览
- 最全的Windows7 服务优化、详解。
- UI设计转行交互怎么样?【萧蕊冰】
- DirectX11-硬件多实例渲染
热门文章
- 微服务日志配置以及在生产环境怎么查看日志?
- ionic android ios,ionic中android,和ios生成的一些兼容问题---$ionicConfigProvider
- [BSidesCF 2020]Had a bad day -- 关于00截断的衍生
- HTML基础篇(2)
- 笔试、面试题收集(主要是Python Web开发)编辑中。。。
- 最任性热酷拿到最重磅IP,《找你妹2015》获央视春晚吉祥物阳阳版权
- vscode自动换行快捷键(附常用快捷键)
- 数据结构与算法-查找算法(二分查找,插值查找,斐波那契(黄金分割法)查找)
- Hashicorp Vault介绍和使用说明
- 还不会漏洞上传吗?一招带你解决