ortp中的rtpsend发送vlc播放

          如果一般的文件没有什么测试的,也看不出什么效果。但是看了一些博客知道了rtpsend.c中默认发送的是g711音频(即PayLoad 为 pcmu 参见「 1 」)。为了测试这个程序,先不做任何改动。找一个g711测试文件,这里下载「 2 」。

下边就是结合vlc来测试这个rtpsend这个程序了。

第一步:
输入命令: vlc rtp://@:5000
打开vlc客户端监听5000端口如下图所示:

第二步:
          发送流命令:./rtpsend test.g711 192.168.1.109 5000           如下图所示:


           vlc就可以出现声音了,前边是一段歌曲,后边是英语对白,噪音很大,应该是哪个参数没有设置好,不过这个已经是一个里程碑了。最终要实现的是H264,慢慢摸索吧。

好的,以下是一个使用alsa库采集音频并使用ortp库打包发送的示例代码,您可以参考: ```c #include <stdio.h> #include <stdlib.h> #include <alsa/asoundlib.h> #include <ortp/ortp.h> // 定义音频参数 #define AUDIO_FORMAT SND_PCM_FORMAT_S16_LE #define AUDIO_CHANNELS 1 #define AUDIO_RATE 44100 #define AUDIO_FRAME_SIZE (AUDIO_CHANNELS * snd_pcm_format_width(AUDIO_FORMAT) / 8) int main(int argc, char *argv[]) { // 初始化ortp库 ortp_init(); // 创建rtp会话 RtpSession *session = rtp_session_new(RTP_SESSION_SENDONLY); if (session == NULL) { fprintf(stderr, "Failed to create rtp session\n"); return -1; } // 设置rtp会话参数 rtp_session_set_scheduling_mode(session, RTP_SCHEDULER_TIME); rtp_session_set_blocking_mode(session, 0); rtp_session_set_payload_type(session, 0); rtp_session_set_tx_timestamp(session, 1); rtp_session_enable_adaptive_jitter_compensation(session, 1); // 解析命令行参数获取目标IP和端口号 if (argc < 3) { fprintf(stderr, "Usage: %s <dest_ip> <dest_port>\n", argv[0]); return -1; } const char *dest_ip = argv[1]; int dest_port = atoi(argv[2]); // 创建rtp传输地址 RtpAddress *addr = rtp_address_new(dest_ip, dest_port, NULL); if (addr == NULL) { fprintf(stderr, "Failed to create rtp address\n"); return -1; } // 打开默认alsa音频设备 snd_pcm_t *handle; if (snd_pcm_open(&handle, "default", SND_PCM_STREAM_CAPTURE, 0) < 0) { fprintf(stderr, "Failed to open audio device\n"); return -1; } // 配置alsa音频设备参数 if (snd_pcm_set_params(handle, AUDIO_FORMAT, SND_PCM_ACCESS_RW_INTERLEAVED, AUDIO_CHANNELS, AUDIO_RATE, 1, 500000) < 0) { fprintf(stderr, "Failed to set audio device parameters\n"); return -1; } // 循环读取音频数据并发送rtp包 char audio_buf[AUDIO_FRAME_SIZE * 1024]; int frame_count = 0; while (1) { // 从alsa设备读取音频数据 int read_count = snd_pcm_readi(handle, audio_buf, 1024); if (read_count < 0) { read_count = snd_pcm_recover(handle, read_count, 0); if (read_count < 0) { fprintf(stderr, "Failed to read audio data\n"); break; } } // 创建rtp包并设置其数据 RtpPacket *packet = rtp_packet_new(AUDIO_FRAME_SIZE * read_count); packet->payloadtype = 0; memcpy(packet->payload, audio_buf, AUDIO_FRAME_SIZE * read_count); packet->timestamp = frame_count * AUDIO_FRAME_SIZE / AUDIO_CHANNELS; packet->marker = 0; // 将rtp发送到目标地址 if (rtp_session_sendto(session, packet->payload, packet->payload_len, addr) < 0) { fprintf(stderr, "Failed to send rtp packet\n"); rtp_packet_free(packet); break; } // 释放rtp包资源 rtp_packet_free(packet); // 增加音频帧计数 frame_count += read_count; } // 关闭alsa设备 snd_pcm_close(handle); // 释放rtp地址和会话资源 rtp_session_destroy(session); rtp_address_destroy(addr); // 清理ortp库资源 ortp_exit(); return 0; } ``` 请注意,此示例代码仅用于演示目的,实际使用时需要根据您的具体需求进行修改和优化。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁保康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值