# 音视频格式转换
**Repository Path**: zfx102/VideoAudioApp
## Basic Information
- **Project Name**: 音视频格式转换
- **Description**: No description available
- **Primary Language**: C#
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-24
- **Last Updated**: 2026-06-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# VideoAudioApp 项目介绍
## 项目概述
VideoAudioApp 是一个基于 .NET MAUI 开发的 Android 音频格式转换应用,项目位于 `D:\Visual Studio\MyAPP\VideoAudioApp`。
应用当前主要面向 Android 实体机运行,集成了 Android 原生 FFmpeg 动态库,通过 C# 调用 native bridge 完成音频文件的格式转换、裁剪片段转换、转换后播放和文件保存。
当前应用名称为“音频转换”,包名为 `com.companyname.videoaudioapp`。
## 当前功能
- 内置音频文件浏览界面
- 扫描手机本机音频文件。
- 支持按音频格式分组展示。
- 支持搜索音频文件。
- 用户可直接选择一个音频作为输入文件。
- 输出格式选择
- 支持通过下拉框选择目标音频格式。
- 当前支持格式包括:
- WAV (PCM)
- FLAC
- AAC (M4A)
- OGG (Vorbis)
- MP3
- 转换前预览
- 未选择音频时显示空白占位提示。
- 选择音频后显示音频素材波形区域。
- 支持播放选中片段。
- 支持播放指针跟随播放进度移动。
- 支持拖动播放指针定位播放位置。
- 支持左右裁剪边界控制。
- 支持将指针左侧或右侧裁掉。
- 支持恢复为初始完整音频。
- 转换后音频处理
- 可输入新的音频文件名。
- 可选择保存到手机目录。
- 未选择保存目录时,默认先保存到应用内部目录。
- 转换完成后可播放转换后的音频。
- 可打开已选择的保存目录。
- FFmpeg 原生转码
- 使用 `Platforms\Android\Libs\ffmpeg-android-native-8.1.2-full.aar`。
- C# 侧通过 `AndroidFfmpegAudioConverter` 调用 native bridge。
- native bridge 当前提供:
- `ffmpegbridge_convert_to_wav`
- `ffmpegbridge_convert_audio`
- `ffmpegbridge_convert_audio_trim`
## 技术栈
- .NET MAUI
- C#
- Android
- FFmpeg Android native library
- Android MediaStore
- Android Storage Access Framework
- Visual Studio
## 项目结构
```text
D:\Visual Studio\MyAPP
├── MyAPP.slnx
├── 项目介绍.md
└── VideoAudioApp
├── App.xaml
├── AppShell.xaml
├── MainPage.xaml
├── MainPage.xaml.cs
├── MauiProgram.cs
├── VideoAudioApp.csproj
├── Services
│ ├── AudioOutputFormat.cs
│ ├── IAudioConversionService.cs
│ └── UnsupportedAudioConversionService.cs
├── Platforms
│ └── Android
│ ├── AndroidFfmpegAudioConverter.cs
│ ├── MainActivity.cs
│ └── Libs
│ └── ffmpeg-android-native-8.1.2-full.aar
└── Resources
├── AppIcon
├── Fonts
├── Images
├── Raw
├── Splash
└── Styles
```
## 关键文件说明
### `VideoAudioApp.csproj`
项目配置文件,当前目标平台为:
```xml
net10.0-android
```
Android 最低支持版本配置为:
```xml
21.0
```
也就是最低支持 Android 5.0,对应 API 21。
当前 Android Debug 构建使用 APK 输出:
```xml
apk
```
FFmpeg AAR 引用配置:
```xml
```
### `MainPage.xaml`
主界面布局文件,包含:
- 音频文件选择区域。
- 输出格式选择下拉框。
- 转换前预览区域。
- 波形占位区域。
- 波形编辑区域。
- 转换后音频设置区域。
- 内置音频文件浏览弹层。
### `MainPage.xaml.cs`
主界面逻辑文件,包含:
- 音频扫描。
- 音频选择。
- 文件复制到缓存。
- 播放控制。
- 播放指针更新。
- 裁剪边界更新。
- 转换按钮逻辑。
- 保存目录选择。
- 转换后文件播放。
- 波形绘制逻辑。
### `Services\AudioOutputFormat.cs`
定义应用支持的输出音频格式,包括 WAV、FLAC、M4A、OGG、MP3。
### `Services\IAudioConversionService.cs`
定义音频转换服务接口,方便 Android 原生 FFmpeg 实现和其他平台占位实现解耦。
### `Platforms\Android\AndroidFfmpegAudioConverter.cs`
Android 平台的 FFmpeg 转码实现。
该文件负责:
- 加载 native so 库。
- 加载 `libavutil.so`、`libswresample.so`、`libavcodec.so`、`libavformat.so`、`libffmpegbridge.so`。
- 通过 P/Invoke 调用 FFmpeg bridge。
- 返回转换成功或失败信息。
### `Platforms\Android\MainActivity.cs`
Android Activity 入口,负责:
- 申请读取音频文件权限。
- 打开系统目录选择器。
- 持久化目录读写授权。
## 构建方式
在 PowerShell 中进入项目目录:
```powershell
cd "D:\Visual Studio\MyAPP\VideoAudioApp"
```
执行 Debug arm64 构建:
```powershell
dotnet build "D:\Visual Studio\MyAPP\VideoAudioApp\VideoAudioApp.csproj" -f net10.0-android -c Debug -r android-arm64
```
构建成功后,APK 输出位置为:
```text
D:\Visual Studio\MyAPP\VideoAudioApp\bin\Debug\net10.0-android\android-arm64\com.companyname.videoaudioapp-Signed.apk
```
## 安装到实体机
确认手机已开启开发者选项和 USB 调试,并授权当前电脑。
查看设备:
```powershell
& "D:\Visual Studio\sdk\Android\android-sdk\platform-tools\adb.exe" devices
```
安装 APK:
```powershell
& "D:\Visual Studio\sdk\Android\android-sdk\platform-tools\adb.exe" install --no-incremental -r -g "D:\Visual Studio\MyAPP\VideoAudioApp\bin\Debug\net10.0-android\android-arm64\com.companyname.videoaudioapp-Signed.apk"
```
启动应用:
```powershell
& "D:\Visual Studio\sdk\Android\android-sdk\platform-tools\adb.exe" shell am start -W -S -n com.companyname.videoaudioapp/crc6416ec2355b64af9f6.MainActivity
```
## 已验证状态
当前版本已在实体 Android 设备上完成过以下验证:
- APK 安装成功。
- 应用冷启动正常。
- 未选择音频时,转换前预览区域显示占位提示。
- 选择音频后,占位提示切换为波形编辑区域。
- 音频浏览列表可以扫描并选择本机音频。
- 播放指针、裁剪边界和波形区域能够联动。
- MP3 转换可用。
- 应用未出现启动闪退。
## 注意事项
- `bin` 目录是最终构建输出目录,APK 通常在这里生成。
- `obj` 目录是编译中间产物目录,一般不要手动修改。
- `Platforms\Android\Libs` 下的 AAR 是 Android 原生 FFmpeg 依赖,删除或替换该文件会影响转码能力。
- 如果修改了 FFmpeg bridge 的 C/C++ 代码,需要重新生成 AAR 后再放回项目。
- 如果遇到 native 库加载失败,需要检查 AAR 内是否包含目标 ABI 的 `.so` 文件,尤其是 `arm64-v8a`。
- 如果实体机安装提示 32 位兼容问题,需要检查 APK 是否按 `android-arm64` 构建,以及 AAR 是否包含 64 位 so。
## 后续扩展方向
- 增加视频格式转换。
- 增加视频转 GIF。
- 增加音视频拼接。
- 增加多文件批量转换。
- 增加 H.264、H.265、AV1、Opus、Vorbis 等更多编码能力。
- 增加滤镜、裁剪、封装、解码、编码、流媒体推流等高级音视频处理能力。
- 将 FFmpeg bridge 扩展为更通用的命令执行接口。
- 为转换任务增加进度回调、取消任务和后台通知。