kg123456

kg123456

0个粉丝

14

问答

0

专栏

3

资料

kg123456  发布于  2016-07-04 08:47:34
采纳率 0%
14个问答
9364

【已解决】关于RTSP音频封包

 
本帖最后由 kg123456 于 2016-7-11 15:54 编辑

如题,使用RTSP协议做实时传输,PC端使用vlc播放。
SDP怎么封包,一般用什么格式的音频,G711A?G711U?G726?或者直接可以用PCM裸流?
RTP传输处任何设置?

谢谢各位前辈、同学:handshake



将代码
                        //从第13个字节开始  1字节
                        nalu_hdr =(NALU_HEADER*)&sendbuf[12];                 //将sendbuf[12]的地址赋给nalu_hdr,以后对nalu_hdr的操作即是对sendbuf
                        nalu_hdr->F=0;
                        nalu_hdr->NRI=  nIsIFrm;
                        nalu_hdr->TYPE=  nNaluType;
去掉


更改nalu_payload=&sendbuf[13];为nalu_payload=&sendbuf[12];
长度做相应更改  解决...之前是借用H264封包,没深入了解NALU的作用,暂时不用视频,先将这段去掉。
多么痛的领悟。。
我来回答
回答16个
时间排序
认可量排序

ngswfx

2个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-07-04 12:56:24
认可0
本帖最后由 ngswfx 于 2016-7-4 13:01 编辑

不懂,建议别从头自己写,找个源码参考着弄。

/////////////自己写,没弄过的同学,折腾一个月你也不一定搞得出来,要是有例子,一天就搞定了。


//////////////////网上源码里就有不少支持的格式:

/* API to send the G711 ALaw data to the given session                        */
RTP_RTSPLIB_API INT32 RTPSendG711AData(INT32 SessionHandle,BYTE *BufferData,INT32 BufferLength,   BYTE *HeaderExtension,INT32 HeaderExtensionSize,UINT16 HeaderExtensionType,INT64 NTPTimeStamp,   INT32 SendFileFlag,INT32 DeviceFD,       BYTE  *VZero, void *conn_node);
/* API to send the G711 ULaw data to the given session                        */
RTP_RTSPLIB_API INT32 RTPSendG711UData(INT32 SessionHandle,BYTE *BufferData,INT32 BufferLength,   BYTE *HeaderExtension,INT32 HeaderExtensionSize,UINT16 HeaderExtensionType,INT64 NTPTimeStamp,   INT32 SendFileFlag,INT32 DeviceFD,       BYTE  *VZero, void *conn_node);
/* API to send the PCM data to the given session                                  */
RTP_RTSPLIB_API INT32 RTPSendPCMData(INT32 SessionHandle,BYTE *BufferData,INT32 BufferLength,   BYTE *HeaderExtension,INT32 HeaderExtensionSize,UINT16 HeaderExtensionType,INT64 NTPTimeStamp,   INT32 SendFileFlag,INT32 DeviceFD,       BYTE  *VZero, void *conn_node);
/* API to send the G726 data to the given session                         */
RTP_RTSPLIB_API INT32 RTPSendG726Data(INT32 SessionHandle,BYTE  *BufferData,INT32 BufferLength,   BYTE  *HeaderExtension,INT32 HeaderExtensionSize, UINT16 HeaderExtensionType,INT64 NTPTimeStamp,   INT32 SendFileFlag,INT32 DeviceFD,       BYTE  *VZero, void *conn_node);
/* API to send the AAC data to the given session                              */
RTP_RTSPLIB_API INT32 RTPSendAACData( INT32 SessionHandle,BYTE *BufferData,INT32 BufferLength,   BYTE *HeaderExtension,INT32 HeaderExtensionSize,UINT16 HeaderExtensionType,INT64 NTPTimeStamp,   INT32 SendFileFlag,INT32 DeviceFD,       BYTE  *VZero, void *conn_node);
/* API to send the MPA data to the given session                              */
RTP_RTSPLIB_API INT32 RTPSendMPAData( INT32 SessionHandle,BYTE *BufferData,INT32 BufferLength,   BYTE *HeaderExtension,INT32 HeaderExtensionSize,UINT16 HeaderExtensionType,INT64 NTPTimeStamp,   INT32 SendFileFlag,INT32 DeviceFD,       BYTE  *VZero, void *conn_node);
///////////////////////////////////////////////////////////////////////////////

kg123456

0个粉丝

14

问答

0

专栏

3

资料

kg123456 2016-07-04 13:56:56
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33118&ptid=11834]ngswfx 发表于 2016-7-4 12:56[/url]
不懂,建议别从头自己写,找个源码参考着弄。

/////////////自己写,没弄过的同学,折腾一个月你也不一 ...[/quote]

先共享下   这个是网上流传的基于RTSP的海思视频实时播放程序   然后我是在这基础上做更改的  只是配置UDP时有点问题   

ngswfx

2个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-07-04 14:12:02
认可0
本帖最后由 ngswfx 于 2016-7-4 14:51 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=33125&ptid=11834]kg123456 发表于 2016-7-4 13:56[/url]
先共享下   这个是网上流传的基于RTSP的海思视频实时播放程序   然后我是在这基础上做更改的  只是配置UD ...[/quote]

这个版本太简单了,不全,构架也不行,你到csdn上找一下,应该有直接用live555改的版本,强大一些,在那个基础上弄,这个版本太简单,要弄得东西太多了。


//////////实际使用中,tcp传输 H264 711都是基本的。

找代码的时候,找个构架复杂的,只要前期你调试通了,后期功能修改就容易多了。而且需要改的地方也不多,大部分需要的功能其实已经有了。

开始就弄个简单的,改来改去,要改的地方太多了。

kg123456

0个粉丝

14

问答

0

专栏

3

资料

kg123456 2016-07-04 14:37:50
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33128&ptid=11834]ngswfx 发表于 2016-7-4 14:12[/url]
这个版本太简单了,不全,构架也不行,你到csdn上找一下,应该有直接用live555改的版本,强大一些,在 ...[/quote]

ok  我找找看:handshake

kg123456

0个粉丝

14

问答

0

专栏

3

资料

kg123456 2016-07-04 14:50:53
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33128&ptid=11834]ngswfx 发表于 2016-7-4 14:12[/url]
这个版本太简单了,不全,构架也不行,你到csdn上找一下,应该有直接用live555改的版本,强大一些,在 ...[/quote]

还有  我想请教下  我刚用这个程序  生成G711A的文件  rtsp传到PC端  vlc播放时有哒哒的噪声  可能什么情况?

ngswfx

2个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-07-04 15:11:26
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33135&ptid=11834]kg123456 发表于 2016-7-4 14:50[/url]
还有  我想请教下  我刚用这个程序  生成G711A的文件  rtsp传到PC端  vlc播放时有哒哒的噪声  可能什么情 ...[/quote]

图像错了,通常花屏或者出不来。

声音错了,就这样,滴滴滴,嗒嗒嗒。

////我搞声音少,几年前,弄过一段时间,就那几个参数,弄来弄去的。当时弄得还是PCM的,什么8K 16bit 那几个参数,只要不对,声音就要么快放,要么慢放。搞了好几天。

/////////////////////建议你把代码以及测试文件弄上来,找大侠分析一下。这么说不好判断问题所在。

药导

1个粉丝

23

问答

0

专栏

11

资料

药导 2016-07-06 08:46:35
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33135&ptid=11834]kg123456 发表于 2016-7-4 14:50[/url]
还有  我想请教下  我刚用这个程序  生成G711A的文件  rtsp传到PC端  vlc播放时有哒哒的噪声  可能什么情 ...[/quote]

哒哒的声音是海思语音帧头没去掉吧,把海思的四个字节语音帧头去掉试试

kg123456

0个粉丝

14

问答

0

专栏

3

资料

kg123456 2016-07-06 17:19:55
认可0
我将发送出去的数据保存成文件  然后在PC端用软件打开


图1是整体图   可以看到哒哒声的开源..
图2是放大后的  总共13个点

然后我程序里面的RTP头+nalu头 刚好13字节。。
附部分程序:


                struct sockaddr_in server;
                server.sin_family=AF_INET;
                    server.sin_port=htons(g_rtspClients[is].rtpport[0]);         //客户端端口号
                    server.sin_addr.s_addr=inet_addr(g_rtspClients[is].IP);
                int bytes=0;
                unsigned int timestamp_increse=0;                //时间戳
               
                //framerate = 25;               
               
                timestamp_increse=320;        //(unsigned int)(8000.0 / framerate);                                        //为时戳提供8 kHz 时钟频率
                //Rettest=sendto(udpfd, buffer, nAuFrmLen, 0, (struct sockaddr *)&server,sizeof(server));
       
                //rtp固定包头,为12字节,该句将
                rtp_hdr =(RTP_FIXED_HEADER*)&sendbuf[0];
                //设置RTP_HEADER
                rtp_hdr->payload     = 0;                                               
                rtp_hdr->version     = 2;                                  //版本号,此版本固定为2
                rtp_hdr->marker    = 0;                                            //标志位,由具体协议规定其值
                rtp_hdr->ssrc      = htonl(10);                                   //随机指定为10,并且在本RTP回话中全局唯一        同步信源(SSRC)标识符
                //marker、seq_no按具体设定

//此处音频帧nAuFrmLen=324
                //当一个NALU小于nalu_sent_len字节时,采样一个单RTP包发送
                if(nAuFrmLen<=nalu_sent_len)                //待发的数据小于一次可发送量时
                {
                        //设置rtp M 位
                        rtp_hdr->marker=1;
                        rtp_hdr->seq_no = htons(g_rtspClients[is].seqnum++);         //序列号,每发送一个RTP包增1,
                       
                        //从第13个字节开始  1字节
                        nalu_hdr =(NALU_HEADER*)&sendbuf[12];                 //将sendbuf[12]的地址赋给nalu_hdr,以后对nalu_hdr的操作即是对sendbuf
                        nalu_hdr->F=0;
                        nalu_hdr->NRI=  nIsIFrm;
                        nalu_hdr->TYPE=  nNaluType;

                        nalu_payload=&sendbuf[13];                                        //同理将sendbuf[13]赋给nalu_payload
                        memcpy(nalu_payload,buffer+4,nAuFrmLen);        //去海思帧头                       

                        g_rtspClients[is].tsvid = g_rtspClients[is].tsvid+timestamp_increse;               
                        
                        rtp_hdr->timestamp=htonl(g_rtspClients[is].tsvid);                //将主机数转换成无符号长整型的网络字节顺序
                       
                        bytes=nAuFrmLen+13;                        //获得sendbuf的长度,为(nalu的长度(包含NALU头但除去起始前缀) + rtp_header的固定长度)13               
                        Rettest = sendto(udpfd, sendbuf, bytes, 0, (struct sockaddr *)&server,sizeof(server));       
       
                }        //end if(nAuFrmLen<=nalu_sent_len)


我怀疑是否这干扰就是这13个字节,因为我在写文件时
若是
fwrite(sendbuf+13,1,stStream.u32Len, pfd);               
就变成图3了   

所以  是不是VLC在接收RTSP流时  没做处理?然后我该怎么去修改??


麻烦各位大神、前辈、同学帮帮忙~
               

zcc246

0个粉丝

1

问答

0

专栏

0

资料

zcc246 2016-09-26 16:57:39
认可0
最后怎么解决的啊 最近也刚在做音频传输

kg123456

0个粉丝

14

问答

0

专栏

3

资料

kg123456 2016-09-27 08:49:08
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=38461&ptid=11834]zcc246 发表于 2016-9-26 16:57[/url]
最后怎么解决的啊 最近也刚在做音频传输[/quote]

1楼“将代码...”   那段就是我这边问题解决方法

zcc246

0个粉丝

1

问答

0

专栏

0

资料

zcc246 2016-09-28 20:15:31
认可0
能不能分享下你的音频传输部分实现的源码啊  我知道这样不好  唉  

hik.leo

0个粉丝

15

问答

0

专栏

1

资料

hik.leo 2016-09-29 00:41:50
认可0
这个是基于UDP的吧? rtsp over tcp是否还要再加4个字节

kg123456

0个粉丝

14

问答

0

专栏

3

资料

kg123456 2016-09-29 14:47:24
认可0
本帖最后由 kg123456 于 2016-9-30 08:50 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=38658&ptid=11834]zcc246 发表于 2016-9-28 20:15[/url]
能不能分享下你的音频传输部分实现的源码啊  我知道这样不好  唉[/quote]

网上都有的  然后根据需要添加一些   前面那个是视频的  这个传是音频的   发漏了

kg123456

0个粉丝

14

问答

0

专栏

3

资料

kg123456 2016-09-29 14:48:26
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=38666&ptid=11834]hik.leo 发表于 2016-9-29 00:41[/url]
这个是基于UDP的吧? rtsp over tcp是否还要再加4个字节[/quote]

抱歉  基于tcp的没搞过  没研究过

乔布斯

0个粉丝

3

问答

0

专栏

0

资料

乔布斯 2017-03-04 06:31:36
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33128&ptid=11834]ngswfx 发表于 2016-7-4 14:12[/url]
这个版本太简单了,不全,构架也不行,你到csdn上找一下,应该有直接用live555改的版本,强大一些,在 ...[/quote]

大神,能否帮助推荐一下网址啊?搜了两天,都翻遍了,也没找到能顺利接手的。可能是关键字不对。我搜的RTSP、RTSP client、RTSP live555。

qn1588300887

0个粉丝

1

问答

0

专栏

0

资料

qn1588300887 2020-10-27 16:53:17
认可0
音频封包很难啊。。。。。
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区