使用VLC接收RTP流并时时播放(RTP流是pcma包)

写在前:

  或许是本人水平有限, 一个简单的问题楞是想了很久还没想出来, 最后还是问我师父的结果.

  总的来说, 目的就是: 服务器会发给本地电脑一系列的rtp包, 这些rtp包都是pcma编码的语音包, 我是想在本地将这些语音包给解压并播放出来.

  上网查了很多, 也写了sdp文件, 然而一直实现不了

  sdp文件如下:   

    m=audio 50060 RTP/AVP 8
    a=rtpmap:8 PCMA/8000/1
    a=framerate:50
    c=IN IP4 22.22.22.159

  这几个参数的意思, 可以看:http://blog.csdn.net/zhangjikuan/article/details/27378237

  

问题解决:

  主要还是对网络之间的原理不是很理解, 网络都是io流的数据, 那么我应该使用VLC的网络串流的功能, 使用这个功能来接收服务器发送过来的语音数据流

  因些这个问题就很好解决了

  1.首先, 确保你的本地电脑是否收到了服务器发来的数据流, 可以用抓包软件wireshark来确定是否收到

  2.其次, 确定你收到包可以解析成语音, 使用wireshark可以将UDP包--->解析成-->RTP包, 这些RTP包可以直接使用wireshark播放

  3.现在, 已经可以确定本地收到语音包, 接着就是用VLC播放器将这些语音包时时播放出来就可以了

    打开VLC, 选择"媒体(M)"  --> "打开网络串流(N)"  -->  在"请输入网络URL:"下输入--"rtp://@1234"  --> "播放"  即可.

    其中, rtp: 表示VLC接收的是rtp包, @表示本地(瞎掰的, 个人理解), 1234: 表示本地接收的端口

  4.最后, 让你的服务器发送语音包给你本地的电脑, 这样戴上耳机, 就可以听到服务器发过来的语音.

想法: 

  1.一知半解是最要命的, 

    本地想收到语音包并解析出来, 一开始的步骤都对, 从本地可以收到语言包到解析出来听到声音, 用了两天时间, 只因为一个盲点: VLC怎么接收从网络发来的语音包并解析

    从网上查了很多人的博客或者其它的一些论坛, 没有能说明清楚的, 套用了一些方法(写sdp文件), 只能让我觉得是不是我哪里配置错了, 一直都在绕圈子, 明明就只差临门一脚, 却怎么也跨不过去

    在这里, 

      a) 不知道VLC怎么接收网络发来的数据包, 有哪些方式

      b) 不清楚网络数据传输是以流的形式

    就是在这样对工具和场景的不了解, 会花费大量时间在无效的工作上(查看很多重复的博客, 论坛), 对个人和公司都是有害的, 浪费个人时间和公司的时间

  2.官方文档很重要

    虽然一起都清楚, 但人都是懒的, 我也不想看一大堆文档, 只为解决一个小问题.

    但恰恰就是因为一种心理, 可能会导致不可预估的后果

    如果这次我好好看了文档, 可能会花费很长时间在看文档上, 还可能因为啃英文文档啃到想吐, 但另一方面也加强了看英文文档或中文文档的熟练程度, 这方面来说也是一种进步, 再说查看官方文档, 也就不需要重复搜索网络的博文或论坛, 同时因为是官方文档, 还可以看到一些其它可能用到的功能, 即使现在不用, 说不定以后会用到

  3.总的来说, 脚踏实地, 理解清楚想实现的功能, 涉及到一些不明确的方面, 以官方文档为主, 好好学习英文^^!

 

  

原文地址:https://www.cnblogs.com/vitoboy/p/8393205.html