mplayer 播放 pplive 的共享流媒体的脚本

Totem,mplayer,sopcast,realplayer,bmp
zwhuang
帖子: 157
注册时间: 2007-01-21 14:04
送出感谢: 1 次
接收感谢: 0

mplayer 播放 pplive 的共享流媒体的脚本

#1

帖子 zwhuang » 2007-01-21 14:27

脚本可以方便播放,只需要加入一个 IP 或者一段 IP 范围即可。

代码: 全选

#!/bin/bash
## NAME:   nettv.sh
## Author: zwhuang
## Email:  zwhuang@gmail.com
## Dated:  (Oct. 23, 2006)
## USAGE:  use IP address as input, the same as ``nmap''
##
##         nettv.sh -i 222.20.220.0/24
##    or
##         nettv.sh
##
PROG_NAME=nettv.sh
IP_ADDRESS=NULL
TMPFILE=/tmp/nettv.tmp
LSTFILE=/tmp/nettv.lst
LSTFLAG=0
PLAY_IT=1

## Usage; ##{{{
usage()
{
  echo "   [Usage]: nettv.sh [-h] [-d] [-i ip_address] [-f ip_listfile]"
  echo ""
  echo "     -i    specify the (i)p_address to be scanned;"
  echo "     -f    use an ip_list (f)ile;"
  echo "     -d    (d)aemon mode, only gets IPs, doesn't call mplayer."
  echo "     -h    (h)elp message;"
  echo ""
  exit 1
}
##}}}

## GetOpts; ##{{{
while getopts "i:f:dh" opt
do
  case $opt in
    i) IP_ADDRESS=$OPTARG;;
    f) LSTFLAG=1
       LSTFILE=$OPTARG;;
    d) PLAY_IT=0;;
    h) usage;;
    ?) usage;;
  esac
done
##}}}

if [ $LSTFLAG -eq 0 ] && [ "$IP_ADDRESS" != NULL ];then
  # getting valid IP address' with port 8888 open;
  nmap "$IP_ADDRESS" -p 8888 -oG $TMPFILE > /dev/null
  grep open $TMPFILE | sed 's/Host: \([0-9.]*\).*/\1/g' > $LSTFILE
fi

if [ ! -r $LSTFILE ];then
  echo "*** The NetTV IP list file [$LSTFILE] seems not reachable."
  echo "*** You'd better run <$PROG_NAME> with [-i ip_address]."
  exit 1
fi
# playing the video resource of these IP's one by one;
# you can switch to the next one by pressing ``q'' to quit from the present
# video;
cat $LSTFILE

if [ $PLAY_IT -eq 1 ];then
  for OPENIP in `cat $LSTFILE` 
  do
    echo ">>> Playing NetTV [#] $OPENIP"
    mplayer -nortc -ontop -afm dmo http://$OPENIP:8888/1.asf > /dev/null
    sleep 0.25
  done
fi

# vim:fdm=marker:fmr=##{{{,##}}}:tw=78
其中用到了 nmap -oG file 输出结果为方便 grep 查找的格式到一个文件。通过
grep 提取出包含可以访问的 IP 的条目,并且用 sed 截取 IP 地址,输出到一个临时
的 IP 列表文件。通过循环来逐一播放相应 IP 的视频资源。

之前会将可用的 IP 列表列出,并且显示正在播放资源的 IP。播放的文本信息通过
/dev/null 屏蔽,每个源的播放间隔为 0.25s,以便程序退出和启动的缓冲。

通过 -i 选项来指定 IP 就会重新扫描可用的 IP 资源,更新列表文件,重新开
始播放视频资源上的视频。通过 -f 选项来指定 IP 列表文件,则会跳过 IP 扫
描,直接使用列表文件中的 IP 来尝试播放。如果不指定 IP 和列表文件,则不进行扫描
,直接访问默认的旧的列表文件,可以达到瞬时显示的效果。播放频道的切换可以通过
mplayer 的退出当前视频快捷键 q 来实现。退出一个播放视频后,延时 0.25s 后启动
下一个视频资源的播放,相当于看电视的换台操作。

再附加一点,pplive 可以开多个频道共享,也就是同时开多个端口映射来播放多个节目
。那么,怎样知道这些端口呢?其实这个问题比较简单,端口是又 8888 顺序往后分配的
。也就是,默认的节目是映射到 8888 端口的,之后打开的共享节目映射到端口 8889,
再后是 8890,依次类推。扫描的方法也很简单:

代码: 全选

  $ nmap -p 8888-8893 $IP_ADDRESS
不过,对于这个脚本而言,扫描后面的端口几乎没有用处。因为个人用户看 pplive 节目
是不会开多个节目的!
附件
nettv.sh.tar
nettv.sh脚本文件
(10 KiB) 下载 463 次
phomeray
帖子: 524
注册时间: 2006-05-30 20:48
送出感谢: 0
接收感谢: 0

#2

帖子 phomeray » 2007-01-21 15:13

看不太明白,是不是lan中有人在win下用pplive,又开了upnp,用这个脚本可以看。
zwhuang
帖子: 157
注册时间: 2007-01-21 14:04
送出感谢: 1 次
接收感谢: 0

#3

帖子 zwhuang » 2007-01-21 15:52

phomeray 写了:看不太明白,是不是lan中有人在win下用pplive,又开了upnp,用这个脚本可以看。
并不局限于局域网。例如,在学校里面,完全可以指定学校里面的可用 IP 范围。

的确时使用别人 win 下的 pplive 的缓冲源来播放,播放的流畅度取决于对方下载播放的流畅度和本地从对方下载视频流的速度了。前者的速度一半可以保证,后者决定了可用 IP 范围。

不要求开 upnp,只要对方的 8888 端口没有被过滤即可。(open)

一般校内的可用 IP 就很多了,节目完全够看。而且大家关注的节目的相似性比较大。保证想看球的时候有台在放球赛,想看电影的时候有电影,也可以看电视。

这个脚本就想当于播放电视节目。“电视台”播什么节目我们控制不了,但是我们可以“选台”。一个台不满意,可以快速换另一个台。而且,跳过的台还可以通过 不加参数的 nettv.sh 命令直接从可用节目列表中重新读取播放。
头像
jazzi
帖子: 532
注册时间: 2005-10-16 23:26
来自: 泉州
送出感谢: 0
接收感谢: 3 次
联系:

#4

帖子 jazzi » 2007-01-22 13:35

高人,赞一个。和windows共享在现在这种情况下倒不失为一种折中的不错办法。当然,最美的就是干脆有linux版的pplive :D :D :D
You make it fun
It will make you fun
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#5

帖子 eexpress » 2007-01-22 15:35

没用过pplive。要是这脚本真可以都解决。不如直接python出个界面。如果不会python,找oneleaf。然后算你们2个合作的软件,我来加精,oneleaf设为公告,lz到其他论坛推广。
● 鸣学
zwhuang
帖子: 157
注册时间: 2007-01-21 14:04
送出感谢: 1 次
接收感谢: 0

#6

帖子 zwhuang » 2007-01-22 19:39

eexpress 写了:没用过pplive。要是这脚本真可以都解决。不如直接python出个界面。如果不会python,找oneleaf。然后算你们2个合作的软件,我来加精,oneleaf设为公告,lz到其他论坛推广。
看pplive等共享端口是 8888 的没问题流是完全可行的。
我在校园网就用这个脚本看的,选IP范围是通过学校BBS上的在线用户来随便设的。
其实看pplive的共享流(不管是否主动设置共享,只要这个端口没被该用户的系统过滤,或者被网络过滤,8888端口都会打开的),只要通过一行命令

代码: 全选

mplayer -afm dmo http://$OPENIP:8888/1.asf
就可以实现播放了。其中 -afm dmo 用来解码,1.asf 写不写无所谓,随便写什么好像都可以。
这个脚本只是找出一个网段内的开放了8888端口的IP,然后交给mplayer来逐个播放而已。找出这些可用的IP,是通过nmap来实现的,扫描一个C段,一般不到一分钟,简单快捷。

如果能够做出GUI的当然更好更方便啦,不过我不会做GUI界面,*_*。如果谁愿意来做当然好啊,到时候放出来给大家用。

其实这相当于单源的网络电视,只从单个IP端口下载流。流畅程度取决于本地机和流媒体提供者机器间的网络速度。

目前我用这个脚本来看校园网里的开放 8888 端口的流媒体。估计这种方式也只能在校园网内用比较好。一来校园网网速高,二来校园网里可用学生多,看pplive的人多,可用IP也多!

还要补充一点,这种直接由端口下载流媒体的方式,几乎不会对对方机器造成什么负担,因为流媒体每秒的流量并不高,不同于清晰度较高的电影。而且,如果不想被这个脚本“占便宜”,或者是不想被人“囗囗”的话 :lol: ,可以在系统中对8888端口过滤!因为这个脚本只会提取open状态的8888端口的IP,对于filtered和closed的,不会提取。例如:

代码: 全选

Host: xxx.xxx.xxx.0 ()   Ports: 8888/filtered/tcp//sun-answerbook///
Host: xxx.xxx.xxx.5 ()   Ports: 8888/filtered/tcp//sun-answerbook///
Host: xxx.xxx.xxx.25 ()  Ports: 8888/closed/tcp//sun-answerbook///
Host: xxx.xxx.xxx.46 ()  Ports: 8888/open/tcp//sun-answerbook///
Host: xxx.xxx.xxx.47 ()  Ports: 8888/closed/tcp//sun-answerbook///
Host: xxx.xxx.xxx.48 ()  Ports: 8888/open/tcp//sun-answerbook///
只会提取出

代码: 全选

xxx.xxx.xxx.46
xxx.xxx.xxx.48
然后交由mplayer播放。
[/b]
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15
送出感谢: 0
接收感谢: 0

...

#7

帖子 iblicf » 2007-01-25 10:11

这个方法只能用在局域网,单源的方式才能保证流量,adsl的基本不可行,没办法,网络电视现在还是群雄逐鹿呢。
盼望出个类似gaim的东西,逼急了我自己动手 :)
头像
yumumao
帖子: 171
注册时间: 2006-09-25 3:58
送出感谢: 0
接收感谢: 0

#8

帖子 yumumao » 2007-01-25 15:46

楼上的自己动手吧,现在PPLive里的节目确实多,无法舍弃……
fuhuizn
帖子: 728
注册时间: 2006-01-06 22:55
系统: ubuntu
送出感谢: 0
接收感谢: 12 次
联系:

#9

帖子 fuhuizn » 2007-01-25 17:40

我一直者是在VMware里运行pplive、ppstream,用mplayer放的,只要内在大些就不会卡
头像
cyf3732
帖子: 174
注册时间: 2006-07-24 19:22
送出感谢: 0
接收感谢: 0

#10

帖子 cyf3732 » 2007-05-27 17:31

这个东东要怎么用呢?指教一下亚!bash的东东我都不明白。。。
zabbey
帖子: 296
注册时间: 2006-05-06 2:03
送出感谢: 0
接收感谢: 0

#11

帖子 zabbey » 2007-05-27 19:04

用个这个才发现好多人都在看WarCraft的比赛。
头像
cyf3732
帖子: 174
注册时间: 2006-07-24 19:22
送出感谢: 0
接收感谢: 0

#12

帖子 cyf3732 » 2007-05-27 22:38

楼上的怎么用的阿?指教一下吧!
zabbey
帖子: 296
注册时间: 2006-05-06 2:03
送出感谢: 0
接收感谢: 0

#13

帖子 zabbey » 2007-05-27 23:00

cyf3732 写了:楼上的怎么用的阿?指教一下吧!
参照脚本里的说明,用./nettv.sh -i 10.1.112.0/24就行了,IP按自己所在的网段设置。
头像
cyf3732
帖子: 174
注册时间: 2006-07-24 19:22
送出感谢: 0
接收感谢: 0

#14

帖子 cyf3732 » 2007-05-28 19:52

多谢楼上的!终于用上了,虽然自主性不大,不过还是很不错了!
中间遇到一个问题,就是好像默认的nmap没有装上,运行./nettv.sh的时候出现了没有nmap这个命令的提示,所以需要:

代码: 全选

sudo apt-get install nmap
现在的问题是,这个ip_listfile需要怎么写呢?不会是一个ip一个ip的添加吧。。。 那实在是太累了。。。
头像
williampan
帖子: 110
注册时间: 2005-10-23 11:56
送出感谢: 0
接收感谢: 0
联系:

#15

帖子 williampan » 2007-05-29 14:16

网内一个也没有。你说倒霉不倒霉
我是神仙,想睡觉,我要睡觉似神仙
MSN :pdsjj@21cn.com
QQ:280367891
ICQ:381167891

Acer aspire one D250(1284) for ubuntu
回复

回到 “影音多媒体”