LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2302|回复: 7

如何实现使用mplayer定时录制网络电视/广播?

[复制链接]
发表于 2007-5-13 10:36:30 | 显示全部楼层 |阅读模式
如题!:help
 楼主| 发表于 2007-6-5 09:47:33 | 显示全部楼层
哦,没人感兴趣
回复 支持 反对

使用道具 举报

发表于 2007-6-5 10:33:38 | 显示全部楼层
定时用 cron 之类的,录制就用 mplayer 或者 mencoder 好了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-25 17:00:08 | 显示全部楼层
Linux 技巧: 控制预定作业的持续时间
http://www.ibm.com/developerwork ... minating/index.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-10 16:35:07 | 显示全部楼层
写了一个脚本:
# !/bin/bash

# 参数1:录制时长。

# 重新启动mplayer的函数。
restartencode(){
        echo "restart程序启动"
        # 侦测现在的mplayer 的pid
        mplayerpid_now=`ps -af | grep mplayer | grep cnr9 | awk '{ print $2 }'`
        echo "原mplayer的pid : $1"
        echo "现mplayer的pid : $mplayerpid_now"
        mplayerpid=$mplayerpid_now
        # 首先测试是否超过最大重试次数,然后测试是否有mplayer正在运行。
        if [ "$try_times" -lt "try_limit" ]
                then
                        if [ "$mplayerpid_now" ]
                                then
                                        echo "不需重启mplayer"
                                else
                                        audiofile="cnr9-$(date +'%Y%m%d-%T').rm.avi"
                                        echo "重新启动mplayer"
                                        mplayer $address -dumpstream -dumpfile ~/audio/$audiofile < /dev/null > /dev/null 2>&1 &
                                        mplayerpid=$!
                                        echo "新mplayer的pid : $mplayerpid"
                                        let "try_times += 1"
                                        echo "重试次数$try_times"
                        fi
                else
                        echo "超出重试次数退出!"
                        exit
        fi
        }

# 录制时长
runtime=${1:-30m}
# 这个脚本的pid
mypid=$$
# Enable immediate notification of SIGCHLD
set -bm
# 录制文件名,文件名为“基名+时间”以免产生覆盖
audiofile="cnr9-$(date +'%Y%m%d-%T').rm.avi"
# 录制地址
address="rtsp://211.89.225.1:554/encoder/cnr9"
# mplayer缓冲cache设置,单位K
cache=32
# 网络连接重试次数
try_times=0
# 网络连接次数限定
try_limit=10

# 屏幕显示
echo "开始录制: $audiofile"
echo "开始时间: $(date +'%Y%m%d-%T')"
echo "录制时长: $1 "
echo "录制地址: $address"
echo "mplayer缓冲cache设置:$cache K"
echo "======================================="

# 利用mplayer进行录制,注意mplayer放入后台的用法。
mplayer -cache $cache $address -dumpstream -dumpfile ~/audio/$audiofile < /dev/null > /dev/null 2>&1 &

echo "mplayer -cache $cache $address -dumpstream -dumpfile $audiofile < /dev/null 2>&1 &"
echo "======================================="

# mplayer的pid
mplayerpid=$!
echo "初始mplayer的pid:$mplayerpid"

# mplayer在录制时长结束前退出,可能是网络问题。利用trap侦测信号,调用restart函数重启mplayer。
# Set a trap
trap "echo 'mplayer错误,重试,已经重试$try_times'" CHLD INT TERM KILL QUIT EXIT
trap "restartencode $mplayerpid" CHLD INT TERM KILL QUIT EXIT

# 开始计算录制时长前的缓冲时间,mplayer录制缓冲时间
sleep 10s
# Sleep for the specified time,录制持续时间控制。
sleep $runtime
sleeppid=$!

# Disable traps,trap复位
trap SIGCHLD
trap SIGINT
trap SIGTERM
trap SIGKILL
trap SIGQUIT
trap EXIT
trap TSTP

# 录制结束
mplayerpid_now=`ps -a | grep mplayer | awk '{ print $1 }'`
echo "现在mplayer进程$mplayerpid_now"
echo "中止mplayer进程$mplayerpid"
kill -15 $mplayerpid
echo "录制完成!"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-10 23:03:09 | 显示全部楼层
脚本的讨论转到shell版,欢迎大家去拍砖
http://www.linuxsir.cn/bbs/thread319110.html
回复 支持 反对

使用道具 举报

发表于 2007-12-12 16:31:03 | 显示全部楼层
说好听点,叫做Linuxers清心寡欲,不喜欢娱乐;说不好听点,叫做大部分人都还在让系统运行得舒服点而苦苦挣扎,分不出心思研究这个……
回复 支持 反对

使用道具 举报

发表于 2007-12-12 21:01:47 | 显示全部楼层
哈哈。所言极是
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表