请教:MTK平台下mp3的流式播放

BuleRiver 2009-12-24 02:39:36
加精
大家好,我在做mp3流式播放的时候,发现在播放完一段数据,然后再播放下一段的时候,会有一个停顿,具体代码如下:

FS_HANDLE g_file_handle;
U8 audio_data[1024 * 64];
UINT len;
#define buf_size sizeof(audio_data)

void play_mp3_frame_continue(mdi_result result)
{
if (FS_NO_ERROR != FS_Read(g_file_handle, audio_data, buf_size, &len))
{
DisplayPopup((U8*)L"Read File Failed", IMG_GLOBAL_OK, 1, 5000, 13);
return;
}

if (len < buf_size)
{
mdi_audio_play_string_with_vol_path(audio_data, buf_size, MDI_FORMAT_DAF, DEVICE_AUDIO_PLAY_ONCE, NULL, NULL, (U8)6, MDI_DEVICE_SPEAKER_BOTH);
FS_Close(g_file_handle);
return;
}
else
{
mdi_audio_play_string_with_vol_path(audio_data, buf_size, MDI_FORMAT_DAF, DEVICE_AUDIO_PLAY_ONCE, NULL, play_mp3_frame_continue, (U8)6, MDI_DEVICE_SPEAKER_BOTH);
}
}

void play_mp3_frame(void)
{
if ((g_file_handle = FS_Open(L"D:\\text\\a.mp3", FS_READ_ONLY)) < 0)
{
DisplayPopup((U8*)L"Open File Failed", IMG_GLOBAL_OK, 1, 5000, 13);
return;
}

if (FS_NO_ERROR != FS_Read(g_file_handle, audio_data, buf_size, &len))
{
DisplayPopup((U8*)L"Read File Failed", IMG_GLOBAL_OK, 1, 5000, 13);
FS_Close(g_file_handle);
return;
}

mdi_audio_play_string_with_vol_path(audio_data, buf_size, MDI_FORMAT_DAF, DEVICE_AUDIO_PLAY_ONCE, NULL, play_mp3_frame_continue, (U8)6, MDI_DEVICE_SPEAKER_BOTH);
if (len < buf_size)
{
return;
}
}

void exit_play_mp3_frame(void)
{
mdi_audio_stop_string();
FS_Close(g_file_handle);
GoBackHistory();
}

void audio_play_entry(void)
{
EntryNewScreen(MAIN_MENU_SCREENID, NULL, audio_play_entry, NULL);
clear_screen();
gui_set_text_color(UI_COLOR_RED);
gui_move_text_cursor(50, 50);
gui_print_text(L"Audio Player");
gui_move_text_cursor(25, 100);
gui_print_text(L"Press left key to play");
gui_move_text_cursor(25, 120);
gui_print_text(L"Press right key to stop");
gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);

SetKeyHandler(exit_play_mp3_frame, KEY_RSK, KEY_EVENT_UP);
SetKeyHandler(play_mp3_frame, KEY_LSK, KEY_EVENT_UP);
}

在调用函数mdi_audio_play_string_with_vol_path()播放完audio_data中的数据后,就会回调函数play_mp3_frame_continue,所以我就在play_mp3_frame_continue函数中,继续读取文件,然后播放。
但是就是在播放完audio_data之中的数据,到下一次调用mdi_audio_play_string_with_vol_path()函数继续播放之间的一段时间,有一个停顿,搞的很不爽。
如何解决该问题呢?
而且如果我在播放的时候调用函数mdi_audio_stop_string(),它也会在播放完当前audio_data之中的数据后才会真正的停止。
大家有什么好的办法解决该问题吗?谢谢!!!
...全文
1045 69 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
69 条回复
切换为时间正序
请发表友善的回复…
发表回复
l5123 2011-12-20
  • 打赏
  • 举报
回复
学习了,顶楼主,有问题再来请教
jiang_c_q_ 2011-04-19
  • 打赏
  • 举报
回复
都是高手啊
xuaujin 2010-07-22
  • 打赏
  • 举报
回复
[Quote=引用 68 楼 xuaujin 的回复:]
我也在尝试将一个MP3文件分成多次播放,使用的是mdi_audio_play_string()函数,
mdi_audio_play_string((void*)Audio_buf, playLength, MEDIA_DAF, DEVICE_AUDIO_PLAY_ONCE, NULL, Play_Callbcak);


但发现播放第一次后,系统一直不能调用Play_Callbcak()函……
[/Quote]
另,上述情况出现在6223平台,Codebase为08A
xuaujin 2010-07-22
  • 打赏
  • 举报
回复
我也在尝试将一个MP3文件分成多次播放,使用的是mdi_audio_play_string()函数,
mdi_audio_play_string((void*)Audio_buf, playLength, MEDIA_DAF, DEVICE_AUDIO_PLAY_ONCE, NULL, Play_Callbcak);


但发现播放第一次后,系统一直不能调用Play_Callbcak()函数,mdi_audio_is_playing(MDI_AUDIO_PLAY_STRING)返回的值一直为真,感觉mdi_audio_play_string根本就不支持流方式,mdi_audio_play_string与楼主调用的mdi_audio_play_string_with_vol_path()函数都是基于 mdi_audio_play_string_portion_with_vol_path()封装的。
BuleRiver 2010-03-15
  • 打赏
  • 举报
回复
我是直接调用mdi_audio_play_string_with_vol_path
howard000 2010-03-15
  • 打赏
  • 举报
回复
请教你是直接调用media_aud_play_string,还是调用mdi_audio_play_string_with_vol_path呢?
jiangyi329 2010-03-08
  • 打赏
  • 举报
回复
我是说如果网络数据一共有2M,那么1M的数组不是不够了吗?
BuleRiver 2010-03-08
  • 打赏
  • 举报
回复
引用 62 楼 jiangyi329 的回复:
楼主,你的问题最后是怎么解决的阿?可不可以指点下阿?
如果网络数据很大的话,难道要分配很大的buffer?

这样“buffer:1M的数组(够大了吧,呵呵)”,1M也不算大阿

你有方法分配更大的内存吗?
jiangyi329 2010-03-08
  • 打赏
  • 举报
回复
楼主,你的问题最后是怎么解决的阿?可不可以指点下阿?
如果网络数据很大的话,难道要分配很大的buffer?

这样“buffer:1M的数组(够大了吧,呵呵)”,1M也不算大阿
BuleRiver 2010-03-08
  • 打赏
  • 举报
回复
确实就不够了,那就需要另外的方法解决。
我没有更好的方法......
msdn2009_2010 2009-12-30
  • 打赏
  • 举报
回复
o
youjiahui123 2009-12-29
  • 打赏
  • 举报
回复
打打酱油
WSYGDSB 2009-12-29
  • 打赏
  • 举报
回复
围观一下,
whywen_MoJian 2009-12-29
  • 打赏
  • 举报
回复
mark
lanheihei 2009-12-28
  • 打赏
  • 举报
回复
很感兴趣,得学学了
lenganguo 2009-12-28
  • 打赏
  • 举报
回复
呵呵 真的不错
BuleRiver 2009-12-28
  • 打赏
  • 举报
回复
大家好,如果我使用mdi_audio_play_string_with_vol_path()播放mp3,再使用mdi_audio_pause(0, NULL)来"暂停"当前的播放,确实可以让播放停下来,但是当我调用mdi_audio_resume(0, NULL)恢复的时候,手机却挂了。
这是什么原因呢?如何才能解决?
请高手指点,谢谢!!!
BuleRiver 2009-12-28
  • 打赏
  • 举报
回复
谢谢大家,这个帖子先结帐吧。
chaosteng 2009-12-28
  • 打赏
  • 举报
回复
zwtchy123 2009-12-28
  • 打赏
  • 举报
回复
shoucang
加载更多回复(49)

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧