4045
- 收藏
- 点赞
- 分享
- 举报
3531播放mp4的音视频同步的问题
本帖最后由 goodman 于 2016-7-8 14:28 编辑
现在有个MP4视频(h264+aac), 使用ffmpeg demux 得到h264 和aac 数据, aac是16bit 48K 立体声.
我的代码大体是这样:
[code]
while (1){
if (av_read_frame(mediaPlayer->_avFormatContext, &avp) == 0) {
if(avp.stream_index < mediaPlayer->_avFormatContext->nb_streams) {
AVMediaType type = mediaPlayer->_avFormatContext->streams[avp.stream_index]->codec->codec_type;
AVCodecID id = mediaPlayer->_avFormatContext->streams[avp.stream_index]->codec->codec_id;
if(type == AVMEDIA_TYPE_VIDEO && id == AV_CODEC_ID_H264) { //视频
mediaPlayer->pushData(avp.data, avp.size, 0);
}
if(type == AVMEDIA_TYPE_AUDIO && id == AV_CODEC_ID_AAC) { //音频
mediaPlayer->addAdtsheader(&avp);
if(mediaPlayer->aacdecode(avp.data, avp.size) == 0){ // 解码aac用时很小大概3个ms
mediaPlayer->pushData((uint8_t*)mediaPlayer->_fifo.data, frameSize); // 这里推数据很耗时间,大概为45ms不知道为为什么(一帧AAC)
av_free_packet(&avp);
coutinue;
}
}
av_free_packet(&avp);
usleep(40*1000);
}
}[/code]
说明:音频使用阻塞方式推(改成非阻塞的方式丢数据)
[code] AUDIO_STREAM_S stStream;
stStream.pStream = addr;
stStream.u32Len = len;
return HI_MPI_ADEC_SendStream(_adecChn, &stStream, HI_TRUE) == HI_SUCCESS ? 0 : -1; // 也就是这个函数耗时
[/code]
现在的现象是,无法正常播放,声音正常了,视频一卡一卡的。有请做过音视频混合播放的大侠路过帮解决下。
或者我这个方式本身就 有问题。
现在有个MP4视频(h264+aac), 使用ffmpeg demux 得到h264 和aac 数据, aac是16bit 48K 立体声.
我的代码大体是这样:
[code]
while (1){
if (av_read_frame(mediaPlayer->_avFormatContext, &avp) == 0) {
if(avp.stream_index < mediaPlayer->_avFormatContext->nb_streams) {
AVMediaType type = mediaPlayer->_avFormatContext->streams[avp.stream_index]->codec->codec_type;
AVCodecID id = mediaPlayer->_avFormatContext->streams[avp.stream_index]->codec->codec_id;
if(type == AVMEDIA_TYPE_VIDEO && id == AV_CODEC_ID_H264) { //视频
mediaPlayer->pushData(avp.data, avp.size, 0);
}
if(type == AVMEDIA_TYPE_AUDIO && id == AV_CODEC_ID_AAC) { //音频
mediaPlayer->addAdtsheader(&avp);
if(mediaPlayer->aacdecode(avp.data, avp.size) == 0){ // 解码aac用时很小大概3个ms
mediaPlayer->pushData((uint8_t*)mediaPlayer->_fifo.data, frameSize); // 这里推数据很耗时间,大概为45ms不知道为为什么(一帧AAC)
av_free_packet(&avp);
coutinue;
}
}
av_free_packet(&avp);
usleep(40*1000);
}
}[/code]
说明:音频使用阻塞方式推(改成非阻塞的方式丢数据)
[code] AUDIO_STREAM_S stStream;
stStream.pStream = addr;
stStream.u32Len = len;
return HI_MPI_ADEC_SendStream(_adecChn, &stStream, HI_TRUE) == HI_SUCCESS ? 0 : -1; // 也就是这个函数耗时
[/code]
现在的现象是,无法正常播放,声音正常了,视频一卡一卡的。有请做过音视频混合播放的大侠路过帮解决下。
或者我这个方式本身就 有问题。
我来回答
回答2个
时间排序
认可量排序
认可0
认可0
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2016-12-26 21:18:32
-
2016-02-20 20:10:27
-
2014-05-30 14:43:27
-
2015-06-08 11:44:07
-
2018-03-08 09:57:45
-
12019-05-20 14:20:24
-
2016-05-07 17:23:08
-
2017-02-23 10:10:53
-
2015-03-13 13:58:02
-
22014-06-30 17:26:38
-
2017-03-28 17:27:32
-
2015-08-12 15:22:22
-
2017-12-28 11:11:36
-
2017-09-19 12:34:49
-
2021-06-18 20:03:56
-
2017-02-23 10:16:53
-
2024-10-29 15:02:13
-
2024-11-15 10:13:05
-
02018-12-01 10:48:20
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5SS928的emmc有32GB,bootargs设置使用16GB,但是为啥能用的只有rootfs的大小
-
33SS928怎样烧写ubuntu系统
-
10ToolPlatform下载rootfs提示网络失败
-
10谁有GK7205V500的SDK
-
5Hi3516CV610 烧录不进去
-
10Hi3559AV100 芯片硬解码h265编码格式的视频时出现视频播放错误,解码错误信息 s32PackErr:码流有错
-
5海思SS928 / SD3403的sample_venc.c摄像头编码Demo中,采集到的摄像头的YUV数据在哪个相关的函数中?
-
5海鸥派openEuler无法启动网卡,连接WIFI存在问题
-
66有没有ISP相关的巨佬帮忙看看SS928对接IMX347的图像问题
-
50求助hi3559与FPGA通过SLVS-EC接口对接问题
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认