# oh_avcodec **Repository Path**: weekend/oh_avcodec ## Basic Information - **Project Name**: oh_avcodec - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-04-07 - **Last Updated**: 2024-05-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 鸿蒙视频解码结构 ![](./鸿蒙视频解码结构.jpg) ## 鸿蒙音视频播放流程 ![](./鸿蒙音视频播放流程.jpg) ## ijk音视频解码流程 ![](./ijk工作流程.jpg) ## FFMPEG音视频解码流程 ![](./avplayer.jpg) ## HDC命令参考 ``` # 实时显示日志到本地 hdc hilog > d:\log\log.txt # 屏显日志并存档 hdc hilog | tee d:\log\log.txt # 发送文件到文档 hdc file send d:\h264.mp4 /storage/media/100/local/files/Docs hdc file send d:\h265.mp4 /storage/media/100/local/files/Docs # 确认是否成功发送 hdc shell ls -alht /storage/media/100/local/files/Docs # 日志清理 hdc shell rm /data/log/*.tar hdc shell rm /data/log/hilog/*.tar hdc shell rm /data/log/faultlog/faultlogger/* hdc shell rm /data/log/faultlog/temp/* # 打包下载日志 hdc shell "tar -cvf /data/log/hilog.tar /data/log/hilog" hdc shell "tar -cvf /data/log/faultlog.tar /data/log/faultlog" hdc file recv /data/log/hilog.tar ./ hdc file recv /data/log/faultlog.tar ./ # 崩溃日志目录 hdc shell ls -alht /data/log/faultlog/faultlogger ``` ## faultlog崩溃日志解析 ``` cmd # 崩溃日志目录 hdc shell ls -alht /data/log/faultlog/faultlogger/ # 崩溃行转换 llvm-addr2line -fie D:\git\ohos_ijkplayer3\ijkplayer\build\default\intermediates\libs\default\arm64-v8a\libijkplayer.so 000000000005fbd0 ``` ## 指定测试目标 ``` https://1251542705.vod2.myqcloud.com/4a8d9c67vodtransgzp1251542705/203109c63270835013529449619/v.f1419907.mp4 https://github.com/CarGuo/GSYVideoPlayer https://gitee.com/openharmony-tpc/openharmony_tpc_samples/tree/master/GSYVideoPlayer https://gitee.com/openharmony-sig/ohos_ijkplayer ``` ## HLS播放 ``` # 视频源 http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8 # chrome插件 https://chromewebstore.google.com/detail/native-hls-playback/emnphkkblegpebimobpbekeedfgemhof ``` ### 将m3u8视频流合并成mp4 ``` # -i 输入流 # -c copy 只复制输入视频流,而不对其进行任何编解码操作 # -bsf:a aac_adtstoasc 音频比特流过滤器选项,用于转换AAC音频流的格式 # aac_adtstoasc过滤器将原始AAC流从ADTS(Audio Data Transport Stream)封装格式 # 转换为MPEG-4 Audio Specific Configuration(ASC)格式,以便于在MP4容器中进行处理。 ffmpeg -i http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8 -c copy -bsf:a aac_adtstoasc ./bipbop_4x3_variant.mp4 ``` ### 将mp4分解成m3u8 ``` ffmpeg -i /m3u8/demo.mp4 -c:v copy -c:a copy -f ssegment -segment_format mpegts -segment_list /m3u8/hls/test.m3u8 -segment_time 10 /m3u8/hls/test%05d.ts ``` 这个命令是使用FFmpeg工具,用于将一个视频文件切割成多个分段,并生成一个HTTP Live Streaming(HLS)的播放列表文件。 1. `ffmpeg`: 这是FFmpeg工具的命令,用于执行多媒体处理任务。 2. `-i /m3u8/demo.mp4`: 这是输入选项,指定了要处理的输入文件路径。在这里,输入是一个名为`demo.mp4`的视频文件,它将被用来生成HLS流。 3. `-c:v copy -c:a copy`: 这是视频流和音频流的编解码器选项。`copy`告诉FFmpeg只复制输入文件中的视频流和音频流,而不重新编码它们。这样做可以避免对视频和音频的重新压缩,从而提高处理速度和保留原始质量。 4. `-f ssegment`: 这是输出格式选项,指定了输出的流格式。在这里,`ssegment`表示生成的输出流是分段的流。 5. `-segment_format mpegts`: 这是分段流的格式选项,指定了生成的分段流的格式。在这里,分段流的格式被设置为MPEG-TS(MPEG Transport Stream),这是HLS流的一种常见格式。 6. `-segment_list /m3u8/hls/test.m3u8`: 这是分段流播放列表文件的路径和名称。在这里,生成的HLS播放列表文件将被保存为`test.m3u8`,并存储在`/m3u8/hls/`目录中。 7. `-segment_time 10`: 这是分段时间选项,指定了生成的每个分段的持续时间。在这里,每个分段的持续时间被设置为10秒。 8. `/m3u8/hls/test%05d.ts`: 这是分段流的输出路径和文件名模板。`%05d`是一个格式化字符串,用于表示分段文件的编号,每个分段文件都以`test`开头,后面跟着5位数字编号,并以`.ts`为扩展名。这些分段文件将被保存在`/m3u8/hls/`目录中。 ## 鸿蒙APP安全沙箱推送 1. 先查找bundleName: `com.example.videocodecsample` 2. 安装好hap包后推送文件: ``` hdc file send d:\h264.mp4 /data/app/el2/100/base/com.example.videocodecsample/haps/entry/files ``` 3. c++层打开文件调用使用特定目录访问文件 ``` /data/storage/el2/base/haps/entry/files/h264.mp4 ``` ## 鸿蒙高版本SDK替换 1. 下载每日构建的ohos-sdk-full https://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist 2. 解压出 version-Master_Version-OpenHarmony_5.0.0.18_dev-20240402_020134-ohos-sdk-public.tar.gz /version-Master_Version-OpenHarmony_5.0.0.18_dev-20240402_020134-ohos-sdk-public.tar /ohos-sdk /windows /native-windows-x64-5.0.0.19-Canary2.zip/native/sysroot/usr/ 3. 替换本地sdk目录 C:\Users\localuser\AppData\Local\OpenHarmony\Sdk\10\native\sysroot\usr ## ffmpeg ``` # 查看视频信息 ffmpeg -i d:\h265.mp4 ``` ## patch ```bash # 将最后一个commit生成patch git format-patch -1 # 应用patch git am 0001-OH_AVCODEC.patch ``` ### .gitconfig ``` [alias] st = status lg = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) %C(bold green)%as%C(reset) %C(white)%s%C(reset) %C(dim white)%an<%ae>%C(reset)%C(bold yellow)%d%C(reset)' --all aa = commit --amend --no-edit vv = branch -vv [core] editor = notepad ``` ## 测试视频源 ``` blue https://getsamplefiles.com/download/mp4/sample-5.mp4 https://media.w3.org/2010/05/sintel/trailer.mp4 http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8 https://1251542705.vod2.myqcloud.com/4a8d9c67vodtransgzp1251542705/203109c63270835013529449619/v.f1419907.mp4 yellow http://1.94.37.200:7070/ijkplayer/downloadMp4/1.mp4 http://1.94.37.200:7070/ijkplayer/downloadMp4/2.mp4 http://1.94.37.200:7070/ijkplayer/downloadMp4/H256.mp4 ``` ## 参考: * 每日构建 https://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist * 视频解码 https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/media/video-decoding.md/ * multimedia_media_foundation https://gitee.com/openharmony/multimedia_media_foundation.git * 音频解码 https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/media/avcodec/audio-decoding.md * multimedia_av_codec https://gitee.com/openharmony/multimedia_av_codec * ohos_ijkplayer仓库地址 https://gitee.com/openharmony-sig/ohos_ijkplayer * 获取支持的编解码能力 https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/avcodec/obtain-supported-codecs.md * av_codec部件为OpenHarmony系统提供了统一的音视频编解码、封装、解封装能力 https://gitee.com/openharmony/multimedia_av_codec * 音视频解封装 https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/avcodec/audio-video-demuxer.md * 视频解码 https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/avcodec/video-decoding.md * 视频编码 https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/avcodec/video-encoding.md * 音视频封装 https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/avcodec/audio-video-muxer.md * 异常分析定位工具 https://gitee.com/kairen-13/tools * AVCodecSample https://gitee.com/kairen-13/video-codec-sample * AVCodec Kit(音视频编解码服务) https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/avcodec/Readme-CN.md * Media Kit(媒体服务) https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/media/Readme-CN.md * 视频播放 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/video-playback-0000001504538989-V2 * AVDemuxer https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-avcodec-kit/_a_v_demuxer.md * videoCompressor https://gitee.com/openharmony-sig/ohos_videocompressor * Nginx配置搭建m3u8格式的视频播放服务 https://www.cnblogs.com/liuyangjava/p/17514580.html * ffmpeg-libav-tutorial https://github.com/leandromoreira/ffmpeg-libav-tutorial https://github.com/leandromoreira/ffmpeg-libav-tutorial/blob/master/README-cn.md * sdl-tutorial-cn https://tjumyk.github.io/sdl-tutorial-cn/contents.html * AnnexB 和 avcC https://developer.huawei.com/consumer/cn/forum/topic/0203472320869270276 * c++ ffmpeg qt https://qt.0voice.com/?id=33