使用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语言编写一个播放器相关推荐

  1. 纯前端语言编写音乐播放器

    纯前端语言编写音乐播放器 html代码 index.html <!DOCTYPE html> <html lang="en"><head>< ...

  2. 用JavaScript在网页编写一个播放器

    今天是教师节,我先祝各位老师节日快乐!!! 今天我和大家分享用JavaScript在网页编写一个播放器. 对于播放器,大家都不陌生,那么要怎么样才能实现它呢? 下面是我做的一个播放器的图 首先我们从上 ...

  3. c语言编写音乐播放器完整代码(mciSendString函数的使用方法,第一次使用Visual Studio 2019的详细步骤)

    本文会尽量让和笔者一样只有一点点可怜的c语言基础的小白看懂,并写出自己的音乐播放器. 笔者使用的编译器是Visual Studio 2019,直接在官网下载就行了.下面是Visual Studio 2 ...

  4. php语言编写一个下载器,PHP实现音乐搜索下载器

    PHP实现音乐搜索下载器 发布时间:2020-07-01 09:57:33 来源:亿速云 阅读:56 作者:Leah 本篇文章为大家展示了PHP实现音乐搜索下载器,代码简明扼要并且容易理解,绝对能使你 ...

  5. 编写音乐播放器的一些感想

    编写音乐播放器的一些感想 当初是想着学习C#,就动手开始实现一个简单的播放器.在实现的工程中发现自己能够学到很多东西,就有了把播放器用c++重写的想法,在实现过程中,发现c++想实现c#同样的功能,真 ...

  6. 从零编写一个解析器(1)—— 解析数字

    文章名称:从零编写一个解析器(1)-- 解析数字 参考地址:https://github.com/Geal/nom/blob/master/doc/making_a_new_parser_from_s ...

  7. 制作一个播放器(一)

    制作一个播放器(一) 制作一个播放器(二) 开发前准备 开发平台:windows 开发语言:C++(Qt) 开发工具:Visual Studio 2019 cmake  Qt5.15.2 做个小广告 ...

  8. C#——窗体程序声明一个播放器接口IPlayer,包含5个接口方法:播放、停止、暂停、上一首和下一首。

    声明一个播放器接口IPlayer,包含5个接口方法:播放.停止.暂停.上一首和下一首.设计一个窗体程序,在该程序中定义一个MP3播放器类和一个AVI播放器类,以实现该接口,最后创建相应类的实例测试程序 ...

  9. pygame编写音乐播放器

    pygame编写音乐播放器 1.准备工作 2.开始 2.1 设计说明 2.2 代码逻辑 收集某个目录下的所有mp3 显示歌曲名称 播放歌曲 显示播放进度 快进快退功能 画播放控件 主逻辑 3.效果图 ...

最新文章

  1. mysql的字符串函数大全_MySQL的字符串函数大全
  2. 9、mybatis自增主键策略
  3. v8声卡怎么录制唱歌_【绝对干货】关于声卡你需要知道的几点知识(上)
  4. 英语口语(5月17)
  5. Oracle 不同故障的恢复方案
  6. C语言如何设计随机数
  7. 谷歌json插件_没用过这7款浏览器插件,你一定是假的程序员
  8. python爬虫之模拟登陆(CSDN篇)
  9. 金蝶服务器存在但无账套信息,金蝶KIS专业版
  10. 投影技术的分类与应用
  11. window10 时间同步出错 超时
  12. 织梦dedecms百度快照劫持注入代码防范与清除
  13. 交换机组播风暴_cisco 交换机端口广播风暴设置(非常详细)
  14. 用户故事 | 工商银行核心应用 MySQL 治理实践
  15. elasticsearch学习笔记--聚合函数篇
  16. 吴军给女儿的信:乐观的人生态度,比什么都重要
  17. 常用电源管理稳压IC一览
  18. 最全的Windows7 服务优化、详解。
  19. UI设计转行交互怎么样?【萧蕊冰】
  20. DirectX11-硬件多实例渲染

热门文章

  1. 微服务日志配置以及在生产环境怎么查看日志?
  2. ionic android ios,ionic中android,和ios生成的一些兼容问题---$ionicConfigProvider
  3. [BSidesCF 2020]Had a bad day -- 关于00截断的衍生
  4. HTML基础篇(2)
  5. 笔试、面试题收集(主要是Python Web开发)编辑中。。。
  6. 最任性热酷拿到最重磅IP,《找你妹2015》获央视春晚吉祥物阳阳版权
  7. vscode自动换行快捷键(附常用快捷键)
  8. 数据结构与算法-查找算法(二分查找,插值查找,斐波那契(黄金分割法)查找)
  9. Hashicorp Vault介绍和使用说明
  10. 还不会漏洞上传吗?一招带你解决