FFmpeg开发笔记(七十六)使用国产SDK的播放器wlmedia渲染视频
《FFmpeg开发实战:从零基础到短视频上线》一书的“第 12 章 FFmpeg的移动开发”介绍了如何使用FFmpeg在手机上播放视频,基于FFmpeg的国产播放器开源框架也有很多了,前有哔哩哔哩的ijkplayer,后有小红书的RedPlayer,参见之前的文章《使用国产的ijkplayer播放器观看网络视频》和《使用国产的RedPlayer播放器观看网络视频》。
除此以外,wlmedia也是一款优秀的国产音视频播放SDK,该框架既支持Android系统,也支持鸿蒙系统,集成方便、使用简单,可谓异军突起。wlmedia基于FFmpeg、OpenSSL、SoundTouch、dav1d等第三方库,支持file、http、https、udp、rtmp、rtp、rtsp、byte[]等常见播放协议,也支持H.264、H.265、AV1等视频编码格式。
wlmedia的源码托管地址为https://github.com/ywl5320/wlmedia,最新版本是2025年4月发布的wlmedia 4.2.0,可见该框架的源码更新十分及时。并且wlmedia的源码采用Java+XML编写,对于初学者而言非常友好,使用Android Studio Dolphin(小海豚版本)无需任何改动即可直接导入wlmedia的demo工程。
在自己的App工程中集成wlmedia也很简单,只要执行下列几个步骤就行。
一、导入wlmedia库
如果已经事先导入wlmedia的库工程,则只需在build.gradle中添加下面一行即可引入wlmedia:
implementation project(path: ':wlmedia')
如果不用库工程,也只要在build.gradle中添加下面一行即可引入wlmedia:
implementation 'com.github.ywl5320:wlmedia:4.2.0'
二、引入wlmedia控件
wlmedia提供了两种控件:WlSurfaceView和WlTextureView,其中WlSurfaceView用于一般的播放场景,布局代码示例如下:
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="260dp">
<-- WlSurfaceView 一般播放使用 -->
<com.ywl5320.wlmedia.widget.WlSurfaceView
android:id="@+id/wlsurfaceview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<-- WlSurfaceView 加载中的动画 -->
<com.ywl5320.wlmedia.widget.WlCircleLoadView
android:id="@+id/wlcircleview"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerInParent="true" />
<-- WlSurfaceView 播放控制条 -->
<com.ywl5320.wlmedia.widget.WlSeekBar
android:id="@+id/wlseekbar"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true" />
</RelativeLayout>
而WlTextureView用于需要变更展示效果的场景,比如透明、移动、旋转等等,布局代码示例如下:
<-- WlTextureView 需要做透明、移动、旋转等使用 -->
<com.ywl5320.wlmedia.widget.WlTextureView
android:id="@+id/wltextureview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
三、引入wlmedia播放器
wlmedia提供的播放器叫做WlPlayer,它的用法很简单,只要以下几行代码就够了:
// 创建播放器WlPlayer的实例
WlPlayer wlPlayer = new WlPlayer();
// 设置使用OpenGL渲染的最大视频宽高
wlPlayer.setRenderDefaultSize(3840, 2160);
// 是否自动播放
wlPlayer.setAutoPlay(true);
// 设置音量
wlPlayer.setVolume(100);
WlSurfaceView wlSurfaceView = findViewById(R.id.wlsurfaceview);
// 让控件wlSurfaceView关联播放器WlPlayer
wlSurfaceView.setWlPlayer(wlPlayer);
按照上述几个步骤给App工程集成wlmedia后,编译运行wlmedia的demo工程,打开测试App如下图所示,可见wlmedia提供了多种演示功能。

点击第一个“基础播放”按钮,打开普通播放页面如下图所示,可见wlmedia除了常规的控制操作之外,还提供了缩放、倍速、截图等其他功能。

总结一下,wlmedia的确使用简单,播放功能也丰富,是个不错的国产播放器SDK。
更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。
FFmpeg开发笔记(七十六)使用国产SDK的播放器wlmedia渲染视频的更多相关文章
- FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台
FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待 前言 将ffmpeg移植到海思H ...
- .net开发笔记(十六) 对前部分文章的一些补充和总结
补充有两个: 一个是系列(五)中讲到的事件编程(网址链接),该文提及到了事件编程的几种方式以及容易引起的一些异常,本文补充“多线程事件编程”这一块. 第二个是前三篇博客中提及到的“泵”结构在编程中的应 ...
- 安卓开发笔记(十六):'Request(okhttp3.Request.Builder)' has private access in 'okhttp3.Request
当出现了'Request(okhttp3.Request.Builder)' has private access in 'okhttp3.Request的错误的时候,实际上是我们在写代码的时候少打了 ...
- Java开发笔记(十六)非此即彼的条件分支
前面花了大量篇幅介绍布尔类型及相应的关系运算和逻辑运算,那可不仅仅是为了求真值或假值,更是为了通过布尔值控制流程的走向.在现实生活中,常常需要在岔路口抉择走去何方,往南还是往北,向东还是向西?在Jav ...
- Android笔记(七十六) 点菜DEMO
一个朋友让看一下他的代码,一个点菜的功能,他和我一样,初学者,代码比我的都混乱,也是醉了,干脆想着自己写个demo给他看,原本想着听简单,半个小时应该就可以搞定,真正写的时候,画了3h+,汗颜... ...
- Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件
前言 上一篇已经将himpp套入qt的基础上进行开发.那么qt中拿到frame则是很关键的交互,这是qt与海思可能编解码交叉开发的关键步骤. 受限制 因为直接配置sample的vi比较麻烦 ...
- FFmpeg开发笔记(四):ffmpeg解码的基本流程详解
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放
前言 ffmpeg播放rtsp网络流和摄像头流. Demo 使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克 使用ffmpeg播放网络rtsp文件流 ...
- FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建
前言 本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8. FFmpeg简介 FFmpeg是领先的多媒体框架,能够解码 ...
随机推荐
- Spring基于注解的AOP事务控制
Spring基于注解的AOP事务控制 源码 代码测试 pom.xml <?xml version="1.0" encoding="UTF-8"?> ...
- linux vim增强使用
目录 删除 编辑 删除 删除当前行 dd 删除当前行后面的所有行 dG 编辑 恢复为未修改前的状态 uu
- Python 变量作用域 LEGB
回顾 - Decorator 前篇有讲到了, 闭包和装饰器的概念. 闭包就是, 函数内部嵌套函数. 而 装饰器只是闭包的特殊场景而已, 特殊在如果外函数的参数是指向一个, 用来被装饰的函数地址时(不一 ...
- C/C++双叹号!!运算符
1.问题引入 在阅读https://github.com/amhndu/SimpleNES源代码中ppu.cpp中发现如下代码 m_bgPage = static_cast<CharacterP ...
- 将Spring Boot项目部署到自己的服务器上
第一步: 先准备好MobaXterm,链接上服务器后进入宝塔面板 https://www.bt.cn/new/download.html 找到Linux面板安装脚本复制命令 第二步: 进入MobaXt ...
- 赣CTF-Misc方向wp
checkin 下载附件,一张图片,拖进010,在文件尾看到隐藏文本,提取并用社会主义价值解密 ez_forensics 提示为结合题目进行想象,我们会想到取证第一步vc挂载,但是需要密码,研究图片, ...
- eclipse左边窗口再次出现的方法
1.WindowsShow ViewOtherProject Explorer 2.WindowsShow ViewProject Explorer
- length与capacity
package javaBasic; public class DifferenceLengthCapacity { public static void main(String[] args) { ...
- Nmap 从入门到精通:详细指南
Nmap 从入门到精通:详细指南 1. Nmap 是什么? Nmap(Network Mapper)是一款开源的网络探测和安全审计工具,广泛用于以下场景: 主机发现:识别网络中的活动设备. 端口扫描: ...
- 中国象棋小游戏(C版)
中国象棋小游戏(C版) 说明: #include<graphics.h> 一个在 C/C++ 中用于图形编程的头文件,主要用于创建和操作图形界面.具有绘制图形.设置颜色.鼠标和键盘时间处理 ...