网站建设小西门,住房和城乡建设部网站防排烟,网络安全未来发展趋势,网站建设有用吗问题现象
OpenHarmony 5.0版本使用AVPlayer播放mpegts封装格式的H.265(HEVC)编码格式的视频时出现报错导致播放失败
问题原因
OpenHarmony 5.0版本AVPlayer播放器使用histreamer引擎#xff0c;因为 libav_codec_hevc_parser.z.so 动态库未开源导致H265编码格式视频解析不到…问题现象
OpenHarmony 5.0版本使用AVPlayer播放mpegts封装格式的H.265(HEVC)编码格式的视频时出现报错导致播放失败
问题原因
OpenHarmony 5.0版本AVPlayer播放器使用histreamer引擎因为 libav_codec_hevc_parser.z.so 动态库未开源导致H265编码格式视频解析不到正确的宽高硬件解码器框架层初始化时因为分辨率不合理导致报错
解决方案
版本信息
OpenHarmony-v5.0.1-Release 和 OpenHarmony-v5.0.2-Release 标准系统
方案一设置默认的分辨率
修改 foundation/multimedia/av_codec/services/media_engine/plugins/ffmpeg_adapter/demuxer/ffmpeg_format_helper.cpp 文件符号为新增的代码
void FFmpegFormatHelper::ParseVideoTrackInfo(const AVStream avStream, Meta format,const AVFormatContext avFormatContext)
{format.SetTag::VIDEO_WIDTH(static_castuint32_t(avStream.codecpar-width));format.SetTag::VIDEO_HEIGHT(static_castuint32_t(avStream.codecpar-height));format.SetTag::VIDEO_DELAY(static_castuint32_t(avStream.codecpar-video_delay)); if ((avStream.codecpar-width 0 || avStream.codecpar-height 0) (avStream.codecpar-codec_id AV_CODEC_ID_HEVC)) {format.SetTag::VIDEO_WIDTH(1920);format.SetTag::VIDEO_HEIGHT(1080);}double frameRate 0;...
}如果demuxer未解析到H265视频的分辨率设置默认值用于初始化解码器分辨率的默认值需要在codec hcs配置文件的分辨率范围内minWidth和maxWidthminHeight和maxHeight之间
方案二打开ffmpeg hevc软解用于解析分辨率
1、third_party/ffmpeg/BUILD.gn 新增h265 parser和decoder源文件编译
ohos_source_set(ffmpeg_dynamic) {source [...//third_party/ffmpeg/libavcodec/dovi_rpu.c,//third_party/ffmpeg/libavcodec/dynamic_hdr10_plus.c,//third_party/ffmpeg/libavcodec/dynamic_hdr_vivid.c,//third_party/ffmpeg/libavcodec/hevc_cabac.c,//third_party/ffmpeg/libavcodec/hevc_data.c,//third_party/ffmpeg/libavcodec/hevc_filter.c,//third_party/ffmpeg/libavcodec/hevc_mvs.c,//third_party/ffmpeg/libavcodec/hevc_parse.c,//third_party/ffmpeg/libavcodec/hevc_parser.c,//third_party/ffmpeg/libavcodec/hevc_ps.c,//third_party/ffmpeg/libavcodec/hevc_refs.c,//third_party/ffmpeg/libavcodec/hevc_sei.c,//third_party/ffmpeg/libavcodec/hevcdec.c,//third_party/ffmpeg/libavcodec/hevcdsp.c,//third_party/ffmpeg/libavcodec/hevcpred.c,//third_party/ffmpeg/libavutil/hdr_dynamic_vivid_metadata.c,]...
}注意如果是64位平台还需要添加//third_party/ffmpeg/libavcodec/aarch64 目录下的部分文件另外可能需要修改libavcodec/hevcdec.c的部分代码以通过编译2、third_party/ffmpeg/ohos_config.sh 新增h265 parser和decoder配置修改1有两处
- --enable-parserh263,h264,mpeg4video,vp8,vp9,mpegvideo --enable-parserh263,h264,mpeg4video,vp8,vp9,mpegvideo,hevc修改2有两处
- --enable-decoderh263,h264,mpeg2video,mpeg4,vp8,vp9 --enable-decoderh263,h264,mpeg2video,mpeg4,vp8,vp9,hevc结语
修改后验证播放mpegts封装的H.265格式的视频走硬件解码可以正常播放。下一篇文章更新mp4封装的H265视频播放失败的解决方案。