3945|1

5979

帖子

8

TA的资源

版主

楼主
 

【TI原创】基于LM3S8962的网络收音机(七) --- 网络实时播放MP3 [复制链接]

   上一次测试了网络存储播放MP3,这样有个问题实时性不强,每次都需要把文件下载到本地才能够运行,我们这次作的目的是希望能够实时播放MP3

 

   具体的做法就是每一个网络数据包,就从VS1053播放出去。在前面程序的基础上只需修改tcpclient.c文件就可以了

 

  程序如下:

#include <rtthread.h>

#include <lwip/netdb.h> /* 为了解析主机名,需要包含netdb.h头文件 */

#include <lwip/sockets.h> /* 使用BSD socket,需要包含sockets.h头文件 */

#include <ff.h>

#include <diskio.h>

#include "vs1053.h"

 

void play2(char *wavFile);

void play(int bytes_received);

static const char send_data[] = "need!"; /* 发送用到的数据 */

 

void play(int bytes_received)//播放接收到的网络数据

{

  int i;

 

  for(i=0;i<bytes_received;i=i+32)

  {

    while(VS_DREQ_READ()==0);

       VS_DCn_LOW();

    VS_CSn_HIGH();

    for(k=0;k<32;k++)

    {  

      _ssi_readwrite(*(recv_data + k));

    }

    VS_DCn_HIGH();

    VS_CSn_LOW();

  }

}

void tcpclient(const char* url, int port)//应用程序

{

/////////////////////////////////////////

//  FIL file;

//  FRESULT res;

    int br,num;

//////////////////////////////////////////

   char *recv_data,k;

   struct hostent *host;

   int sock, bytes_received;

   struct sockaddr_in server_addr;

 

//准备接收网络数据

   host = gethostbyname(url);

   recv_data = rt_malloc(128);//(512);      

   if (recv_data == RT_NULL)

   {

       rt_kprintf("No memory\n");

       return;

   }

   if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)

   {

 

       rt_kprintf("Socket error\n");

 

       rt_free(recv_data);

       return;

   }

 

   server_addr.sin_family = AF_INET;

   server_addr.sin_port = htons(port);

   server_addr.sin_addr = *((struct in_addr *)host->h_addr);

   rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));

 

   if (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)

   {

       rt_kprintf("Connect error\n");

       rt_free(recv_data);

       return;

   }

 

   while(1)

   {

       //收到网络数据包

       bytes_received = recv(sock, recv_data, 128, 0);

       if (bytes_received < 0)

       {

           lwip_close(sock);

           rt_free(recv_data);

           break;

       }

       play(bytes_received); //开始播放

     

      //告诉PC端发送下一包网络数据

       send(sock,send_data,strlen(send_data), 0);

   }

 

   return;

}                                                                                

 

#ifdef RT_USING_FINSH

#include <finsh.h>

/* 输出tcpclient函数到finsh shell */

FINSH_FUNCTION_EXPORT(tcpclient, startup tcp client);

#endif

 

 

 

tcpclient.c  tcpclient.rar (1.29 KB, 下载次数: 40)

 

存在的问题:

1.      没有加入流控,下一步可能需要要求一下RTP网络协议;

2.      测试的程序还是比较简单,程序架构上面还需要下功夫

3.      RT-thread还不是很熟悉

4.      界面,按键处理可能后续也要加上

 

 

[ 本帖最后由 chenzhufly 于 2011-10-16 13:56 编辑 ]

最新回复

tcpclient.rar 文件有问题,太小。打开后什么都没有  详情 回复 发表于 2014-8-17 16:09

赞赏

1

查看全部赞赏

 
点赞 关注
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰

回复
举报

422

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
tcpclient.rar 文件有问题,太小。打开后什么都没有
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表