我正在使用AVPlayer播放mp3音频文件。我正在使用经过测试且可以正常运行的网址。我需要使用AVPlayer,因为我需要以编程方式设置UISlider,而AVPlayer很方便。 UISlider在音频播放时起作用并更新。音频可能正在播放,但我听不到声音。我之所以这样说,是因为UISlider正在工作。
更新:在模拟器上构建应用程序时,您可以听到音频。在设备上进行构建时发生问题-我的设备是XS MAX。
链接到屏幕记录ong-> 访问:https://streamable.com/nkbn8
我尝试将相同的URL用于AVAudioPlayer和音频播放,并且您可以听到。
MainActivity code
package com.oleg.firestoretest;
public static final String TAG = "FireLog";
private CollectionReference noteBookRef;
private FirebaseFirestore mFirestore;
private NoteAdapter adapter;
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFirestore = FirebaseFirestore.getInstance();
noteBookRef = mFirestore.collection("Notebook");
setupRecyclerView();
}
private void setupRecyclerView() {
Query query = noteBookRef.orderBy("priority", Query.Direction.DESCENDING);
FirestoreRecyclerOptions<Note> options = new FirestoreRecyclerOptions.Builder<Note>()
.setQuery(query,Note.class)
.build();
adapter = new NoteAdapter(options);
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
}
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
}
public Note() {
}
public Note(String title, String content, int priority) {
this.title = title;
this.content = content;
this.priority = priority;
}
public String getTitle() {
return title;
}
public String getContent() {
return content;
}
public int getPriority() {
return priority;
}
}
public class NoteAdapter extends FirestoreRecyclerAdapter<Note, NoteAdapter.NoteHolder> {
private Context mContext;
public NoteAdapter(@NonNull FirestoreRecyclerOptions<Note> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull NoteHolder noteHolder, int i, @NonNull Note note) {
noteHolder.title.setText(note.getTitle());
noteHolder.content.setText(note.getContent());
noteHolder.priority.setText(String.valueOf(note.getPriority()));
}
@NonNull
@Override
public NoteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.note_item,
parent, false);
return new NoteHolder(v);
}
class NoteHolder extends RecyclerView.ViewHolder {
TextView title;
TextView content;
TextView priority;
public NoteHolder(@NonNull View itemView) {
super(itemView);
title = itemView.findViewById(R.id.title_text);
content = itemView.findViewById(R.id.content_text);
priority = itemView.findViewById(R.id.priority_text);
}
}
}
预期结果:听到音频播放
实际结果:听不到音频播放。好像音频只是没有声音播放。
答案 0 :(得分:2)
使用AVPlayer时,应确保设备未处于静音模式,因为即使您的音量最大,也不会导致输出音频。
如果您想让设备保持静音模式并仍播放音频,则可以在.play()之前使用以下代码:
do {
try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
}
catch {
// report for an error
print(error)
}
答案 1 :(得分:1)
我尝试使用最简单的版本,它可以在模拟器和设备(XS)上运行。
如@ N.Der所述,请检查类别模式。在这种情况下,在静音模式下,听不到声音。
import AVFoundation
import UIKit
final class ViewController: UIViewController {
private var audioPlayer: AVPlayer?
override func viewDidLoad() {
super.viewDidLoad()
setupAudioContent()
}
private func setupAudioContent() {
guard let url = URL(string: "https://s3.amazonaws.com/kargopolov/kukushka.mp3")
else { return }
audioPlayer = AVPlayer(url: url as URL)
audioPlayer?.play()
}
}
要轻松管理avplayer配置和所有中断,您可以尝试以下库:MordernAVPlayer