智能客服
你问我答,随时在线为你解决问题
推流端过来的流不是正向的,流的封装格式是mp4,使用OH_AVMuxer_SetRotation函数配置旋转90度没有生效。
需要生成旋转后的视频文件,可以对原mp4文件进行解封装和重新封装步骤,并使用OH_AVMuxer_SetRotation接口在媒体数据封装过程中对视频进行配置,使得最后新封装出来的视频按照配置的角度旋转。
在OH_AVMuxer_SetRotation函数调用前,添加日志打印查看配置的旋转角度,发现虽然在全局变量配置了90度旋转,但是在最后给OH_AVMuxer_SetRotation的参数为0,从而导致没有旋转。
03-12 11:49:19.095 8687-8687 A02B66/com.sam...ferMode/Muxer com.sampl...fferMode I {Config():58} test Muxer rotation 0 auto trackFormat =
std::shared_ptr<OH_AVFormat>(OH_AVSource_GetTrackFormat(source_, index), OH_AVFormat_Destroy);
OH_AVFormat_GetIntValue(trackFormat.get(), OH_MD_KEY_TRACK_TYPE, &trackType);
if (trackType == MEDIA_TYPE_VID) {
OH_AVDemuxer_SelectTrackByID(demuxer_, index);
// 获取其他配置参数步骤,如分辨率、轨道ID等
char *videoCodecMime;
OH_AVFormat_GetStringValue(trackFormat.get(), OH_MD_KEY_CODEC_MIME,
const_cast<char const **>(&videoCodecMime));
info.videoCodecMime = videoCodecMime;
OH_AVFormat_GetIntValue(trackFormat.get(), OH_MD_KEY_PROFILE, &info.hevcProfile);
videoTrackId_ = index;
OH_AVFormat_GetIntValue(trackFormat.get(), OH_MD_KEY_WIDTH, &info.videoWidth);
OH_AVFormat_GetIntValue(trackFormat.get(), OH_MD_KEY_HEIGHT, &info.videoHeight);
OH_AVFormat_GetDoubleValue(trackFormat.get(), OH_MD_KEY_FRAME_RATE, &info.frameRate);
OH_AVFormat_GetLongValue(trackFormat.get(), OH_MD_KEY_BITRATE, &info.bitrate);
// 问题代码,此处获取的OH_MD_KEY_ROTATION为0
OH_AVFormat_GetIntValue(trackFormat.get(), OH_MD_KEY_ROTATION, &info.rotation);
} 增加新全局变量存储需要旋转的角度,给OH_AVMuxer_SetRotation函数配置的参数使用解析出来的旋转角度加上实际需要旋转的角度即可。
Q:如果仅需要视频在渲染播放时旋转,应该如何配置操作?
A:仅需要在播放时使得播放结果旋转,可以使用Surface模式视频解码,并在解码过程的配置步骤中使用OH_AVFormat_SetIntValue接口给OH_MD_KEY_ROTATION键值对配置指定的旋转角度。