# 音视频格式转换 **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 扩展为更通用的命令执行接口。 - 为转换任务增加进度回调、取消任务和后台通知。