Files
TAIXIN/sdk/app/babyprotocol/babyprotocol_playback.c

105 lines
3.1 KiB
C
Raw Permalink Normal View History

#include "basic_include.h"
#include "stream_define.h"
#include "lib/multimedia/msi.h"
#include "video_app_h264_msi.h"
#include "audio_msi/audio_adc.h"
#include "audio_media_ctrl/audio_code_ctrl.h"
#include "intercom/intercom.h"
#include "babyprotocol_playback.h"
#include "babyprotocol_h264.h"
#ifdef SYS_APP_BBM_CAM
extern struct msi *mp4_demux_msi_init(const char *msi_name, const char *filename);
extern void protocol_client_filtertype(uint8_t type);
static struct msi *playback_msi = NULL;
static struct msi *aac_msi = NULL;
int32_t client_remote_playback_init(const char *filename)
{
struct msi *opus_msi = NULL;
AUDEC_INIT audec_init;
if(playback_msi) {
msi_destroy(playback_msi);
audio_decode_deinit(aac_msi);
}
audec_init.track_type = MEDIA_TRACK;
audec_init.priority = play_interruptible;
audec_init.direct_to_dac = 0;
audec_init.destroy_self = 0;
audec_init.use_tpc = 0;
audec_init.src_msi = NULL;
aac_msi = audio_decode_init(AAC_DEC, 8000, &audec_init);
if(aac_msi == NULL) {
return RET_ERR;
}
protocol_client_filtertype(FSTYPE_H264_FILE);
intercom_encode_pause(1, 1);
opus_msi = msi_find("SR_OPUS_ENCODE", 1);
if(opus_msi) {
msi_put(opus_msi);
audio_code_set_src_msi(opus_msi, aac_msi);
}
intercom_encode_pause(0, 0);
os_sleep_ms(100);
playback_msi = mp4_demux_msi_init("bbm_playback_mp4", filename);
if(playback_msi) {
msi_add_output(playback_msi, NULL, "NET_H264");
audio_code_set_src_msi(aac_msi, playback_msi);
intercom_set_stream_type(intercom_live_audio, intercom_playback_audio);
msi_do_cmd(playback_msi, MSI_CMD_VIDEO_DEMUX_CTRL, MSI_VIDEO_DEMUX_START, 0);
return RET_OK;
}
audio_decode_deinit(aac_msi);
return RET_ERR;
}
int32_t client_remote_playback_deinit(void)
{
struct msi *opus_msi = NULL;
if(playback_msi) {
msi_destroy(playback_msi);
os_sleep_ms(100);
protocol_client_filtertype(FSTYPE_H264_GEN420_DATA);
audio_decode_deinit(aac_msi);
intercom_encode_pause(1, 1);
opus_msi = msi_find("SR_OPUS_ENCODE", 1);
if(opus_msi) {
msi_put(opus_msi);
audio_code_set_src_msi(opus_msi, get_auadc_msi(AUSYS_AUAD));
}
intercom_set_stream_type(intercom_live_audio, intercom_live_audio);
intercom_encode_pause(0, 0);
}
playback_msi = NULL;
return RET_OK;
}
static uint32_t playback = 0;
static uint8_t playback_file_name[50] = {0};
static void mp4_playback_thread(void *d)
{
if(playback == 1) {
os_printf("\n***playback:%s***\n",playback_file_name);
client_remote_playback_init((const char*)playback_file_name);
}
else if(playback == 0) {
client_remote_playback_deinit();
}
}
int32 atcmd_bbm_client_playback(const char *cmd, char *argv[], uint32 argc)
{
if(argc >= 2) {
playback = os_atoi(argv[1]);
os_memset(playback_file_name, 0, 50);
os_memcpy(playback_file_name,argv[0],strlen(argv[0]));
os_task_create("mp4_playback_thread", mp4_playback_thread, NULL, OS_TASK_PRIORITY_NORMAL, 0, NULL, 2048);
}
return 0;
}
#endif