librtsp中的音频推流函数要怎么用,也没例程参考
另外ffrtsp 这个库在哪里获取,我在百度也没找到?求大佬支招~最近做rk rtsp音视频推流和拉流,视频推流参考例程没什么问题,音视频不知道怎么一起推,求大佬支招~ ffrtsp 是我们自己实现的,目的为了快速让用户把基本的硬件用起来。目前没有提供源码的计划也不支持音频封装,如果需要添加功能的话,建议找第三方开源工具可库,例如 ffmpeg live555 等自行实现 板蓝根 发表于 2022-1-11 10:46
ffrtsp 是我们自己实现的,目的为了快速让用户把基本的硬件用起来。目前没有提供源码的计划也不支持音频封 ...
好吧,
另外问一下
1.rkmedia能不能调用麦克风设备,我试了一下音频功能,好像只能从传输声卡发出的声音
2.另外rk 里带librtsp那个库的接口怎么用,视频推流可以,音频推流模仿的视频推流的写法,好像没效果
代码:
void video_packet_cb(MEDIA_BUFFER mb) {
static RK_S32 packet_cnt = 0;
// printf("#Get packet-%d, size %zu\n", packet_cnt, RK_MPI_MB_GetSize(mb));
if (g_rtsplive && g_rtsp_session) {
rtsp_tx_video(g_rtsp_session, RK_MPI_MB_GetPtr(mb), RK_MPI_MB_GetSize(mb),
RK_MPI_MB_GetTimestamp(mb));
rtsp_do_event(g_rtsplive);
}
RK_MPI_MB_ReleaseBuffer(mb);
packet_cnt++;
}
static void audio_packet_cb(MEDIA_BUFFER mb) {
static RK_S32 packet_cnt = 0;
// printf("#Get packet-%d, size %zu\n", packet_cnt, RK_MPI_MB_GetSize(mb));
if (g_rtsplive && g_rtsp_session) {
rtsp_tx_audio(g_rtsp_session, RK_MPI_MB_GetPtr(mb), RK_MPI_MB_GetSize(mb),
RK_MPI_MB_GetTimestamp(mb));
rtsp_do_event(g_rtsplive);
}
RK_MPI_MB_ReleaseBuffer(mb);
packet_cnt++;
}
g_rtsplive = create_rtsp_demo(554);
g_rtsp_session = rtsp_new_session(g_rtsplive, "/live/main_stream");
rtsp_set_video(g_rtsp_session, RTSP_CODEC_ID_VIDEO_H264, NULL, 0);
rtsp_set_audio(g_rtsp_session, RTSP_CODEC_ID_AUDIO_AAC, NULL, 0);
rtsp_sync_video_ts(g_rtsp_session, rtsp_get_reltime(), rtsp_get_ntptime());
rtsp_sync_audio_ts(g_rtsp_session, rtsp_get_reltime(), rtsp_get_ntptime());
// MPP_CHN_S stEncChn;
stEncChn.enModId = RK_ID_VENC;
stEncChn.s32DevId = 0;
stEncChn.s32ChnId = 0;
ret = RK_MPI_SYS_RegisterOutCb(&stEncChn, video_packet_cb);
if (ret) {
printf("ERROR: register output callback for VENC error! ret=%d\n", ret);
}
stSrcChn.enModId = RK_ID_RGA;
stSrcChn.s32DevId = 0;
stSrcChn.s32ChnId = 2;
stDestChn.enModId = RK_ID_VENC;
stDestChn.s32DevId = 0;
stDestChn.s32ChnId = 0;
ret = RK_MPI_SYS_Bind(&stSrcChn, &stDestChn);
if (ret) {
printf("ERROR: Bind VI and VENC error! ret=%d\n", ret);
}
//audio
fp = fopen("/data/work/out.mp2", "w+");
// RK_MPI_SYS_Init();
//MPP_CHN_S mpp_chn_ai, mpp_chn_aenc;
mpp_chn_ai.enModId = RK_ID_AI;
mpp_chn_ai.s32ChnId = 0;
mpp_chn_aenc.enModId = RK_ID_AENC;
mpp_chn_aenc.s32ChnId = 0;
// AI_CHN_ATTR_S ai_attr;
ai_attr.pcAudioNode = ALSA_PATH;
ai_attr.enSampleFormat = RK_SAMPLE_FMT_S16;
ai_attr.u32NbSamples = 1024;
ai_attr.u32SampleRate = 16000;
ai_attr.u32Channels = 2;
ai_attr.enAiLayout = AI_LAYOUT_NORMAL; // chanel layout: ; remove
// ref, output mic mono
// AENC_CHN_ATTR_S aenc_attr;
aenc_attr.enCodecType = RK_CODEC_TYPE_MP2;
aenc_attr.u32Bitrate = 64000;
aenc_attr.u32Quality = 1;
aenc_attr.stAencMP2.u32Channels = 1;
aenc_attr.stAencMP2.u32SampleRate = 16000;
// 1. create AI
RK_MPI_AI_SetChnAttr(mpp_chn_ai.s32ChnId, &ai_attr);
RK_MPI_AI_EnableChn(mpp_chn_ai.s32ChnId);
// 2. create AENC
RK_MPI_AENC_CreateChn(mpp_chn_aenc.s32ChnId, &aenc_attr);
RK_U32 ret = RK_MPI_SYS_RegisterOutCb(&mpp_chn_aenc, audio_packet_cb);
printf("ret = %d.\n", ret);
// 3. bind AI-AENC
RK_MPI_SYS_Bind(&mpp_chn_ai, &mpp_chn_aenc);
帮忙看一下哪里错了~ librtsp 也不支持音频推流 板蓝根 发表于 2022-1-12 09:30
librtsp 也不支持音频推流
好吧,那他的接口是先写着,还没开发好么 不是的, rtsp 推流这部分一般是客户自己开发的,这里的库只是 demo 用的 板蓝根 发表于 2022-1-12 09:50
不是的, rtsp 推流这部分一般是客户自己开发的,这里的库只是 demo 用的
好的好的,谢谢大佬~ xiongyingsun 发表于 2022-1-12 10:24
好的好的,谢谢大佬~
音视频同时推流可以看下这个帖子:
https://dev.t-firefly.com/thread-104655-1-1.html
里面有个示例就是音视频推流的。 799959745 发表于 2022-1-12 14:54
音视频同时推流可以看下这个帖子:
里面有个示例就是音视频推流的。
好的。我研究一下,谢谢大佬~
页:
[1]