zero 免焊 树莓派_树莓派Zero从零开始折腾的那些事「附几本PDF参考书」

#!/usr/bin/env python3

import os

import socketserver

import threading

import json

import atexit

from RPi import GPIO

from omxplayer.player import OMXPlayer

from pathlib import Path

from time import sleep

# PATH需要修改成树莓派正确的存放目录

AUDIO_PATH = "/var/homeshare/DLNA/Music/"

VIDEO_PATH = "/var/homeshare/DLNA/Video/"

APP_NAME = "OMXPlayer"

TAG = __file__ + ':'

# 全局变量

play = dict({

'volume': 0.1,

'total_time': 0,

'current_time': 0,

'playback_status': 'stop'

})

cmd_update = None

player = None

server = None

class MyServer(socketserver.BaseRequestHandler):

'''

数据接收服务

'''

def handle(self):

conn = self.request

# conn.sendall(bytes(APP_NAME, encoding="utf-8"))

# print("conn is :", self.request)  # conn

while True:

try:

ret_bytes = conn.recv(1024)

if not ret_bytes:

break

ret_str = str(ret_bytes, encoding="utf-8")

ret = data_process(ret_str)

print(ret)

conn.sendall(bytes(ret, encoding="utf-8"))

except Exception as e:

print(TAG, 'handle error',  e)

break

def data_process(ret_str):

global cmd_update, play

'''

数据JSON/DICT分析处理

'''

ret = 'error'

try:

d = json.loads(ret_str)

if 'app' in d and d['app'] == APP_NAME:

play.update(d)

cmd_update = dict()

cmd_update.update(d)

ret = json.dumps(play)

else:

print(TAG, 'app error:', d)

except Exception as e:

print(TAG, 'json loads error', e)

return ret

# 正常、异常退出处理

@atexit.register

def atexit_fun():

print(TAG + 'i am exit, stack track:')

GPIO.cleanup()

if server is not None:

server.shutdown()

server.server_close()

if player is not None:

player.quit()

def led_run():

GPIO.setmode(GPIO.BCM)

GPIO.setup(21, GPIO.OUT)

while True:

GPIO.output(21, GPIO.HIGH)

if 'led_duty' in play:

sleep(0.1 * int(play['led_duty']))

else:

sleep(0.5)

GPIO.output(21, GPIO.LOW)

sleep(0.5)

class Player(OMXPlayer):

def __init__(self, *args, **kwargs):

super(Player, self).__init__(*args, **kwargs)

self.status = True

self.stopEvent = self.stop_event

@staticmethod

def stop_event(obj):

obj.status = False

print('stop_event')

def playback_status(self):

try:

return super(Player, self).playback_status()

except Exception as e:

print(e)

self.status = False

def quit(self):

super(Player, self).quit()

self.status = False

if __name__ == "__main__":

print("OMXPlayer Running...")

# 初始化TCPServer,来接收数据

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

port = socket.getservbyname("http", "tcp")

s.connect(("www.126.com", port))

ip = s.getsockname()[0]

s.close()

server = socketserver.ThreadingTCPServer((ip, 8080), MyServer)

server_thread = threading.Thread(target=server.serve_forever)

server_thread.daemon = True

server_thread.start()

# 初始化LED任务

led_thread = threading.Thread(target=led_run)

led_thread.daemon = True

led_thread.start()

# 播放控制程序

print("wait...", ip)

player = None

# player = Player(Path(AUDIO_PATH + 'a9.mp3'))

#

# while True:

#     if player.status:

#         try:

#             print(player.playback_status())

#         except Exception as e:

#             print(e)

#         sleep(1)

while True:

cmd_update = None

while True:

if cmd_update is not None:

break

else:

if player is not None and player.status:

try:

player['current_time'] = player.position()

player['playback_status'] = player.playback_status()

print(' %s  %d  %d' % (player['playback_status'], player['total_time'], player['current_time']))

except:pass

else:

play['playback_status'] = 'stop'

play['current_time'] = 0

sleep(0.1)

print('cmd: ', cmd_update)

print('play: ', play)

if player is not None and player.status:

if cmd_update['control'] == 'volume':

player.set_volume(play['volume'])

continue

if player is not None:

player.quit()

player = None

if cmd_update['control'] == 'play':

playname = play['filename'].lower()

filepath = None

file_format = None

if '.mp3' in playname:

filepath = Path(AUDIO_PATH + play['filename'])

file_format = 'AUDIO'

elif '.mp4' in playname or '.avi' in playname or '.rmvb' in playname:

filepath = Path(VIDEO_PATH + play['filename'])

file_format = 'VIDEO'

if file_format is not None:

if not os.path.exists(filepath):

print(TAG, 'file is not exist ', filepath)

filepath = Path('/mnt/usb_flash/' + play['filename'])

if not os.path.exists(filepath):

print(TAG, 'file is not exist ', filepath)

filepath = None

if filepath is not None:

player = Player(filepath)

player.set_volume(play['volume'])

play['total_time'] = player.metadata()['mpris:length']/1000000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值